- 20 Jun, 2015 6 commits
-
-
Kevin Modzelewski authored
- if we try guarding after a mutation - if we use all of our scratch space Now, just set a "failed" flag internally and which prevents committing. The motivation for the first part is trying to get rewrite calls to tp_getattro; if the rewrite is from getattr then it will succeed, but if it comes from callattr then we will want to do some more guards after the tp_getattro. We could try to pass that state around, but for now just use the 'failed' approach.
-
Kevin Modzelewski authored
We don't usually call callattr with null_on_nonexistent, but we do for __hasattr__ checking. We can rewrite those to just do the guards and then return NULL.
-
Kevin Modzelewski authored
kind of hacky but I think it's ok for now.
-
Kevin Modzelewski authored
We could also add more general rewriting, but - these new special cases catch something like 95% of the cases that we weren't rewriting - these special cases are faster than doing the generic nonzerno mechanism (looking up the attribute, etc) It'd be nice if we could get to the point that the generic rewrites we'd create would be as good as the hand-crafted ones, but that would require knowing that we don't need to guard on constant classes, and then inlining within rewrites.
-
Kevin Modzelewski authored
Some more perf hunting
-
Kevin Modzelewski authored
ie one of the common entrypoints to capi code.
-
- 19 Jun, 2015 10 commits
-
-
Kevin Modzelewski authored
ie when it's on a builtin method. We assumed at some point that we wouldn't need to look at the function object, but now that we can rewrite method_cls calls, that's not true.
-
Kevin Modzelewski authored
-
Kevin Modzelewski authored
Playing with stattimers
-
Kevin Modzelewski authored
ie roll up all the time into the most "avoidable" reason that we were doing it. For example, if we are doing something like calling slot_tp_getttro on a builtin type (very avoidable), roll up all the subsequent time (runtimeCall, etc) into the slot_tp_getattro timer. But if we call runtimeCall where we couldn't avoid it (ex from the interpreter), log that separately. Not sure how helpful it will be but for this specific investigation it seems to somewhat work. The idea of the "avoidability" is definitely pretty specific to the type of work that you are thinking of doing; the numbers I put in are for investigating slowpaths. Also, remove all the timers that we have on specific runtime functions (ex: listMul). I think we'll need another strategy for those.
-
Kevin Modzelewski authored
-
Kevin Modzelewski authored
Switch super to tp_getattro
-
Kevin Modzelewski authored
-
Kevin Modzelewski authored
Some small micro-optimizations
-
Kevin Modzelewski authored
Mostly related to making sure that some hot paths get inlined better, particularly for allocation/sweeping. These changes make a simple for-loop benchmark (which is just dependent on allocation speed) about 25% faster.
-
Kevin Modzelewski authored
Incremental traceback
-
- 18 Jun, 2015 24 commits
-
-
Kevin Modzelewski authored
constant loading optimizations in rewriter
-
Kevin Modzelewski authored
cmake testing
-
Travis Hance authored
-
Travis Hance authored
-
Travis Hance authored
-
Travis Hance authored
-
Travis Hance authored
-
Marius Wachtler authored
- Reuse a register if it already contains the specified value - Generate LEA when beneficial --> Generated code is smaller and has same or better performance
-
Chris Toshok authored
make BoxedTraceback hold a single line, instead of a vector. rename BoxedTraceback::Here to BoxedTraceback::here
-
Chris Toshok authored
move the exception stat logging to PythonUnwindSession::logException, which is called from cxa_throw. remove raiseRaw and make raiseExc use throw
-
Chris Toshok authored
-
Chris Toshok authored
-
Chris Toshok authored
-
Chris Toshok authored
-
Chris Toshok authored
-
Chris Toshok authored
-
Chris Toshok authored
-
Chris Toshok authored
end the unwind session by setting the is_active flag to false. if the unwind session isn't active we don't mark through the ExcInfo, so exceptions/tracebacks should get gc'ed properly.
-
Chris Toshok authored
-
Chris Toshok authored
-
Chris Toshok authored
1. remove the BoxedTraceback** argument from maybeTracebackHere. the unwinding.cpp code can get it just as easily. 2. combine UNWIND_STATE_OSR and UNWIND_STATE_RERAISE into UNWIND_STATE_SKIPNEXT, since they share the same behavior. 3. put the SKIPNEXT behavior in the callers of unwindProcessFrame. Now unwindProcessFrame does nothing but create a PythonFrameIteratorImpl (if it can), and if it can calls its callback with it. 4. initialize the unwind state to NORMAL in raiseExc.
-
Chris Toshok authored
move unwind_state to ThreadStateInternal. move the class decl to threading.h and ensure the small/hot accessors are inlined
-
Chris Toshok authored
stop using 'WHY' just to be similar to cpython. 'STATE' is better. also, reduce duplicate code in unwindProcessFrame
-
Chris Toshok authored
store the exception ferry (as an ExcInfo, not ExcData) within our internal thread state, and explicit visit type/value/traceback at gc time. This allows the gc to run during an unwind (a necessity since we're allocating new BoxedTraceback instances)
-