[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