Yes, it had a little loop that was setting arguments for a function call, now the call is inlined, thank you! But in the inlined code there is immidately "call_assembler", followed by a "keepalive" of the frame. Does it have an equally simple answer? Or it has to do with the function arguments?
2013/2/22 Maciej Fijalkowski <fij...@gmail.com>: > On Fri, Feb 22, 2013 at 8:49 AM, Костя Лопухин <kostia.lopu...@gmail.com> > wrote: >> In what cases does the jit decide not to inline a function call, but >> place "call_may_force" instead? >> The context is that I have a simple interpreter, like an expanded >> kermit, and I am testing how the jit helps - it perfectly unboxes >> wrapped objects in a loop, but does not inline function calls - I >> wonder what am I missing here. I found a place where PyPy interpreter >> makes a call and did not see anything special there. > > call_may_force means you call a function that has a loop that calls > back to the intepreter. Probably argument handling or so. You need to > annotate the function with @jit.unroll_safe (that means that each time > the number of iteration is different, you'll get slightly different > assembler, so beware) 2013/2/22 Maciej Fijalkowski <fij...@gmail.com>: > On Fri, Feb 22, 2013 at 8:49 AM, Костя Лопухин <kostia.lopu...@gmail.com> > wrote: >> In what cases does the jit decide not to inline a function call, but >> place "call_may_force" instead? >> The context is that I have a simple interpreter, like an expanded >> kermit, and I am testing how the jit helps - it perfectly unboxes >> wrapped objects in a loop, but does not inline function calls - I >> wonder what am I missing here. I found a place where PyPy interpreter >> makes a call and did not see anything special there. > > call_may_force means you call a function that has a loop that calls > back to the intepreter. Probably argument handling or so. You need to > annotate the function with @jit.unroll_safe (that means that each time > the number of iteration is different, you'll get slightly different > assembler, so beware) 2013/2/22 Maciej Fijalkowski <fij...@gmail.com>: > On Fri, Feb 22, 2013 at 8:49 AM, Костя Лопухин <kostia.lopu...@gmail.com> > wrote: >> In what cases does the jit decide not to inline a function call, but >> place "call_may_force" instead? >> The context is that I have a simple interpreter, like an expanded >> kermit, and I am testing how the jit helps - it perfectly unboxes >> wrapped objects in a loop, but does not inline function calls - I >> wonder what am I missing here. I found a place where PyPy interpreter >> makes a call and did not see anything special there. > > call_may_force means you call a function that has a loop that calls > back to the intepreter. Probably argument handling or so. You need to > annotate the function with @jit.unroll_safe (that means that each time > the number of iteration is different, you'll get slightly different > assembler, so beware) _______________________________________________ pypy-dev mailing list pypy-dev@python.org http://mail.python.org/mailman/listinfo/pypy-dev