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

Reply via email to