[pypy-commit] pypy vecopt: helping the rtyper

plan_rich noreply at buildbot.pypy.org
Wed May 20 14:39:49 CEST 2015


Author: Richard Plangger <rich at pasra.at>
Branch: vecopt
Changeset: r77426:20eb63b24b80
Date: 2015-05-20 08:05 +0200
http://bitbucket.org/pypy/pypy/changeset/20eb63b24b80/

Log:	helping the rtyper

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
@@ -194,12 +194,15 @@
     vinfo = None
     concrete_type = '\x00'
 
-    def __init__(self, basesize, itemsize, lendescr, flag):
+    def __init__(self, basesize, itemsize, lendescr, flag, concrete_type='\x00'):
         self.basesize = basesize
         self.itemsize = itemsize
         self.lendescr = lendescr    # or None, if no length
         self.flag = flag
 
+    def getconcrete_type(self):
+        return self.concrete_type
+
     def is_array_of_pointers(self):
         return self.flag == FLAG_POINTER
 
@@ -260,12 +263,13 @@
         else:
             lendescr = get_field_arraylen_descr(gccache, ARRAY_OR_STRUCT)
         flag = get_type_flag(ARRAY_INSIDE.OF)
-        arraydescr = ArrayDescr(basesize, itemsize, lendescr, flag)
+        concreate_type = '\x00'
         if ARRAY_INSIDE.OF is lltype.SingleFloat or \
            ARRAY_INSIDE.OF is lltype.Float:
             # it would be better to set the flag as FLOAT_TYPE
             # for single float -> leads to problems
-            arraydescr.concrete_type = FLOAT
+            concrete_type = FLOAT
+        arraydescr = ArrayDescr(basesize, itemsize, lendescr, flag, concreate_type)
         if ARRAY_OR_STRUCT._gckind == 'gc':
             gccache.init_array_descr(ARRAY_OR_STRUCT, arraydescr)
         cache[ARRAY_OR_STRUCT] = arraydescr
diff --git a/rpython/jit/backend/x86/regalloc.py b/rpython/jit/backend/x86/regalloc.py
--- a/rpython/jit/backend/x86/regalloc.py
+++ b/rpython/jit/backend/x86/regalloc.py
@@ -1475,10 +1475,11 @@
 
     def consider_vec_getarrayitem_raw(self, op):
         descr = op.getdescr()
+        assert isinstance(descr, ArrayDescr)
         assert not descr.is_array_of_pointers() and \
                not descr.is_array_of_structs()
         itemsize, ofs, _ = unpack_arraydescr(descr)
-        integer = not (descr.is_array_of_floats() or descr.concrete_type == FLOAT)
+        integer = not (descr.is_array_of_floats() or descr.getconcrete_type() == FLOAT)
         aligned = False
         args = op.getarglist()
         base_loc = self.rm.make_sure_var_in_reg(op.getarg(0), args)
@@ -1491,6 +1492,7 @@
 
     def consider_vec_setarrayitem_raw(self, op):
         descr = op.getdescr()
+        assert isinstance(descr, ArrayDescr)
         assert not descr.is_array_of_pointers() and \
                not descr.is_array_of_structs()
         itemsize, ofs, _ = unpack_arraydescr(descr)
@@ -1499,7 +1501,7 @@
         value_loc = self.make_sure_var_in_reg(op.getarg(2), args)
         ofs_loc = self.rm.make_sure_var_in_reg(op.getarg(1), args)
 
-        integer = not (descr.is_array_of_floats() or descr.concrete_type == FLOAT)
+        integer = not (descr.is_array_of_floats() or descr.getconcrete_type() == FLOAT)
         aligned = False
         self.perform_discard(op, [base_loc, ofs_loc, value_loc,
                                  imm(itemsize), imm(ofs), imm(integer), imm(aligned)])


More information about the pypy-commit mailing list