Author: Richard Plangger <[email protected]>
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
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit