[pypy-commit] pypy vecopt-merge: bail if the argument is in failargs as well

plan_rich noreply at buildbot.pypy.org
Thu Oct 8 11:06:39 CEST 2015


Author: Richard Plangger <planrichi at gmail.com>
Branch: vecopt-merge
Changeset: r80038:d3a1d758a0a3
Date: 2015-10-08 11:06 +0200
http://bitbucket.org/pypy/pypy/changeset/d3a1d758a0a3/

Log:	bail if the argument is in failargs as well

diff --git a/rpython/jit/backend/llsupport/regalloc.py b/rpython/jit/backend/llsupport/regalloc.py
--- a/rpython/jit/backend/llsupport/regalloc.py
+++ b/rpython/jit/backend/llsupport/regalloc.py
@@ -267,6 +267,7 @@
         raise NotImplementedError("Purely abstract")
 
 class RegisterManager(object):
+
     """ Class that keeps track of register allocations
     """
     box_types             = None       # or a list of acceptable types
diff --git a/rpython/jit/backend/x86/vector_ext.py b/rpython/jit/backend/x86/vector_ext.py
--- a/rpython/jit/backend/x86/vector_ext.py
+++ b/rpython/jit/backend/x86/vector_ext.py
@@ -597,9 +597,9 @@
     def consider_vec_float_eq(self, op):
         lhs = op.getarg(0)
         args = op.getarglist()
+        rhsloc = self.make_sure_var_in_reg(op.getarg(1), args)
         lhsloc = self.xrm.force_result_in_reg(op, op.getarg(0), args)
-        rhsloc = self.make_sure_var_in_reg(op.getarg(1), args)
-        resloc = self.force_allocate_reg_or_cc(op)
+        #resloc = self.force_allocate_reg_or_cc(op)
         self.perform(op, [lhsloc, rhsloc, imm(lhs.bytesize)], lhsloc)
 
     consider_vec_float_ne = consider_vec_float_eq
@@ -693,9 +693,6 @@
     consider_vec_i = _consider_vec
     consider_vec_f = _consider_vec
 
-    def consider_guard_early_exit(self, op):
-        pass
-
     def consider_vec_cast_float_to_int(self, op):
         args = op.getarglist()
         srcloc = self.make_sure_var_in_reg(op.getarg(0), args)
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
@@ -442,6 +442,10 @@
     args = left.getfailargs()
     for i, arg in enumerate(args):
         pos, newarg = state.getvector_of_box(arg)
+        if newarg in vecop.getarglist():
+            # in this case we do not know which slot
+            # failed. thus we bail!
+            raise NotAVectorizeableLoop()
         if newarg is None:
             newarg = arg
         if newarg.is_vector(): # can be moved to guard exit!
diff --git a/rpython/jit/metainterp/test/test_vector.py b/rpython/jit/metainterp/test/test_vector.py
--- a/rpython/jit/metainterp/test/test_vector.py
+++ b/rpython/jit/metainterp/test/test_vector.py
@@ -196,7 +196,9 @@
             i = 0 ; nobreak = False
             while i < d:
                 myjitdriver.jit_merge_point()
-                if func(va[i]):
+                b = func(va[i])
+                if b:
+                    assert b
                     break
                 i += 1
             else:


More information about the pypy-commit mailing list