Author: Maciej Fijalkowski <[email protected]>
Branch: kill-gen-store-back-in
Changeset: r62782:e848a55243cb
Date: 2013-03-25 18:12 -0700
http://bitbucket.org/pypy/pypy/changeset/e848a55243cb/
Log: rpython fixes
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
@@ -566,10 +566,6 @@
def bh_read_timestamp(self):
return read_timestamp()
- def bh_force_virtualizable(self, v, descr):
- vinfo = descr.vinfo
- vinfo.clear_vable_token(v)
-
def store_fail_descr(self, deadframe, descr):
pass # I *think*
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
@@ -76,7 +76,13 @@
FLAG_STRUCT = 'X'
FLAG_VOID = 'V'
-class FieldDescr(AbstractDescr):
+class ArrayOrFieldDescr(AbstractDescr):
+ vinfo = None
+
+ def get_vinfo(self):
+ return self.vinfo
+
+class FieldDescr(ArrayOrFieldDescr):
name = ''
offset = 0 # help translation
field_size = 0
@@ -150,12 +156,13 @@
# ____________________________________________________________
# ArrayDescrs
-class ArrayDescr(AbstractDescr):
+class ArrayDescr(ArrayOrFieldDescr):
tid = 0
basesize = 0 # workaround for the annotator
itemsize = 0
lendescr = None
flag = '\x00'
+ vinfo = None
def __init__(self, basesize, itemsize, lendescr, flag):
self.basesize = basesize
diff --git a/rpython/jit/backend/model.py b/rpython/jit/backend/model.py
--- a/rpython/jit/backend/model.py
+++ b/rpython/jit/backend/model.py
@@ -6,7 +6,7 @@
total_compiled_loops = 0
total_compiled_bridges = 0
total_freed_loops = 0
- total_freed_bridges = 0
+ total_freed_bridges = 0
# for heaptracker
# _all_size_descrs_with_vtable = None
@@ -284,6 +284,9 @@
def bh_copyunicodecontent(self, src, dst, srcstart, dststart, length):
raise NotImplementedError
+ def bh_force_virtualizable(self, v, descr):
+ vinfo = descr.get_vinfo()
+ vinfo.clear_vable_token(v)
class CompiledLoopToken(object):
asmmemmgr_blocks = None
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
@@ -873,7 +873,9 @@
def consider_force_virtualizable(self, op):
# just do a call for now
- vinfo = op.getdescr().vinfo
+ vinfo = op.getdescr().get_vinfo()
+ if vinfo is None:
+ return # for tests
calldescr = vinfo.clear_vable_descr
assert isinstance(calldescr, CallDescr)
fval = rffi.cast(lltype.Signed, vinfo.clear_vable_ptr)
diff --git a/rpython/jit/codewriter/effectinfo.py
b/rpython/jit/codewriter/effectinfo.py
--- a/rpython/jit/codewriter/effectinfo.py
+++ b/rpython/jit/codewriter/effectinfo.py
@@ -160,7 +160,7 @@
EffectInfo.MOST_GENERAL = EffectInfo(None, None, None, None,
EffectInfo.EF_RANDOM_EFFECTS,
can_invalidate=True)
-EffectInfo.LEAST_GENERAL = EffectInfo({}, {}, {}, {},
+EffectInfo.LEAST_GENERAL = EffectInfo([], [], [], [],
EffectInfo.EF_ELIDABLE_CANNOT_RAISE,
can_invalidate=False)
diff --git a/rpython/jit/metainterp/history.py
b/rpython/jit/metainterp/history.py
--- a/rpython/jit/metainterp/history.py
+++ b/rpython/jit/metainterp/history.py
@@ -163,6 +163,8 @@
descr_ptr = cpu.ts.cast_to_baseclass(descr_gcref)
return cast_base_ptr_to_instance(AbstractDescr, descr_ptr)
+ def get_vinfo(self):
+ raise NotImplementedError
class AbstractFailDescr(AbstractDescr):
index = -1
@@ -175,7 +177,7 @@
class BasicFinalDescr(AbstractFailDescr):
final_descr = True
-
+
def __init__(self, identifier=None):
self.identifier = identifier # for testing
@@ -730,7 +732,7 @@
def repr_of_descr(self):
return 'TargetToken(%d)' % compute_unique_id(self)
-
+
class TreeLoop(object):
inputargs = None
operations = None
@@ -827,7 +829,7 @@
seen = dict.fromkeys(inputargs)
assert len(seen) == len(inputargs), (
"duplicate Box in the LABEL arguments")
-
+
assert operations[-1].is_final()
if operations[-1].getopnum() == rop.JUMP:
target = operations[-1].getdescr()
@@ -836,7 +838,7 @@
def dump(self):
# RPython-friendly
- print '%r: inputargs =' % self, self._dump_args(self.inputargs)
+ print '%r: inputargs =' % self, self._dump_args(self.inputargs)
for op in self.operations:
args = op.getarglist()
print '\t', op.getopname(), self._dump_args(args), \
@@ -952,7 +954,7 @@
def add_jitcell_token(self, token):
assert isinstance(token, JitCellToken)
self.jitcell_token_wrefs.append(weakref.ref(token))
-
+
def set_history(self, history):
self.operations = history.operations
@@ -1045,7 +1047,7 @@
opname = op.getopname()
insns[opname] = insns.get(opname, 0) + 1
return self._check_insns(insns, expected, check)
-
+
def check_loops(self, expected=None, everywhere=False, **check):
insns = {}
for loop in self.get_all_loops():
@@ -1068,7 +1070,7 @@
print
import pdb; pdb.set_trace()
return
-
+
for insn, expected_count in check.items():
getattr(rop, insn.upper()) # fails if 'rop.INSN' does not exist
found = insns.get(insn, 0)
diff --git a/rpython/jit/metainterp/pyjitpl.py
b/rpython/jit/metainterp/pyjitpl.py
--- a/rpython/jit/metainterp/pyjitpl.py
+++ b/rpython/jit/metainterp/pyjitpl.py
@@ -711,7 +711,7 @@
if self.metainterp.heapcache.is_nonstandard_virtualizable(box):
return True
vinfo = self.metainterp.jitdriver_sd.virtualizable_info
- if vinfo is not fielddescr.vinfo:
+ if vinfo is not fielddescr.get_vinfo():
self.metainterp.heapcache.nonstandard_virtualizables_now_known(box)
return True
eqbox = self.metainterp.execute_and_record(rop.PTR_EQ, None,
diff --git a/rpython/jit/metainterp/test/test_virtualizable.py
b/rpython/jit/metainterp/test/test_virtualizable.py
--- a/rpython/jit/metainterp/test/test_virtualizable.py
+++ b/rpython/jit/metainterp/test/test_virtualizable.py
@@ -139,11 +139,13 @@
n -= 1
def f(n):
xy = self.setup()
+ promote_virtualizable(xy, 'inst_x')
xy.inst_x = 10000
m = 10
while m > 0:
g(xy, n)
m -= 1
+ promote_virtualizable(xy, 'inst_x')
return xy.inst_x
res = self.meta_interp(f, [18])
assert res == 10180
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit