[pypy-commit] pypy jitframe-on-heap: support renaming
fijal
noreply at buildbot.pypy.org
Wed Jan 9 16:01:35 CET 2013
Author: Maciej Fijalkowski <fijall at gmail.com>
Branch: jitframe-on-heap
Changeset: r59887:6dfdca1bddb3
Date: 2013-01-08 23:25 +0200
http://bitbucket.org/pypy/pypy/changeset/6dfdca1bddb3/
Log: support renaming
diff --git a/pypy/jit/metainterp/resume.py b/pypy/jit/metainterp/resume.py
--- a/pypy/jit/metainterp/resume.py
+++ b/pypy/jit/metainterp/resume.py
@@ -1279,6 +1279,17 @@
def write_a_float(self, index, float):
self.blackholeinterp.setarg_f(index, float)
+def resume_renum(list_of_positions, storage):
+ num = storage.rd_numb
+ while num:
+ i = 0
+ while i < len(num.nums):
+ pos, flags = untag(num.nums[i])
+ if flags == TAGBOX:
+ num.nums[i] = tag(list_of_positions[pos], TAGBOX)
+ i += 1
+ num = num.prev
+
# ____________________________________________________________
def dump_storage(storage, liveboxes):
diff --git a/pypy/jit/metainterp/test/test_fficall.py b/pypy/jit/metainterp/test/test_fficall.py
--- a/pypy/jit/metainterp/test/test_fficall.py
+++ b/pypy/jit/metainterp/test/test_fficall.py
@@ -1,4 +1,5 @@
+import py
import ctypes, math
from pypy.rpython.lltypesystem import lltype, rffi
from pypy.jit.metainterp.test.support import LLJitMixin
@@ -106,6 +107,7 @@
class TestFfiCall(FfiCallTests, LLJitMixin):
def test_jit_fii_vref(self):
+ py.test.skip("unsupported so far")
from pypy.rlib import clibffi
from pypy.rlib.jit_libffi import jit_ffi_prep_cif, jit_ffi_call
diff --git a/pypy/jit/metainterp/test/test_resume.py b/pypy/jit/metainterp/test/test_resume.py
--- a/pypy/jit/metainterp/test/test_resume.py
+++ b/pypy/jit/metainterp/test/test_resume.py
@@ -17,6 +17,7 @@
rd_consts = []
rd_virtuals = None
rd_pendingfields = None
+ rd_count = 0
class FakeOptimizer(object):
@@ -102,9 +103,6 @@
CONST_NULL = ConstPtr(gcrefnull)
def __init__(self, values):
self.values = values
- def get_latest_value_count(self, deadframe):
- assert deadframe == "deadframe"
- return len(self.values)
def get_latest_value_int(self, deadframe, index):
assert deadframe == "deadframe"
return self.values[index]
@@ -182,6 +180,7 @@
tag(0, TAGBOX),
tag(1, TAGBOX)])
storage.rd_numb = numb
+ storage.rd_count = 3
#
cpu = MyCPU([42, gcref1, -66])
metainterp = MyMetaInterp(cpu)
@@ -500,6 +499,21 @@
assert snapshot.prev is fs[2].parent_resumedata_snapshot
assert snapshot.boxes == fs[2]._env
+def test_renaming():
+ b1, b2, b3 = [BoxInt(), BoxPtr(), BoxInt()]
+ c1, c2, c3 = [ConstInt(1), ConstInt(2), ConstInt(3)]
+ fs = [FakeFrame("code0", 0, b1, c1, b2)]
+
+ storage = Storage()
+ capture_resumedata(fs, None, [], storage)
+ memo = ResumeDataLoopMemo(FakeMetaInterpStaticData())
+ modifier = ResumeDataVirtualAdder(storage, memo)
+ modifier.finish(FakeOptimizer({}))
+ resume_renum([10, 20], storage)
+ for num, x in zip(storage.rd_numb.prev.nums, [10, 20]):
+ pos, tag = untag(num)
+ if tag == TAGBOX:
+ assert pos == x
class FakeMetaInterpStaticData:
cpu = LLtypeMixin.cpu
More information about the pypy-commit
mailing list