[pypy-commit] pypy result-in-resops: wuhu, pass first test!!!!
fijal
noreply at buildbot.pypy.org
Thu Sep 20 18:34:59 CEST 2012
Author: Maciej Fijalkowski <fijall at gmail.com>
Branch: result-in-resops
Changeset: r57407:03797a60326f
Date: 2012-09-20 18:34 +0200
http://bitbucket.org/pypy/pypy/changeset/03797a60326f/
Log: wuhu, pass first test!!!!
diff --git a/pypy/jit/metainterp/compile.py b/pypy/jit/metainterp/compile.py
--- a/pypy/jit/metainterp/compile.py
+++ b/pypy/jit/metainterp/compile.py
@@ -491,7 +491,7 @@
CNT_FLOAT = 0x60000000
def store_final_boxes(self, guard_op, boxes):
- guard_op.setfailargs(boxes)
+ guard_op.set_extra("failargs", boxes)
self.guard_opnum = guard_op.getopnum()
def make_a_counter_per_value(self, guard_value_op):
diff --git a/pypy/jit/metainterp/history.py b/pypy/jit/metainterp/history.py
--- a/pypy/jit/metainterp/history.py
+++ b/pypy/jit/metainterp/history.py
@@ -20,14 +20,6 @@
def repr_of_descr(self):
return '%r' % (self,)
- def _clone_if_mutable(self):
- return self
- def clone_if_mutable(self):
- clone = self._clone_if_mutable()
- if not we_are_translated():
- assert clone.__class__ is self.__class__
- return clone
-
class AbstractFailDescr(AbstractDescr):
index = -1
diff --git a/pypy/jit/metainterp/optimizeopt/optimizer.py b/pypy/jit/metainterp/optimizeopt/optimizer.py
--- a/pypy/jit/metainterp/optimizeopt/optimizer.py
+++ b/pypy/jit/metainterp/optimizeopt/optimizer.py
@@ -560,8 +560,10 @@
assert False
def store_final_boxes_in_guard(self, op):
- descr = op.getdescr()
- assert isinstance(descr, compile.ResumeGuardDescr)
+ if op.getdescr() is not None:
+ # means we need to copy the op and attach a new descr
+ op = op.copy_and_change(op.getopnum(), descr=None)
+ descr = op.invent_descr()
modifier = resume.ResumeDataVirtualAdder(descr, self.resumedata_memo)
try:
newboxes = modifier.finish(self, self.pendingfields)
diff --git a/pypy/jit/metainterp/optimizeopt/test/test_optimizebasic.py b/pypy/jit/metainterp/optimizeopt/test/test_optimizebasic.py
--- a/pypy/jit/metainterp/optimizeopt/test/test_optimizebasic.py
+++ b/pypy/jit/metainterp/optimizeopt/test/test_optimizebasic.py
@@ -8,26 +8,26 @@
from pypy.jit.metainterp.optimize import InvalidLoop
from pypy.jit.metainterp.history import get_const_ptr_for_string
from pypy.jit.metainterp import executor, compile, resume
-from pypy.jit.metainterp.resoperation import rop, opname, ConstInt, BoxInt
+from pypy.jit.metainterp.resoperation import rop, opname, ConstInt, BoxInt,\
+ create_resop_1
from pypy.rlib.rarithmetic import LONG_BIT
def test_store_final_boxes_in_guard():
- from pypy.jit.metainterp.compile import ResumeGuardDescr
from pypy.jit.metainterp.resume import tag, TAGBOX
b0 = BoxInt()
b1 = BoxInt()
opt = optimizeopt.Optimizer(FakeMetaInterpStaticData(LLtypeMixin.cpu),
None)
- fdescr = ResumeGuardDescr()
- op = ResOperation(rop.GUARD_TRUE, ['dummy'], None, descr=fdescr)
+ op = create_resop_1(rop.GUARD_TRUE, None, 'dummy')
# setup rd data
fi0 = resume.FrameInfo(None, "code0", 11)
- fdescr.rd_frame_info_list = resume.FrameInfo(fi0, "code1", 33)
+ op._rd_frame_info_list = resume.FrameInfo(fi0, "code1", 33)
snapshot0 = resume.Snapshot(None, [b0])
- fdescr.rd_snapshot = resume.Snapshot(snapshot0, [b1])
+ op._rd_snapshot = resume.Snapshot(snapshot0, [b1])
#
opt.store_final_boxes_in_guard(op)
- if op.getfailargs() == [b0, b1]:
+ fdescr = op.getdescr()
+ if op.get_extra("failargs") == [b0, b1]:
assert list(fdescr.rd_numb.nums) == [tag(1, TAGBOX)]
assert list(fdescr.rd_numb.prev.nums) == [tag(0, TAGBOX)]
else:
diff --git a/pypy/jit/metainterp/optimizeopt/test/test_util.py b/pypy/jit/metainterp/optimizeopt/test/test_util.py
--- a/pypy/jit/metainterp/optimizeopt/test/test_util.py
+++ b/pypy/jit/metainterp/optimizeopt/test/test_util.py
@@ -371,10 +371,6 @@
op.set_extra("failargs", boxes)
def __eq__(self, other):
return type(self) is type(other) # xxx obscure
- def clone_if_mutable(self):
- res = Storage(self.metainterp_sd, self.original_greenkey)
- self.copy_all_attributes_into(res)
- return res
def _sortboxes(boxes):
_kind2count = {INT: 1, REF: 2, FLOAT: 3}
@@ -446,6 +442,7 @@
loop.resume_at_jump_descr = preamble.resume_at_jump_descr
for op in operations:
op.del_extra("optimize_value")
+ assert not jump_args
# deal with jump args
loop.operations = [preamble.operations[-1]] + \
operations + \
diff --git a/pypy/jit/metainterp/pyjitpl.py b/pypy/jit/metainterp/pyjitpl.py
--- a/pypy/jit/metainterp/pyjitpl.py
+++ b/pypy/jit/metainterp/pyjitpl.py
@@ -1017,7 +1017,8 @@
@arguments("orgpc", "int", "boxes3", "jitcode_position", "boxes3")
def opimpl_jit_merge_point(self, orgpc, jdindex, greenboxes,
jcposition, redboxes):
- resumedescr = compile.ResumeAtPositionDescr()
+ #resumedescr = compile.ResumeAtPositionDescr()
+ xxx
self.capture_resumedata(resumedescr, orgpc)
any_operation = len(self.metainterp.history.operations) > 0
@@ -1280,13 +1281,7 @@
return
metainterp = self.metainterp
metainterp_sd = metainterp.staticdata
- if opnum == rop.GUARD_NOT_FORCED:
- resumedescr = compile.ResumeGuardForcedDescr(metainterp_sd,
- metainterp.jitdriver_sd)
- elif opnum == rop.GUARD_NOT_INVALIDATED:
- resumedescr = compile.ResumeGuardNotInvalidated()
- else:
- resumedescr = compile.ResumeGuardDescr()
+ xxx
if box1 is None:
guard_op = create_resop_0(opnum, None, descr=resumedescr)
elif box2 is None:
diff --git a/pypy/jit/metainterp/resoperation.py b/pypy/jit/metainterp/resoperation.py
--- a/pypy/jit/metainterp/resoperation.py
+++ b/pypy/jit/metainterp/resoperation.py
@@ -46,6 +46,7 @@
op.initarglist(args)
if descr is not None:
assert isinstance(op, ResOpWithDescr)
+ assert not op.is_guard()
op.setdescr(descr)
return op
@@ -59,6 +60,7 @@
op = cls(result)
if descr is not None:
assert isinstance(op, ResOpWithDescr)
+ assert not op.is_guard()
op.setdescr(descr)
return op
@@ -77,6 +79,7 @@
op._arg0 = arg0
if descr is not None:
assert isinstance(op, ResOpWithDescr)
+ assert not op.is_guard()
op.setdescr(descr)
return op
@@ -95,6 +98,7 @@
op._arg1 = arg1
if descr is not None:
assert isinstance(op, ResOpWithDescr)
+ assert not op.is_guard()
op.setdescr(descr)
return op
@@ -114,6 +118,7 @@
op._arg2 = arg2
if descr is not None:
assert isinstance(op, ResOpWithDescr)
+ assert not op.is_guard()
op.setdescr(descr)
return op
@@ -174,6 +179,11 @@
def get_extra(self, key):
if key == 'llgraph_var2index':
return self.llgraph_var2index
+ if key == 'optimize_value':
+ try:
+ return self._optimize_value
+ except AttributeError:
+ raise KeyError
raise KeyError
@specialize.arg(1)
@@ -181,6 +191,9 @@
if key == 'llgraph_var2index':
self.llgraph_var2index = value
return
+ if key == 'optimize_value':
+ self._optimize_value = value
+ return
raise KeyError
@specialize.arg(1)
@@ -927,6 +940,22 @@
raise Exception("rd_frame_info_list already set")
self._rd_frame_info_list = rd_frame_info_list
+ def invent_descr(self):
+ from pypy.jit.metainterp import compile
+
+ opnum = self.getopnum()
+ if opnum == rop.GUARD_NOT_FORCED:
+ descr = compile.ResumeGuardForcedDescr(metainterp_sd,
+ metainterp.jitdriver_sd)
+ elif opnum == rop.GUARD_NOT_INVALIDATED:
+ descr = compile.ResumeGuardNotInvalidated()
+ else:
+ descr = compile.ResumeGuardDescr()
+ descr.rd_snapshot = self._rd_snapshot
+ descr.rd_frame_info_list = self._rd_frame_info_list
+ self.setdescr(descr)
+ return descr
+
# ============
# arity mixins
# ============
More information about the pypy-commit
mailing list