On Tue, Feb 25, 2014 at 4:06 PM, Timothy Baldridge <tbaldri...@gmail.com> wrote: > correction on my last email "but that list was never used"
we use the same hack in PyPy for fast argument passing, it helps in non-jit case too. (we just use it up to 5 or so) > > > On Tue, Feb 25, 2014 at 7:06 AM, Timothy Baldridge <tbaldri...@gmail.com> > wrote: >> >> So I spent two more hours on this this morning and finally got some good >> results. >> >> a) I turned on _immutable_ = True on the Code object. Should have done >> this before. >> >> Then I noticed that the trace contained the creation of the argument list, >> but that that list was never made. The trace was also making a call out to >> some C function so that it could do the array = [None] * argc. I couldn't >> get that to go away even with promoting argc. So I changed pop_values to >> this instead: >> >> def pop_values(frame, argc): >> if argc == 0: >> return Arguments([], argc) >> elif argc == 1: >> return Arguments([frame.pop()], argc) >> elif argc == 2: >> b = frame.pop() >> a = frame.pop() >> return Arguments([a, b], argc) >> assert False >> >> Since Clojure only supports up to 20 positional arguments, that'll work >> just fine. Now the last part of my trace consists of this: >> >> +266: label(p0, i26, p5, p7, p15, p17, i21, i25, >> descr=TargetToken(4302275472)) >> debug_merge_point(0, 0, 'NO_OP') >> debug_merge_point(0, 0, 'PUSH_LOCAL 0') >> debug_merge_point(0, 0, 'PUSH_LOCAL 2') >> debug_merge_point(0, 0, 'EQ') >> +280: i27 = int_eq(i21, i26) >> guard_false(i27, descr=<Guard0x1006f6480>) [p0, p5, p7, p15, p17, i26] >> debug_merge_point(0, 0, 'COND_JMP 26') >> debug_merge_point(0, 0, 'PUSH_LOCAL 0') >> debug_merge_point(0, 0, 'PUSH_CONST 1') >> debug_merge_point(0, 0, 'PUSH_CONST 2') >> debug_merge_point(0, 0, 'INVOKE 2') >> debug_merge_point(1, 1, 'ADD') >> +289: i28 = int_add(i25, i26) >> debug_merge_point(1, 1, 'RETURN') >> debug_merge_point(0, 0, 'STORE_LOCAL 0') >> debug_merge_point(0, 0, 'JMP 6') >> debug_merge_point(0, 0, 'NO_OP') >> +295: jump(p0, i28, p5, p7, p15, p17, i21, i25, >> descr=TargetToken(4302275472)) >> >> Which is exactly what I was looking for, an add and an eq. >> >> Thanks for the help everyone! >> >> Timothy >> >> >> >> On Tue, Feb 25, 2014 at 2:56 AM, Armin Rigo <ar...@tunes.org> wrote: >>> >>> Hi Maciej, >>> >>> On 25 February 2014 09:09, Maciej Fijalkowski <fij...@gmail.com> wrote: >>> > ugh that looks really odd, why is p67 not removed escapes my attention >>> >>> Because we do setarrayitem and getarrayitem on non-constant indexes. >>> >>> > On Tue, Feb 25, 2014 at 6:36 AM, Timothy Baldridge >>> > <tbaldri...@gmail.com> wrote: >>> >> I'm attaching a copy of my latest trace. The part I'm not happy with >>> >> is at >>> >> the end of the trace: >>> >>> We need tricks to avoid allocating the frame when we *leave* the >>> function. In PyPy it can only be done if we know for sure that nobody >>> can potentially grab a reference to the frame for later (e.g. via >>> exceptions). I'm unsure to remember the latest version of this logic, >>> but there were several ones... >>> >>> >>> A bientôt, >>> >>> Armin. >> >> >> >> >> -- >> “One of the main causes of the fall of the Roman Empire was that–lacking >> zero–they had no way to indicate successful termination of their C >> programs.” >> (Robert Firth) > > > > > -- > “One of the main causes of the fall of the Roman Empire was that–lacking > zero–they had no way to indicate successful termination of their C > programs.” > (Robert Firth) _______________________________________________ pypy-dev mailing list pypy-dev@python.org https://mail.python.org/mailman/listinfo/pypy-dev