Author: Richard Plangger <planri...@gmail.com>
Branch: vecopt-merge
Changeset: r79810:f1468a7d8892
Date: 2015-09-24 15:34 +0200
http://bitbucket.org/pypy/pypy/changeset/f1468a7d8892/

Log:    llgraph working again

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
@@ -87,6 +87,7 @@
         # guard
         descr = CompileLoopVersionDescr()
         descr.copy_all_attributes_from(self.op.getdescr())
+        descr.rd_accum_list = None # do not copy the accum list
         assert isinstance(descr, ResumeGuardDescr)
         guard = ResOperation(self.op.getopnum(), [compare], descr=descr)
         guard.setfailargs(loop.label.getarglist_copy())
@@ -318,14 +319,5 @@
                     info.track(transitive_guard, descr, version)
         info.clear()
 
-        loop.prefix += self._newoperations
+        loop.prefix = self._newoperations + loop.prefix
         loop.operations = [op for op in loop.operations if op]
-
-        # TODO if self.has_two_labels:
-        # TODO     oplist = [loop.operations[0]] + self._newoperations + \
-        # TODO              [op for op in loop.operations[1:] if op]
-        # TODO     loop.operations = oplist
-        # TODO else:
-        # TODO     loop.operations = self._newoperations + \
-        # TODO             [op for op in loop.operations if op]
-
diff --git a/rpython/jit/metainterp/optimizeopt/schedule.py 
b/rpython/jit/metainterp/optimizeopt/schedule.py
--- a/rpython/jit/metainterp/optimizeopt/schedule.py
+++ b/rpython/jit/metainterp/optimizeopt/schedule.py
@@ -555,7 +555,9 @@
                     descr.rd_accum_list = AccumInfo(descr.rd_accum_list, i,
                                                     accum.operator, arg, None)
                     seed = accum.getleftmostseed()
+                    print "pre", failargs[i], "=>",
                     failargs[i] = self.renamer.rename_map.get(seed, seed)
+                    print failargs[i]
 
     def profitable(self):
         return self.costmodel.profitable()
diff --git a/rpython/jit/metainterp/optimizeopt/vector.py 
b/rpython/jit/metainterp/optimizeopt/vector.py
--- a/rpython/jit/metainterp/optimizeopt/vector.py
+++ b/rpython/jit/metainterp/optimizeopt/vector.py
@@ -66,8 +66,20 @@
         return oplist + self.operations + [self.jump]
 
     def clone(self):
+        renamer = Renamer()
+        label = self.label.copy()
+        prefix = []
+        for op in self.prefix:
+            newop = op.copy()
+            renamer.rename(newop)
+            if not newop.returns_void():
+                renamer.start_renaming(op, newop)
+            prefix.append(newop)
+        prefix_label = None
+        if self.prefix_label:
+            prefix_label = self.prefix_label.copy()
+            renamer.rename(prefix_label)
         oplist = []
-        renamer = Renamer()
         for op in self.operations:
             newop = op.copy()
             renamer.rename(newop)
@@ -76,7 +88,10 @@
             oplist.append(newop)
         jump = self.jump.copy()
         renamer.rename(jump)
-        return VectorLoop(self.label.copy(), oplist, jump)
+        loop = VectorLoop(self.label.copy(), oplist, jump)
+        loop.prefix = prefix
+        loop.prefix_label = prefix_label
+        return loop
 
 def optimize_vector(metainterp_sd, jitdriver_sd, warmstate, loop_info, 
loop_ops):
     """ Enter the world of SIMD. Bails if it cannot transform the trace. """
diff --git a/rpython/jit/metainterp/resoperation.py 
b/rpython/jit/metainterp/resoperation.py
--- a/rpython/jit/metainterp/resoperation.py
+++ b/rpython/jit/metainterp/resoperation.py
@@ -270,6 +270,10 @@
     # --------------
 
     def copy(self):
+        if self.is_guard():
+            op = self.copy_and_change(self.opnum)
+            op.setfailargs(self.getfailargs()[:])
+            return op
         return self.copy_and_change(self.opnum)
 
     def copy_and_change(self, opnum, args=None, descr=None):
_______________________________________________
pypy-commit mailing list
pypy-commit@python.org
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to