Author: Richard Plangger <[email protected]>
Branch: vecopt
Changeset: r78491:ca4edaf2af71
Date: 2015-07-06 15:32 +0200
http://bitbucket.org/pypy/pypy/changeset/ca4edaf2af71/

Log:    unroll does not ignore guard early exit anymore (generates wrong
        code)

diff --git a/rpython/jit/backend/x86/regalloc.py 
b/rpython/jit/backend/x86/regalloc.py
--- a/rpython/jit/backend/x86/regalloc.py
+++ b/rpython/jit/backend/x86/regalloc.py
@@ -1507,7 +1507,6 @@
     # ________________________________________
 
     def not_implemented_op(self, op):
-        import pdb; pdb.set_trace()
         not_implemented("not implemented operation: %s" % op.getopname())
 
     def not_implemented_op_with_guard(self, op, guard_op):
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
@@ -10,6 +10,8 @@
     xmm5, xmm6, xmm7, xmm8, xmm9, xmm10, xmm11, xmm12, xmm13, xmm14,
     X86_64_SCRATCH_REG, X86_64_XMM_SCRATCH_REG, AddressLoc)
 from rpython.jit.backend.llsupport.regalloc import (get_scale, 
valid_addressing_size)
+from rpython.rlib.objectmodel import we_are_translated
+from rpython.rtyper.lltypesystem.lloperation import llop
 
 # duplicated for easy migration, def in assembler.py as well
 # DUP START
@@ -18,6 +20,12 @@
 
 def heap(addr):
     return AddressLoc(ImmedLoc(addr), imm0, 0, 0)
+
+def not_implemented(msg):
+    msg = '[x86/vector_ext] %s\n' % msg
+    if we_are_translated():
+        llop.debug_print(lltype.Void, msg)
+    raise NotImplementedError(msg)
 # DUP END
 
 class VectorAssemblerMixin(object):
diff --git a/rpython/jit/metainterp/history.py 
b/rpython/jit/metainterp/history.py
--- a/rpython/jit/metainterp/history.py
+++ b/rpython/jit/metainterp/history.py
@@ -735,6 +735,7 @@
             arg = self.parent_trace_label_args[i]
             if isinstance(arg, BoxVectorAccum):
                 self.bridge_label_args[i] = arg
+                label.setarg(i, arg)
         self.inputargs = self.bridge_label_args
 
         return token
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
@@ -263,6 +263,7 @@
         self.output_type = pack.output_type
         #
         self.check_if_pack_supported(pack)
+
         #
         if self.must_be_full_but_is_not(pack):
             for op in pack.operations:
diff --git a/rpython/jit/metainterp/optimizeopt/test/test_vectorize.py 
b/rpython/jit/metainterp/optimizeopt/test/test_vectorize.py
--- a/rpython/jit/metainterp/optimizeopt/test/test_vectorize.py
+++ b/rpython/jit/metainterp/optimizeopt/test/test_vectorize.py
@@ -1359,20 +1359,20 @@
 
 
     def test_abc(self):
-        py.test.skip()
         trace="""
-        # int32 sum
-        label(p0, p19, i18, i24, i14, i8, i25, 
descr=TargetToken(140320937897104))
-        guard_early_exit(descr=<Guard0x7f9f03ab6310>) [p0, p19, i18, i14, i24]
-        i27 = raw_load(i8, i24, descr=<ArrayS 4>)
-        guard_not_invalidated(descr=<Guard0x7f9f03af5050>) [p0, i27, p19, i18, 
i14, i24]
-        i28 = int_add(i14, i27)
-        i29 = int_signext(i28, 4)
-        i30 = int_add(i18, 1)
-        i31 = int_add(i24, 4)
-        i32 = int_ge(i30, i25)
-        guard_false(i32, descr=<Guard0x7f9f03ab17d0>) [p0, i29, i30, i31, p19, 
None, None, None]
-        jump(p0, p19, i30, i31, i29, i8, i25, 
descr=TargetToken(140320937897104))
+        [i16, i17, i18, i5, p6, p7, f19, p9, p10, p11, p12, p13, p14, p15, 
i20, i21]
+        guard_early_exit() []
+        f22 = raw_load(i20, i18, descr=<ArrayF 8>)
+        
guard_not_invalidated(descr=<rpython.jit.metainterp.compile.ResumeGuardNotInvalidated
 object at 0x7fc428762410>) [i5, i18, i17, i16, p15, p14, p13, p12, p11, p10, 
p9, p7, p6, f22, f19]
+        f23 = raw_load(i21, i17, descr=<ArrayF 8>)
+        f24 = float_mul(f22, f23)
+        f25 = float_add(f19, f24)
+        i27 = int_add(i18, 8)
+        i29 = int_add(i17, 8)
+        i30 = int_lt(i16, i5)
+        guard_true(i30, 
descr=<rpython.jit.metainterp.compile.ResumeGuardTrueDescr object at 
0x7fc4287689d0>) [i5, i27, i29, i16, p15, p14, p13, p12, p11, p10, p9, p7, p6, 
f25, None]
+        i33 = int_add(i16, 1)
+        jump(i33, i29, i27, i5, p6, p7, f25, p9, p10, p11, p12, p13, p14, p15, 
i20, i21)
         """
         # schedule 885 -> ptype is non for raw_load?
         opt = self.vectorize(self.parse_loop(trace))
diff --git a/rpython/jit/metainterp/optimizeopt/unroll.py 
b/rpython/jit/metainterp/optimizeopt/unroll.py
--- a/rpython/jit/metainterp/optimizeopt/unroll.py
+++ b/rpython/jit/metainterp/optimizeopt/unroll.py
@@ -36,8 +36,6 @@
             imp.import_value(value)
 
     def emit_operation(self, op):
-        if op.getopnum() == rop.GUARD_EARLY_EXIT:
-            return
         if op.returns_bool_result():
             self.bool_boxes[self.getvalue(op.result)] = None
         if self.emitting_dissabled:
diff --git a/rpython/jit/metainterp/optimizeopt/vectorize.py 
b/rpython/jit/metainterp/optimizeopt/vectorize.py
--- a/rpython/jit/metainterp/optimizeopt/vectorize.py
+++ b/rpython/jit/metainterp/optimizeopt/vectorize.py
@@ -598,14 +598,19 @@
         assert isinstance(tgt_op, GuardResOp)
         assert isinstance(op, GuardResOp)
         olddescr = op.getdescr()
-        descr = CompileLoopVersionDescr()
+        descr = None
+        guard_true_false = tgt_op.getopnum() in (rop.GUARD_TRUE, 
rop.GUARD_FALSE)
+        if guard_true_false:
+            descr = CompileLoopVersionDescr()
+        else:
+            descr = ResumeAtLoopHeaderDescr()
         if olddescr:
             descr.copy_all_attributes_from(olddescr)
         #
         tgt_op.setdescr(descr)
         tgt_op.rd_snapshot = op.rd_snapshot
         tgt_op.setfailargs(op.getfailargs())
-        if tgt_op.getopnum() in (rop.GUARD_TRUE, rop.GUARD_FALSE):
+        if guard_true_false:
             self.orig_loop_version.adddescr(tgt_op, descr)
             tgt_op.setfailargs(label_node.getoperation().getarglist()[:])
             tgt_op.rd_snapshot = None
@@ -853,7 +858,6 @@
         for pack in self.packs:
             if not pack.is_accumulating():
                 continue
-            import pdb; pdb.set_trace()
             accum = pack.accum
             # create a new vector box for the parameters
             box = pack.input_type.new_vector_box()
@@ -878,5 +882,6 @@
                               [box, accum.var, ConstInt(0), ConstInt(1)], 
result)
             sched_data.invariant_oplist.append(op)
             # rename the variable with the box
+            sched_data.setvector_of_box(accum.var, 0, result) # prevent it 
from expansion
             renamer.start_renaming(accum.var, result)
 
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to