Author: Richard Plangger <r...@pasra.at> Branch: vecopt Changeset: r78317:369284ff1423 Date: 2015-06-25 12:21 +0200 http://bitbucket.org/pypy/pypy/changeset/369284ff1423/
Log: passing all scheduling tests again 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 @@ -250,16 +250,12 @@ # prohibit the packing of signext calls that # cast to int16/int8. _, outsize = op0.cast_to() - self._prevent_signext(outsize, insize) + self.sched_data._prevent_signext(outsize, insize) if op0.getopnum() == rop.INT_MUL: if insize == 8 or insize == 1: # see assembler for comment why raise NotAProfitableLoop - def _prevent_signext(self, outsize, insize): - if outsize < 4 and insize != outsize: - raise NotAProfitableLoop - def as_vector_operation(self, pack, sched_data, oplist): self.sched_data = sched_data self.preamble_ops = oplist @@ -394,7 +390,7 @@ def extend_int(self, vbox, newtype): vbox_cloned = newtype.new_vector_box(vbox.item_count) - self._prevent_signext(newtype.getsize(), vbox.getsize()) + self.sched_data._prevent_signext(newtype.getsize(), vbox.getsize()) op = ResOperation(rop.VEC_INT_SIGNEXT, [vbox, ConstInt(newtype.getsize())], vbox_cloned) @@ -676,6 +672,10 @@ self.expanded_map = {} self.costmodel = costmodel + def _prevent_signext(self, outsize, insize): + if outsize < 4 and insize != outsize: + raise NotAProfitableLoop + def as_vector_operation(self, pack, preproc_renamer): assert pack.opcount() > 1 # properties that hold for the pack are: diff --git a/rpython/jit/metainterp/optimizeopt/test/test_schedule.py b/rpython/jit/metainterp/optimizeopt/test/test_schedule.py --- a/rpython/jit/metainterp/optimizeopt/test/test_schedule.py +++ b/rpython/jit/metainterp/optimizeopt/test/test_schedule.py @@ -61,7 +61,7 @@ def pack(self, loop, l, r): return Pack([Node(op,1+l+i) for i,op in enumerate(loop.operations[1+l:1+r])], None, None) - def schedule(self, loop_orig, packs, vec_reg_size=16, prepend_invariant=False, getvboxfunc=None): + def schedule(self, loop_orig, packs, vec_reg_size=16, prepend_invariant=False, overwrite_funcs=None): loop = get_model(False).ExtendedTreeLoop("loop") loop.original_jitcell_token = loop_orig.original_jitcell_token loop.inputargs = loop_orig.inputargs @@ -69,8 +69,8 @@ ops = [] cm = X86_CostModel(0, vec_reg_size) vsd = VecScheduleData(vec_reg_size, cm) - if getvboxfunc is not None: - vsd.getvector_of_box = getvboxfunc + for name, overwrite in (overwrite_funcs or {}).items(): + setattr(vsd, name, overwrite) renamer = Renamer() for pack in packs: if pack.opcount() == 1: @@ -191,7 +191,10 @@ var = self.find_input_arg('v10', loop1) def i1inv103204(v): return 0, var - loop2 = self.schedule(loop1, [pack1], prepend_invariant=True, getvboxfunc=i1inv103204) + loop2 = self.schedule(loop1, [pack1], prepend_invariant=True, + overwrite_funcs = { + 'getvector_of_box': i1inv103204, + }) loop3 = self.parse(""" v11[i32|2] = vec_int_signext(v10[i64|2], 4) """, False, additional_args=['v10[i64|2]']) @@ -239,7 +242,12 @@ pack2 = self.pack(loop1, 8, 16) pack3 = self.pack(loop1, 16, 24) pack4 = self.pack(loop1, 24, 32) - loop2 = self.schedule(loop1, [pack1,pack2,pack3,pack4]) + def void(b,c): + pass + loop2 = self.schedule(loop1, [pack1,pack2,pack3,pack4], + overwrite_funcs={ + '_prevent_signext': void + }) loop3 = self.parse(""" v10[f64|2] = vec_raw_load(p0, i1, 2, descr=double) v11[f64|2] = vec_raw_load(p0, i3, 2, descr=double) 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 @@ -76,10 +76,11 @@ ns)) debug_stop("xxx-clock") except NotAVectorizeableLoop: + debug_stop("vec-opt-loop") # vectorization is not possible loop.operations = orig_ops + except NotAProfitableLoop: debug_stop("vec-opt-loop") - except NotAProfitableLoop: # cost model says to skip this loop loop.operations = orig_ops except Exception as e: diff --git a/rpython/jit/metainterp/resoperation.py b/rpython/jit/metainterp/resoperation.py --- a/rpython/jit/metainterp/resoperation.py +++ b/rpython/jit/metainterp/resoperation.py @@ -814,8 +814,8 @@ rop.CAST_FLOAT_TO_INT: rop.VEC_CAST_FLOAT_TO_INT, # guard - #rop.GUARD_TRUE: rop.GUARD_TRUE, - #rop.GUARD_FALSE: rop.GUARD_FALSE, + rop.GUARD_TRUE: rop.GUARD_TRUE, + rop.GUARD_FALSE: rop.GUARD_FALSE, } _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit