[pypy-commit] pypy vecopt-merge: conflict resolution for the new packed guards (this would have been needed in the future anyway)
plan_rich
noreply at buildbot.pypy.org
Mon Oct 12 12:01:01 CEST 2015
Author: Richard Plangger <planrichi at gmail.com>
Branch: vecopt-merge
Changeset: r80129:a0a5d6b95d2b
Date: 2015-10-12 12:01 +0200
http://bitbucket.org/pypy/pypy/changeset/a0a5d6b95d2b/
Log: conflict resolution for the new packed guards (this would have been
needed in the future anyway)
diff --git a/rpython/jit/metainterp/optimizeopt/dependency.py b/rpython/jit/metainterp/optimizeopt/dependency.py
--- a/rpython/jit/metainterp/optimizeopt/dependency.py
+++ b/rpython/jit/metainterp/optimizeopt/dependency.py
@@ -374,7 +374,12 @@
""" NOT_RPTYHON """
op_str = str(self.op)
if self.op.is_guard():
- args_str = [str(arg) for arg in self.op.getfailargs()]
+ args_str = []
+ for arg in self.op.getfailargs():
+ name = 'None'
+ if arg:
+ name = arg.repr_short(arg._repr_memo)
+ args_str.append(name)
op_str += " " + ','.join(args_str)
return "[%d] %s" % (self.opidx, op_str)
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
@@ -92,6 +92,31 @@
visited += 1
return None
+ def try_to_trash_pack(self, state):
+ # one element a pack has several dependencies pointing to
+ # it thus we MUST skip this pack!
+ if len(state.worklist) > 0:
+ # break the first!
+ i = 0
+ node = state.worklist[i]
+ i += 1
+ while i < len(state.worklist) and not node.pack:
+ node = state.worklist[i]
+ i += 1
+
+ if not node.pack:
+ return False
+
+ pack = node.pack
+ for n in node.pack.operations:
+ if n.depends_count() > 0:
+ pack.clear()
+ return True
+ else:
+ return False
+
+ return False
+
def delay(self, node, state):
""" Delay this operation?
Only if any dependency has not been resolved """
@@ -158,6 +183,9 @@
if not state.has_more():
break
+ if self.try_to_trash_pack(state):
+ continue
+
raise AssertionError("schedule failed cannot continue. possible reason: cycle")
if not we_are_translated():
diff --git a/rpython/jit/metainterp/optimizeopt/test/test_vecopt.py b/rpython/jit/metainterp/optimizeopt/test/test_vecopt.py
--- a/rpython/jit/metainterp/optimizeopt/test/test_vecopt.py
+++ b/rpython/jit/metainterp/optimizeopt/test/test_vecopt.py
@@ -1315,6 +1315,32 @@
except NotAVectorizeableLoop:
pass
+ def test_remove_mew(self):
+ trace = self.parse_loop("""
+ [p0, p1, p2, p3, i4, i5, p6, p7, i8, f9, i10, i11]
+ f12 = raw_load_f(i8, i5, descr=floatarraydescr)
+ guard_not_invalidated(descr=<rpython.jit.metainterp.compile.ResumeGuardDescr object at 0x7f0e5c61e990>) [p7, p6, p2, p1, p0, f12, i4, p3, i5]
+ f14 = float_mul(f12, 0.0)
+ i15 = float_eq(f14, f14)
+ guard_true(i15, descr=<rpython.jit.metainterp.compile.ResumeGuardCopiedDescr object at 0x7f0e5c63e610>) [p7, p6, p2, p1, p0, f12, i4, p3, i5]
+ f17 = call_f(1234, f12, f9, descr=writearraydescr)
+ i20 = call_i(1234444, 232, descr=writearraydescr)
+ f21 = float_mul(f17, 0.0)
+ i22 = float_eq(f21, f21)
+ guard_true(i22, descr=<rpython.jit.metainterp.compile.ResumeGuardDescr object at 0x7f0e5c6a47d0>) [p7, p6, p2, p1, p0, f9, f12, i20, f21, f17, i4, p3, i5]
+ i23 = int_is_true(i20)
+ guard_false(i23, descr=<rpython.jit.metainterp.compile.ResumeGuardCopiedDescr object at 0x7f0e5c60b7d0>) [p7, p6, p2, p1, p0, f9, f12, i20, f21, f17, i4, p3, i5]
+ raw_store(i10, i5, f17, descr=floatarraydescr)
+ i25 = int_add(i4, 1)
+ i27 = int_add(i5, 8)
+ i28 = int_ge(i25, i11)
+ guard_false(i28, descr=<rpython.jit.metainterp.compile.ResumeGuardDescr object at 0x7f0e5c75b690>) [i11, i25, p7, p6, p2, p1, p0, i27, None, p3, None]
+ debug_merge_point(0, 0, '(numpy_call2_inc_out_right: no get_printable_location)')
+ jump(p0, p1, p2, p3, i25, i27, p6, p7, i8, f9, i10, i11)
+ """)
+ vopt = self.schedule(trace)
+ self.debug_print_operations(trace)
+
class TestLLtype(BaseTestVectorize, LLtypeMixin):
pass
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
@@ -795,7 +795,7 @@
class InputArgVector(VectorOp, AbstractInputArg):
def __init__(self):
- self.type = 'v'
+ pass
def returns_vector(self):
return True
More information about the pypy-commit
mailing list