Author: Richard Plangger <r...@pasra.at> 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 pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit