Author: Maciej Fijalkowski <[email protected]>
Branch: resume-refactor
Changeset: r68846:95626ec9e6bd
Date: 2014-01-17 18:48 +0100
http://bitbucket.org/pypy/pypy/changeset/95626ec9e6bd/
Log: improve the test and fix
diff --git a/rpython/jit/resume/backend.py b/rpython/jit/resume/backend.py
--- a/rpython/jit/resume/backend.py
+++ b/rpython/jit/resume/backend.py
@@ -195,7 +195,8 @@
all = {}
for frame in inputframes:
for x in frame:
- if x is not None and not isinstance(x, Const) and x not in all:
+ if x is not None and x not in all:
+ assert not isinstance(x, Const)
count += 1
all[x] = None
inputargs = [None] * count
@@ -203,8 +204,7 @@
all = {}
for frame in inputframes:
for item in frame:
- if (item is not None and not isinstance(item, Const) and
- item not in all):
+ if item is not None and item not in all:
inputargs[pos] = item
all[item] = None
pos += 1
diff --git a/rpython/jit/resume/frontend.py b/rpython/jit/resume/frontend.py
--- a/rpython/jit/resume/frontend.py
+++ b/rpython/jit/resume/frontend.py
@@ -1,7 +1,7 @@
from rpython.jit.metainterp.resoperation import rop
from rpython.jit.metainterp.history import BoxInt, BoxPtr, BoxFloat, ConstInt,\
- INT, REF
+ INT, REF, Const
from rpython.jit.metainterp import history
from rpython.jit.resume.reader import AbstractResumeReader
from rpython.jit.resume.rescode import TAGBOX, TAGCONST, TAGSMALLINT,
TAGVIRTUAL
@@ -219,7 +219,8 @@
if box is None:
return
miframe.registers_i[i] = box
- res[-1][pos] = box
+ if not isinstance(box, Const):
+ res[-1][pos] = box
def store_ref_box(self, res, pos, miframe, i, jitframe_pos):
box = self.get_box_value(jitframe_pos, REF)
@@ -260,6 +261,12 @@
self.cache[jitframe_pos] = box
res[-1][pos] = box
+ def get_loc(self, p):
+ tag, pos = self.decode(p)
+ if tag == TAGBOX:
+ return pos
+ return -1
+
def finish(self):
res = []
self.cache = {}
@@ -279,7 +286,8 @@
self.store_float_box(res, pos, miframe, i,
frame.registers[pos])
pos += 1
self.cache = None
- return res, [f.registers for f in self.framestack]
+ return res, [[self.get_loc(r) for r in f.registers]
+ for f in self.framestack]
def rebuild_from_resumedata(metainterp, deadframe, faildescr):
""" Reconstruct metainterp frames from the resumedata
diff --git a/rpython/jit/resume/test/test_frontend.py
b/rpython/jit/resume/test/test_frontend.py
--- a/rpython/jit/resume/test/test_frontend.py
+++ b/rpython/jit/resume/test/test_frontend.py
@@ -84,7 +84,7 @@
def test_box_resume_reader(self):
jitcode = JitCode("jitcode")
jitcode.global_index = 0
- jitcode.setup(num_regs_i=13, num_regs_r=0, num_regs_f=0)
+ jitcode.setup(num_regs_i=4, num_regs_r=0, num_regs_f=0)
builder = ResumeBytecodeBuilder()
builder.enter_frame(-1, jitcode)
builder.resume_put(TAGBOX | (100 << 2), 0, 1)
@@ -98,13 +98,15 @@
metainterp = MockMetaInterp()
metainterp.staticdata = MockStaticData([jitcode], [])
metainterp.cpu = MockCPU()
- rebuild_from_resumedata(metainterp, "myframe", descr)
+ inpframes, inplocs = rebuild_from_resumedata(metainterp, "myframe",
descr)
assert len(metainterp.framestack) == 1
f = metainterp.framestack[-1]
assert f.registers_i[1].getint() == 103
assert isinstance(f.registers_i[2], Const)
assert f.registers_i[2].getint() == 15
assert f.registers_i[3].getint() == 13
+ assert inpframes == [[None, AnyBox(), None, None]]
+ assert inplocs == [[-1, 100, -1, -1]]
def test_nested_call(self):
jitcode1 = JitCode("jitcode")
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit