Author: Richard Plangger <[email protected]>
Branch: vecopt
Changeset: r78843:e8a74e18fc6e
Date: 2015-08-07 10:50 +0200
http://bitbucket.org/pypy/pypy/changeset/e8a74e18fc6e/
Log: missing update pack of nodes scheduled some nodes as a non packed
operation (wrong obviously)
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
@@ -939,9 +939,11 @@
return False, 0
#
c = (self.constant - other.constant)
- if isinstance(self.var, Const) and isinstance(other.var, Const):
- return True, (self.var.value - other.var.value)
- if self.var.same_box(other.var):
+ svar = self.var
+ ovar = other.var
+ if isinstance(svar, ConstInt) and isinstance(ovar, ConstInt):
+ return True, (svar.getint() - ovar.getint())
+ if svar.same_box(ovar):
return True, c
return False, 0
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
@@ -83,9 +83,9 @@
for dep in node.provides()[:]: # COPY
to = dep.to
node.remove_edge_to(to)
+ nodes = self.schedulable_nodes
if not to.emitted and to.depends_count() == 0:
# sorts them by priority
- nodes = self.schedulable_nodes
i = len(nodes)-1
while i >= 0:
itnode = nodes[i]
@@ -97,7 +97,7 @@
# if they have the same priority, sort them
# using the original position in the trace
if itnode.getindex() < to.getindex():
- nodes.insert(i+1, to)
+ nodes.insert(i, to)
break
i -= 1
else:
@@ -821,13 +821,11 @@
"""
def __init__(self, ops, input_type, output_type):
self.operations = ops
- for i,node in enumerate(self.operations):
- node.pack = self
- node.pack_position = i
self.accum = None
self.input_type = input_type
self.output_type = output_type
assert self.input_type is not None or self.output_type is not None
+ self.update_pack_of_nodes()
def opcount(self):
return len(self.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
@@ -1072,16 +1072,16 @@
[p36, i28, p9, i37, p14, f34, p12, p38, f35, p39, i40, i41, p42, i43,
i44, i21, i4, i0, i18]
guard_not_invalidated() [p38, p12, p9, p14, p39, i37, i44, f35, i40,
p42, i43, f34, i28, p36, i41]
i50 = int_add(i28, 1)
- i46 = int_add(i44, 8)
i48 = int_add(i41, 8)
i51 = int_add(i37, 8)
+ i54 = int_add(i41, 16)
+ i46 = int_add(i44, 8)
+ i56 = int_add(i37, 16)
i52 = int_ge(i50, i18)
i637 = int_add(i28, 2)
i638 = int_ge(i637, i18)
guard_false(i638) [p38, p12, p9, p14, p39, i37, i44, f35, i40, p42,
i43, f34, i28, p36, i41]
i55 = int_add(i44, 16)
- i54 = int_add(i41, 16)
- i56 = int_add(i37, 16)
i629 = int_add(i28, 2)
i57 = int_ge(i637, i18)
v61 = vec_raw_load(i21, i44, 2, descr=floatarraydescr)
@@ -1173,10 +1173,10 @@
v233 = vec_cast_singlefloat_to_float(v232)
v234 = vec_int_unpack(v232, 2, 2)
v235 = vec_cast_singlefloat_to_float(v234)
+ v237 = vec_float_add(v231, v235)
+ v239 = vec_cast_float_to_singlefloat(v237)
v236 = vec_float_add(v229, v233)
- v237 = vec_float_add(v231, v235)
v238 = vec_cast_float_to_singlefloat(v236)
- v239 = vec_cast_float_to_singlefloat(v237)
v240 = vec_float_pack(v238, v239, 2, 2)
vec_raw_store(p2, i4, v240, descr=singlefloatarraydescr)
jump(p0, p1, p2, i207, i500)
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
@@ -409,13 +409,12 @@
# do not inc in rightmost_match_leftmost
# this could miss some pack
j += 1
- # set for each node to which pack it belongs
- pack = self.packset.packs[i]
- pack.update_pack_of_nodes()
+ i += 1
j = 0
- i += 1
if len_before == len(self.packset.packs):
break
+ for pack in self.packset.packs:
+ pack.update_pack_of_nodes()
if not we_are_translated():
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit