[pypy-commit] pypy optresult-unroll: fixes to the backend
fijal
noreply at buildbot.pypy.org
Thu Aug 27 14:42:28 CEST 2015
Author: Maciej Fijalkowski <fijall at gmail.com>
Branch: optresult-unroll
Changeset: r79257:40407d03401e
Date: 2015-08-27 14:42 +0200
http://bitbucket.org/pypy/pypy/changeset/40407d03401e/
Log: fixes to the backend
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
@@ -106,12 +106,17 @@
field_size = 0
flag = '\x00'
- def __init__(self, name, offset, field_size, flag, index_in_parent=0):
+ def __init__(self, name, offset, field_size, flag, index_in_parent=0,
+ is_pure=False):
self.name = name
self.offset = offset
self.field_size = field_size
self.flag = flag
self.index = index_in_parent
+ self._is_pure = is_pure
+
+ def is_always_pure(self):
+ return self._is_pure
def __repr__(self):
return 'FieldDescr<%s>' % (self.name,)
@@ -184,7 +189,9 @@
flag = get_type_flag(FIELDTYPE)
name = '%s.%s' % (STRUCT._name, fieldname)
index_in_parent = heaptracker.get_fielddescr_index_in(STRUCT, fieldname)
- fielddescr = FieldDescr(name, offset, size, flag, index_in_parent)
+ is_pure = STRUCT._immutable_field(fieldname)
+ fielddescr = FieldDescr(name, offset, size, flag, index_in_parent,
+ is_pure)
cachedict = cache.setdefault(STRUCT, {})
cachedict[fieldname] = fielddescr
if STRUCT is rclass.OBJECT:
@@ -234,15 +241,19 @@
vinfo = None
all_interiorfielddescrs = None
- def __init__(self, basesize, itemsize, lendescr, flag):
+ def __init__(self, basesize, itemsize, lendescr, flag, is_pure=False):
self.basesize = basesize
self.itemsize = itemsize
self.lendescr = lendescr # or None, if no length
self.flag = flag
+ self._is_pure = is_pure
def get_all_fielddescrs(self):
return self.all_interiorfielddescrs
+ def is_always_pure(self):
+ return self._is_pure
+
def is_array_of_pointers(self):
return self.flag == FLAG_POINTER
@@ -297,7 +308,8 @@
else:
lendescr = get_field_arraylen_descr(gccache, ARRAY_OR_STRUCT)
flag = get_type_flag(ARRAY_INSIDE.OF)
- arraydescr = ArrayDescr(basesize, itemsize, lendescr, flag)
+ is_pure = ARRAY_INSIDE._immutable_field(None)
+ arraydescr = ArrayDescr(basesize, itemsize, lendescr, flag, is_pure)
cache[ARRAY_OR_STRUCT] = arraydescr
if isinstance(ARRAY_INSIDE.OF, lltype.Struct):
descrs = heaptracker.all_interiorfielddescrs(gccache,
diff --git a/rpython/jit/metainterp/compile.py b/rpython/jit/metainterp/compile.py
--- a/rpython/jit/metainterp/compile.py
+++ b/rpython/jit/metainterp/compile.py
@@ -328,7 +328,7 @@
loop_data)
except InvalidLoop:
# Fall back on jumping to preamble
- xxx
+ raise Exception("think about it")
return None
loop = partial_trace
More information about the pypy-commit
mailing list