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

Reply via email to