Author: Richard Plangger <r...@pasra.at> Branch: vecopt-merge Changeset: r79167:63513d022558 Date: 2015-08-23 20:31 +0200 http://bitbucket.org/pypy/pypy/changeset/63513d022558/
Log: llgraph working again with the new loop versioning (hurrayyyy!) diff --git a/rpython/jit/backend/llgraph/runner.py b/rpython/jit/backend/llgraph/runner.py --- a/rpython/jit/backend/llgraph/runner.py +++ b/rpython/jit/backend/llgraph/runner.py @@ -37,6 +37,8 @@ newbox = _cache[box] except KeyError: newbox = _cache[box] = box.__class__() + if hasattr(box, 'accum') and box.accum: + newbox.accum = box.accum return newbox # self.inputargs = map(mapping, inputargs) @@ -271,8 +273,7 @@ self.vinfo_for_tests = kwds.get('vinfo_for_tests', None) def stitch_bridge(self, faildescr, target): - import pdb; pdb.set_trace() - faildescr._llgraph_bridge = target.lltrace + faildescr._llgraph_bridge = target._lltrace def compile_loop(self, inputargs, operations, looptoken, jd_id=0, unique_id=0, log=True, name='', logger=None): @@ -291,6 +292,8 @@ faildescr._llgraph_bridge = lltrace clt._llgraph_alltraces.append(lltrace) self._record_labels(lltrace) + if faildescr.loop_version(): + faildescr.version._lltrace = lltrace return LLAsmInfo(lltrace) def _record_labels(self, lltrace): @@ -903,30 +906,27 @@ # ----------------------------------------------------- - def _accumulate(self, descr, failargs, value): - if not hasattr(descr, 'rd_accum_list'): - return - accum = descr.rd_accum_list - while accum is not None: - value = values[accum.scalar_position] + def _accumulate(self, descr, failargs, values): + for i,box in enumerate(self.current_op.getfailargs()): + if box is None: + continue + accum = box.getaccum() + if not accum: + continue + value = values[i] assert isinstance(value, list) - if accum.operation == '+': + if accum.operator == '+': value = sum(value) - break - elif accum.operation == '*': + elif accum.operator == '*': def prod(acc, x): return acc * x value = reduce(prod, value, 1) - break else: raise NotImplementedError("accum operator in fail guard") - values[accum.scalar_position] = value - accum = accum.prev + values[i] = value def fail_guard(self, descr, saved_data=None): values = [] for i,box in enumerate(self.current_op.getfailargs()): - if box.getaccum() or isinstance(box, BoxVector): - import pdb; pdb.set_trace(); if box is not None: value = self.env[box] else: diff --git a/rpython/jit/backend/x86/assembler.py b/rpython/jit/backend/x86/assembler.py --- a/rpython/jit/backend/x86/assembler.py +++ b/rpython/jit/backend/x86/assembler.py @@ -10,6 +10,7 @@ from rpython.jit.metainterp.history import (Const, Box, VOID, BoxVector, ConstInt) from rpython.jit.metainterp.history import AbstractFailDescr, INT, REF, FLOAT +from rpython.jit.metainterp.compile import ResumeGuardDescr from rpython.rtyper.lltypesystem import lltype, rffi, rstr, llmemory from rpython.rtyper.lltypesystem.lloperation import llop from rpython.rtyper.annlowlevel import llhelper, cast_instance_to_gcref @@ -598,6 +599,8 @@ duplicating the loop assembler! """ asminfo, bridge_faildescr, compiled_version, looptoken = version._compiled + assert isinstance(bridge_faildescr, ResumeGuardDescr) + assert isinstance(faildescr, ResumeGuardDescr) assert asminfo.rawstart != 0 self.mc = codebuf.MachineCodeBlockWrapper() allblocks = self.get_asmmemmgr_blocks(looptoken) diff --git a/rpython/jit/metainterp/optimizeopt/guard.py b/rpython/jit/metainterp/optimizeopt/guard.py --- a/rpython/jit/metainterp/optimizeopt/guard.py +++ b/rpython/jit/metainterp/optimizeopt/guard.py @@ -224,7 +224,6 @@ continue elif other.implies(guard, self): # implied - guard.rd_accum_list = None self.guards[guard.index] = None # mark as 'do not emit' replaced = True continue _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit