[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