Author: Richard Plangger <[email protected]>
Branch: vecopt-merge
Changeset: r79850:9236f6c98306
Date: 2015-09-26 10:00 +0200
http://bitbucket.org/pypy/pypy/changeset/9236f6c98306/
Log: translation issues, zero_deps guards would produce cycle, remove
them
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
@@ -62,6 +62,9 @@
return None
return self.path[-1]
+ def first(self):
+ return self.path[0]
+
def is_always_pure(self, exclude_first=False, exclude_last=False):
last = len(self.path)-1
count = len(self.path)
@@ -596,19 +599,6 @@
# the label operation defines all operations at the
# beginning of the loop
- # TODO if op.getopnum() == rop.LABEL and i != jump_pos:
- # node.setpriority(100)
- # label_pos = i
- # for arg in op.getarglist():
- # tracker.define(arg, node)
- # continue # prevent adding edge to the label itself
- #elif node.is_guard_early_exit():
- # label_node = self.nodes[label_pos]
- # label_node.edge_to(node,None,label='L->EE')
- # for arg in label_node.getoperation().getarglist():
- # tracker.define(arg, node)
- # continue
-
intformod.inspect_operation(op,node)
# definition of a new variable
if op.type != 'v':
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
@@ -1235,6 +1235,7 @@
self.assert_equal(trace, trace_opt)
def test_axis_sum(self):
+ # TODO
trace = """
[i1, p10, i11, p8, i12, p3, p4, p13, i14, i15, p6, p9, i16, i17, i18,
i19, i20, i21, i22, i23]
f24 = raw_load_f(i16, i12, descr=floatarraydescr)
@@ -1257,11 +1258,8 @@
guard_false(i39) [i1, p9, p8, p6, p4, p3, i33, i38, None, None, i26,
i11, None, p13, None, None, p10]
jump(i1, p10, i11, p8, i26, p3, p4, p13, i33, i38, p6, p9, i16, i17,
i18, i19, i20, i21, i22, i23)
"""
- try:
- self.vectorize(self.parse_loop(trace))
- py.test.fail("axis sum is not profitable")
- except NotAProfitableLoop:
- pass
+ loop = self.parse_loop(trace)
+ self.vectorize(loop)
def test_cast_1(self):
# TODO
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
@@ -103,7 +103,9 @@
loop_info, loop_ops, jitcell_token=None):
""" Enter the world of SIMD. Bails if it cannot transform the trace. """
user_code = not jitdriver_sd.vec and warmstate.vec_all
- loop = VectorLoop(loop_info.label_op, loop_ops[1:-1], loop_ops[-1])
+ e = len(loop_ops)-1
+ assert e > 0
+ loop = VectorLoop(loop_info.label_op, loop_ops[1:e], loop_ops[-1])
if user_code and user_loop_bail_fast_path(loop, warmstate):
return loop_info, loop_ops
# the original loop (output of optimize_unroll)
@@ -515,6 +517,8 @@
modify_later = []
last_prev_node = None
valid = True
+ if guard_node in zero_deps:
+ del zero_deps[guard_node]
for prev_dep in guard_node.depends():
prev_node = prev_dep.to
if prev_dep.is_failarg():
@@ -551,6 +555,7 @@
self.mark_guard(guard_node, loop)
for node in zero_deps.keys():
assert not node.is_imaginary()
+ print "edge to", node
earlyexit.edge_to(node)
if one_valid:
return graph
diff --git a/rpython/jit/metainterp/warmspot.py
b/rpython/jit/metainterp/warmspot.py
--- a/rpython/jit/metainterp/warmspot.py
+++ b/rpython/jit/metainterp/warmspot.py
@@ -177,6 +177,7 @@
def reset_jit():
"""Helper for some tests (see micronumpy/test/test_zjit.py)"""
+ from rpython.jit.metainterp import counter
reset_stats()
pyjitpl._warmrunnerdesc.memory_manager.alive_loops.clear()
pyjitpl._warmrunnerdesc.jitcounter._clear_all()
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit