[pypy-commit] pypy vecopt: splitting must be done differently
plan_rich
noreply at buildbot.pypy.org
Fri Jun 26 12:29:05 CEST 2015
Author: Richard Plangger <rich at pasra.at>
Branch: vecopt
Changeset: r78320:835955fe1216
Date: 2015-06-26 10:22 +0200
http://bitbucket.org/pypy/pypy/changeset/835955fe1216/
Log: splitting must be done differently
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
@@ -369,7 +369,7 @@
vbox = self._pack(vbox, packed, args, packable)
self.update_input_output(self.pack)
box_pos = 0
- elif packed > packable and box_pos != 0:
+ elif packed > packable:
# box_pos == 0 then it is already at the right place
# the argument has more items than the operation is able to process!
args = [op.getoperation().getarg(argidx) for op in ops]
@@ -377,6 +377,7 @@
self.update_input_output(self.pack)
box_pos = 0
elif off != 0 and box_pos != 0:
+ import py; py.test.set_trace()
# The original box is at a position != 0 but it
# is required to be at position 0. Unpack it!
args = [op.getoperation().getarg(argidx) for op in ops]
@@ -542,11 +543,11 @@
return self.result_ptype
def split_pack(self, pack, vec_reg_size):
- op0 = pack.operations[0].getoperation()
- _, vbox = self.sched_data.getvector_of_box(op0.getarg(0))
- if vbox.getcount() * self.to_size > vec_reg_size:
- return vec_reg_size // self.to_size
- return vbox.getcount()
+ count = self.arg_ptypes[0].getcount()
+ bytes = pack.opcount() * self.getscalarsize()
+ if bytes > count * self.from_size:
+ return bytes // (count * self.from_size)
+ return pack.opcount()
def new_result_vector_box(self):
type = self.output_type.gettype()
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
@@ -1397,18 +1397,21 @@
jump(p0, p1, p5, p6, p7, p17, p19, i68, i39, i44, i49, i51)
"""
trace="""
- [p0, p3, i4, i5, i6, i7]
- guard_early_exit(descr=<rpython.jit.metainterp.compile.ResumeAtLoopHeaderDescr object at 0x7f492da84250>) [p0, p3, i4, i5]
- f8 = raw_load(i6, i5, descr=floatarraydescr)
- guard_not_invalidated(descr=<rpython.jit.metainterp.compile.ResumeGuardNotInvalidated object at 0x7f492da846d0>) [p0, f8, p3, i4, i5]
- i9 = cast_float_to_int(f8)
- i11 = int_and(i9, 255)
- guard_true(i11, descr=<rpython.jit.metainterp.compile.ResumeGuardTrueDescr object at 0x7f492da8b790>) [p0, p3, i4, i5]
- i13 = int_add(i4, 1)
- i15 = int_add(i5, 8)
- i16 = int_ge(i13, i7)
- guard_false(i16, descr=<rpython.jit.metainterp.compile.ResumeGuardFalseDescr object at 0x7f492da93610>) [p0, i13, i15, p3, None, None]
- jump(p0, p3, i13, i15, i6, i7)
+ [p0, p1, p9, i10, p4, i11, p3, p6, p12, i13, i14, i15, f16, i17, i18]
+ guard_early_exit(descr=<rpython.jit.metainterp.compile.ResumeAtLoopHeaderDescr object at 0x7f2327d4b390>) [p6, p4, p3, p1, p0, i14, i10, i13, i11, p9, p12]
+ i19 = raw_load(i15, i11, descr=singlefloatarraydescr)
+ guard_not_invalidated(descr=<rpython.jit.metainterp.compile.ResumeGuardNotInvalidated object at 0x7f23284786d0>) [p6, p4, p3, p1, p0, i19, i14, i10, i13, i11, p9, p12]
+ i21 = int_add(i11, 4)
+ f22 = cast_singlefloat_to_float(i19)
+ f23 = float_add(f22, f16)
+ i24 = cast_float_to_singlefloat(f23)
+ raw_store(i17, i14, i24, descr=singlefloatarraydescr)
+ i26 = int_add(i13, 1)
+ i28 = int_add(i14, 4)
+ i29 = int_ge(i26, i18)
+ guard_false(i29, descr=<rpython.jit.metainterp.compile.ResumeGuardFalseDescr object at 0x7f2327d53910>) [p6, p4, p3, p1, p0, i28, i21, i26, None, i10, None, None, p9, p12]
+ debug_merge_point(0, 0, '(numpy_call2: no get_printable_location)')
+ jump(p0, p1, p9, i10, p4, i21, p3, p6, p12, i26, i28, i15, f16, i17, i18)
"""
opt = self.vectorize(self.parse_loop(trace))
self.debug_print_operations(opt.loop)
More information about the pypy-commit
mailing list