[pypy-commit] pypy vecopt-merge: did not consider guard in pack load, thus a wrong pack load was computed
plan_rich
noreply at buildbot.pypy.org
Mon Oct 12 15:52:37 CEST 2015
Author: Richard Plangger <planrichi at gmail.com>
Branch: vecopt-merge
Changeset: r80135:b9f8f993880a
Date: 2015-10-12 15:52 +0200
http://bitbucket.org/pypy/pypy/changeset/b9f8f993880a/
Log: did not consider guard in pack load, thus a wrong pack load was
computed
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
@@ -891,6 +891,11 @@
descr = left.getdescr()
bytesize = descr.get_item_size_in_bytes()
return bytesize * self.numops() - vec_reg_size
+ else:
+ assert left.is_guard() and left.getopnum() in \
+ (rop.GUARD_TRUE, rop.GUARD_FALSE)
+ bytesize = left.getarg(0).bytesize
+ return bytesize * self.numops() - vec_reg_size
return 0
if self.numops() == 0:
return -1
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
@@ -1339,6 +1339,23 @@
'guard_true(i100) [p0, i0]',
], trace)
+ def test_pack_too_much(self):
+ trace = self.parse_loop("""
+ [p0, p1, i2, i3, i4, i5]
+ i6 = raw_load_i(i4, i3, descr=int16arraydescr)
+ guard_not_invalidated() [p0, i6, i3, i2, p1]
+ i7 = int_is_true(i6)
+ guard_true(i7) [p0, i6, i3, i2, p1]
+ i10 = getarrayitem_raw_i(139832330560762, 2, descr=chararraydescr)
+ guard_value(i10, 1) [p0, i6, i3, i2, p1]
+ i16 = int_add(i2, 1)
+ i18 = int_add(i3, 2)
+ i19 = int_ge(i16, i5)
+ guard_false(i19) [p0, i6, i3, i2, p1]
+ jump(p0, p1, i16, i18, i4, i5)""")
+ self.vectorize(trace)
+ self.debug_print_operations(trace)
+
class TestLLtype(BaseTestVectorize, LLtypeMixin):
pass
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
@@ -794,6 +794,8 @@
def split_overloaded_packs(self):
newpacks = []
for i,pack in enumerate(self.packs):
+ if pack.operations[0].op.is_guard():
+ import pdb; pdb.set_trace()
load = pack.pack_load(self.vec_reg_size)
if load > Pack.FULL:
pack.split(newpacks, self.vec_reg_size)
More information about the pypy-commit
mailing list