Author: Richard Plangger <planri...@gmail.com> Branch: ppc-vsx-support Changeset: r85783:2c29f2c72be4 Date: 2016-07-20 17:19 +0200 http://bitbucket.org/pypy/pypy/changeset/2c29f2c72be4/
Log: added load_factors to ll_graph runner diff --git a/rpython/jit/backend/llgraph/runner.py b/rpython/jit/backend/llgraph/runner.py --- a/rpython/jit/backend/llgraph/runner.py +++ b/rpython/jit/backend/llgraph/runner.py @@ -330,6 +330,7 @@ is_llgraph = True vector_ext = VectorExt() vector_ext.enable(16, accum=True) + load_supported_factors = (1,2,4,8) def __init__(self, rtyper, stats=None, *ignored_args, **kwds): model.AbstractCPU.__init__(self) diff --git a/rpython/jit/backend/llsupport/descr.py b/rpython/jit/backend/llsupport/descr.py --- a/rpython/jit/backend/llsupport/descr.py +++ b/rpython/jit/backend/llsupport/descr.py @@ -681,7 +681,6 @@ sign = arraydescr.is_item_signed() return size, ofs, sign - def unpack_fielddescr(fielddescr): assert isinstance(fielddescr, FieldDescr) ofs = fielddescr.offset diff --git a/rpython/jit/backend/llsupport/vector_ext.py b/rpython/jit/backend/llsupport/vector_ext.py --- a/rpython/jit/backend/llsupport/vector_ext.py +++ b/rpython/jit/backend/llsupport/vector_ext.py @@ -1,12 +1,13 @@ from rpython.jit.backend.llsupport.rewrite import cpu_simplify_scale from rpython.jit.backend.llsupport.descr import (unpack_arraydescr, - unpack_fielddescr, unpack_interiorfielddescr) + unpack_fielddescr, unpack_interiorfielddescr, ArrayDescr) from rpython.rlib.objectmodel import specialize, always_inline from rpython.jit.metainterp.history import (VECTOR, FLOAT, INT) from rpython.jit.metainterp.resoperation import rop from rpython.jit.metainterp.optimizeopt.schedule import (forwarded_vecinfo, failnbail_transformation) from rpython.jit.metainterp.jitexc import NotAVectorizeableLoop +from rpython.rlib.objectmodel import we_are_translated class TypeRestrict(object): ANY_TYPE = '\x00' @@ -112,7 +113,12 @@ opnum = op.getopnum() if rop.is_getarrayitem(opnum) or \ opnum in (rop.GETARRAYITEM_RAW_I, rop.GETARRAYITEM_RAW_F): - itemsize, ofs, sign = unpack_arraydescr(op.getdescr()) + descr = op.getdescr() + if not we_are_translated() and not isinstance(descr, ArrayDescr): + itemsize = descr.get_item_size_in_bytes() + ofs = 0 + else: + itemsize, ofs, _ = unpack_arraydescr(op.getdescr()) index_box = op.getarg(1) _, _, changed, emit = cpu_simplify_scale(state.cpu, index_box, itemsize, ofs) if emit: @@ -131,7 +137,12 @@ def check_operation(self, state, pack, op): opnum = op.getopnum() if opnum in (rop.SETARRAYITEM_GC, rop.SETARRAYITEM_RAW): - itemsize, basesize, _ = unpack_arraydescr(op.getdescr()) + descr = op.getdescr() + if not we_are_translated() and not isinstance(descr, ArrayDescr): + itemsize = descr.get_item_size_in_bytes() + basesize= 0 + else: + itemsize, basesize, _ = unpack_arraydescr(op.getdescr()) index_box = op.getarg(1) _, _, changed, emit = cpu_simplify_scale(state.cpu, index_box, itemsize, basesize) if emit: diff --git a/rpython/jit/metainterp/optimizeopt/renamer.py b/rpython/jit/metainterp/optimizeopt/renamer.py --- a/rpython/jit/metainterp/optimizeopt/renamer.py +++ b/rpython/jit/metainterp/optimizeopt/renamer.py @@ -8,6 +8,13 @@ return self.rename_map.get(box, box) def start_renaming(self, var, tovar): + # edge case, it happens that in e.g. jump arguments + # constants are used to jump to a label, for unrolling + # we should never apply this renaming, because it is not supported to + # have a constant in failargs (see compute_vars_longevity in + # llsupport/regalloc.py) + if tovar.is_constant(): + return self.rename_map[var] = tovar def rename(self, op): 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 @@ -319,7 +319,7 @@ self.vectorize(trace) self.debug_print_operations(trace) self.ensure_operations([ - 'v10[4xi32] = vec_getarrayitem_raw_i(p0,i0,descr=int32arraydescr)', + 'v10[4xi32] = vec_load_i(p0,i0,descr=int32arraydescr)', 'v11[4xi32] = vec_int_is_true(v10[4xi32])', 'i100 = vec_unpack_i(v11[4xi32], 0, 1)', 'vec_guard_true(v11[4xi32]) [i100]', @@ -386,7 +386,7 @@ [p0,i0] i1 = int_add(i0,1) i2 = int_add(i0,2) - v3[2xi64] = vec_getarrayitem_gc_i(p0,i0,descr=arraydescr) + v3[2xi64] = vec_load_i(p0,i0,descr=arraydescr) jump(p0,i2) """ loop = self.parse_loop(ops) @@ -1010,10 +1010,10 @@ i11 = int_le(i1, 128) guard_true(i11) [p0,p1,p2,i1] i12 = int_add(i1, {stride}) - v1 = vec_getarrayitem_raw{suffix}(p0, i0, descr={descr}arraydescr) - v2 = vec_getarrayitem_raw{suffix}(p1, i0, descr={descr}arraydescr) + v1 = vec_load{suffix}(p0, i0, descr={descr}arraydescr) + v2 = vec_load{suffix}(p1, i0, descr={descr}arraydescr) v3 = {op}(v1,v2) - vec_setarrayitem_raw(p2, i0, v3, descr={descr}arraydescr) + vec_store(p2, i0, v3, descr={descr}arraydescr) jump(p0,p1,p2,i12) """.format(op='vec_'+op,descr=descr,stride=1,suffix=suffix) loop = self.parse_loop(ops) @@ -1076,7 +1076,7 @@ {dead_code} i500 = int_add(i0, 16) i501 = int_lt(i500, 102) - v10[16xi8] = vec_getarrayitem_raw_i(p0, i0, descr=chararraydescr) + v10[16xi8] = vec_load_i(p0, i0, descr=chararraydescr) jump(p0,i2) """.format(dead_code=dead_code) loop = self.parse_loop(ops) @@ -1121,7 +1121,7 @@ guard_true(i3) [p0,i0] i4 = int_add(i0, 2) i5 = int_lt(i4, 10) - v1[2xf64] = vec_getarrayitem_raw_i(p0, i0, descr=arraydescr) + v1[2xf64] = vec_load_i(p0, i0, descr=arraydescr) v2[2xf64] = vec_int_sub(v1[2xf64], v3[2xf64]) jump(p0,i2,v3[2xf64]) """ @@ -1150,7 +1150,7 @@ guard_true(i3) [p0,i0,f3] i4 = int_add(i0, 2) i5 = int_lt(i4, 10) - v1[2xf64] = vec_getarrayitem_raw_f(p0, i0, descr=floatarraydescr) + v1[2xf64] = vec_load_f(p0, i0, descr=floatarraydescr) v2[2xf64] = vec_float_add(v1[2xf64], v3[2xf64]) jump(p0,i2,f3,v3[2xf64]) """ @@ -1171,7 +1171,7 @@ trace_opt = """ [p0, i0, f0] v6[0xf64] = vec_f() - v7[2xf64] = vec_int_xor(v6[0xf64], v6[0xf64]) + v7[2xf64] = vec_float_xor(v6[0xf64], v6[0xf64]) v2[2xf64] = vec_pack_f(v7[2xf64], f0, 0, 1) label(p0, i0, v2[2xf64]) i100 = int_add(i0, 8) @@ -1256,12 +1256,12 @@ i11 = int_ge(i6, 36) i7 = int_add(i1, 4) i14 = int_ge(i7, 36) - v17 = vec_getarrayitem_raw_f(p0, i1, descr=floatarraydescr) + v17 = vec_load_f(p0, i1, descr=floatarraydescr) v19 = vec_cast_float_to_singlefloat(v17) - v18 = vec_getarrayitem_raw_f(p0, i5, descr=floatarraydescr) + v18 = vec_load_f(p0, i5, descr=floatarraydescr) v20 = vec_cast_float_to_singlefloat(v18) v21 = vec_pack_i(v19, v20, 2, 2) - vec_setarrayitem_raw(p1, i1, v21, descr=float32arraydescr) + vec_store(p1, i1, v21, descr=float32arraydescr) jump(p0, p1, i50) """ loop = self.parse_loop(ops) _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit