[pypy-commit] pypy ppc-vsx-support: do not allow duplicates in delayed list

plan_rich pypy.commits at gmail.com
Wed Nov 2 06:33:58 EDT 2016


Author: Richard Plangger <planrichi at gmail.com>
Branch: ppc-vsx-support
Changeset: r88061:b8e14645ed99
Date: 2016-11-02 09:28 +0100
http://bitbucket.org/pypy/pypy/changeset/b8e14645ed99/

Log:	do not allow duplicates in delayed list

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
@@ -138,10 +138,10 @@
     def delay_emit(self, node):
         """ it has been decided that the operation might be scheduled later """
         delayed = node.delayed or []
-        delayed.append(node)
+        if node not in delayed:
+            delayed.append(node)
         node.delayed = None
         provides = node.provides()
-        op = node.getoperation()
         if len(provides) == 0:
             for n in delayed:
                 self.delayed.append(n)
@@ -158,7 +158,8 @@
         else:
             delayedlist = node.delayed
             for d in delayed:
-                delayedlist.append(d)
+                if d not in delayedlist:
+                    delayedlist.append(d)
 
 
     def mark_emitted(state, node, unpack=True):
@@ -347,7 +348,7 @@
             state.renamer.start_renaming(op, vecop)
     if left.is_guard():
         prepare_fail_arguments(state, pack, left, vecop)
-    state.oplist.append(vecop)
+    state.append_to_oplist(vecop)
     assert vecop.count >= 1
 
 def prepare_arguments(state, oprestrict, pack, args):
@@ -414,7 +415,7 @@
         count = vecinfo.count
         vecop = VecOperationNew(rop.VEC_INT_SIGNEXT, [arg, ConstInt(newsize)],
                                 'i', newsize, vecinfo.signed, count)
-        state.oplist.append(vecop)
+        state.append_to_oplist(vecop)
         state.costmodel.record_cast_int(size, newsize, count)
         args[i] = vecop
 
@@ -483,7 +484,7 @@
     vecop = OpHelpers.create_vec_unpack(arg.type, args, vecinfo.bytesize,
                                         vecinfo.signed, count)
     state.costmodel.record_vector_unpack(arg, index, count)
-    state.oplist.append(vecop)
+    state.append_to_oplist(vecop)
     return vecop
 
 def pack_into_vector(state, tgt, tidx, src, sidx, scount):
@@ -496,7 +497,7 @@
     newcount = vecinfo.count + scount
     args = [tgt, src, ConstInt(tidx), ConstInt(scount)]
     vecop = OpHelpers.create_vec_pack(tgt.type, args, vecinfo.bytesize, vecinfo.signed, newcount)
-    state.oplist.append(vecop)
+    state.append_to_oplist(vecop)
     state.costmodel.record_vector_pack(src, sidx, scount)
     if not we_are_translated():
         _check_vec_pack(vecop)
@@ -678,7 +679,6 @@
                 self.pre_emit(node, i==0)
                 self.mark_emitted(node, unpack=False)
             turn_into_vector(self, node.pack)
-            return
         elif not node.emitted:
             SchedulerState.try_emit_or_delay(self, node)
 


More information about the pypy-commit mailing list