Author: Maciej Fijalkowski <[email protected]>
Branch: optresult
Changeset: r74503:4fe0a963f8a3
Date: 2014-11-13 15:22 +0200
http://bitbucket.org/pypy/pypy/changeset/4fe0a963f8a3/

Log:    small progres

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
@@ -6,9 +6,8 @@
 
 from rpython.conftest import option
 
-from rpython.jit.metainterp.resoperation import ResOperation, rop
+from rpython.jit.metainterp.resoperation import ResOperation, rop, 
AbstractValue
 from rpython.jit.codewriter import heaptracker, longlong
-from rpython.rlib.objectmodel import compute_identity_hash
 import weakref
 
 # ____________________________________________________________
@@ -72,7 +71,7 @@
                         compute_unique_id(box))
 
 
-class AbstractValue(object):
+class XxxAbstractValue(object):
     __slots__ = ()
 
     def getint(self):
@@ -95,9 +94,6 @@
         raise NotImplementedError
     getref._annspecialcase_ = 'specialize:arg(1)'
 
-    def _get_hash_(self):
-        return compute_identity_hash(self)
-
     def clonebox(self):
         raise NotImplementedError
 
diff --git a/rpython/jit/metainterp/optimizeopt/earlyforce.py 
b/rpython/jit/metainterp/optimizeopt/earlyforce.py
--- a/rpython/jit/metainterp/optimizeopt/earlyforce.py
+++ b/rpython/jit/metainterp/optimizeopt/earlyforce.py
@@ -4,7 +4,7 @@
 
 
 def is_raw_free(op, opnum):
-    if opnum != rop.CALL:
+    if not op.is_call():
         return False
     einfo = op.getdescr().get_extra_info()
     return einfo.oopspecindex == EffectInfo.OS_RAW_FREE
@@ -18,7 +18,9 @@
             opnum != rop.SETARRAYITEM_GC and
             opnum != rop.SETARRAYITEM_RAW and
             opnum != rop.QUASIIMMUT_FIELD and
-            opnum != rop.SAME_AS and
+            opnum != rop.SAME_AS_I and
+            opnum != rop.SAME_AS_R and
+            opnum != rop.SAME_AS_F and
             opnum != rop.MARK_OPAQUE_PTR and
             not is_raw_free(op, opnum)):
 
diff --git a/rpython/jit/metainterp/optimizeopt/heap.py 
b/rpython/jit/metainterp/optimizeopt/heap.py
--- a/rpython/jit/metainterp/optimizeopt/heap.py
+++ b/rpython/jit/metainterp/optimizeopt/heap.py
@@ -248,7 +248,7 @@
     def emit_operation(self, op):
         self.emitting_operation(op)
         self.emit_postponed_op()
-        if (op.is_comparison() or op.getopnum() == rop.CALL_MAY_FORCE
+        if (op.is_comparison() or op.is_call_may_force()
             or op.is_ovf()):
             self.postponed_op = op
         else:
@@ -276,13 +276,8 @@
             opnum == rop.COPYSTRCONTENT or       # no effect on GC struct/array
             opnum == rop.COPYUNICODECONTENT):    # no effect on GC struct/array
             return
-        if (opnum == rop.CALL or
-            opnum == rop.CALL_PURE or
-            opnum == rop.COND_CALL or
-            opnum == rop.CALL_MAY_FORCE or
-            opnum == rop.CALL_RELEASE_GIL or
-            opnum == rop.CALL_ASSEMBLER):
-            if opnum == rop.CALL_ASSEMBLER:
+        if op.is_call():
+            if op.is_call_assembler():
                 self._seen_guard_not_invalidated = False
             else:
                 effectinfo = op.getdescr().get_extra_info()
diff --git a/rpython/jit/metainterp/optimizeopt/optimizer.py 
b/rpython/jit/metainterp/optimizeopt/optimizer.py
--- a/rpython/jit/metainterp/optimizeopt/optimizer.py
+++ b/rpython/jit/metainterp/optimizeopt/optimizer.py
@@ -551,7 +551,7 @@
 
     @specialize.argtype(0)
     def _emit_operation(self, op):
-        assert op.getopnum() != rop.CALL_PURE
+        assert not op.is_call_pure()
         for i in range(op.numargs()):
             arg = op.getarg(i)
             try:
@@ -598,7 +598,8 @@
         modifier = resume.ResumeDataVirtualAdder(descr, self.resumedata_memo)
         try:
             newboxes = modifier.finish(self, pendingfields)
-            if len(newboxes) > self.metainterp_sd.options.failargs_limit:
+            if (newboxes is not None and
+                len(newboxes) > self.metainterp_sd.options.failargs_limit):
                 raise resume.TagOverflow
         except resume.TagOverflow:
             raise compile.giveup()
@@ -625,11 +626,11 @@
                 descr.make_a_counter_per_value(op)
         return op
 
-    def make_args_key(self, op):
-        n = op.numargs()
+    def make_args_key(self, opnum, arglist, descr):
+        n = len(arglist)
         args = [None] * (n + 2)
         for i in range(n):
-            arg = op.getarg(i)
+            arg = arglist[i]
             try:
                 value = self.values[arg]
             except KeyError:
@@ -637,8 +638,8 @@
             else:
                 arg = value.get_key_box()
             args[i] = arg
-        args[n] = ConstInt(op.getopnum())
-        args[n + 1] = op.getdescr()
+        args[n] = ConstInt(opnum)
+        args[n + 1] = descr
         return args
 
     def optimize_default(self, op):
diff --git a/rpython/jit/metainterp/optimizeopt/pure.py 
b/rpython/jit/metainterp/optimizeopt/pure.py
--- a/rpython/jit/metainterp/optimizeopt/pure.py
+++ b/rpython/jit/metainterp/optimizeopt/pure.py
@@ -105,7 +105,7 @@
         op = ResOperation(opnum, args, result)
         key = self.optimizer.make_args_key(op)
         if key not in self.pure_operations:
-            self.pure_operations[key] = op
+            self.pure_operations[key] = result
 
     def has_pure_result(self, opnum, args, descr):
         op = ResOperation(opnum, args, None, descr)
diff --git a/rpython/jit/metainterp/optimizeopt/test/test_multilabel.py 
b/rpython/jit/metainterp/optimizeopt/test/test_multilabel.py
--- a/rpython/jit/metainterp/optimizeopt/test/test_multilabel.py
+++ b/rpython/jit/metainterp/optimizeopt/test/test_multilabel.py
@@ -1,6 +1,6 @@
 from __future__ import with_statement
 from rpython.jit.metainterp.optimizeopt.test.test_util import (
-    LLtypeMixin, BaseTest, Storage, _sortboxes,
+    LLtypeMixin, BaseTest, Storage,
     FakeMetaInterpStaticData)
 from rpython.jit.metainterp.history import TreeLoop, JitCellToken, TargetToken
 from rpython.jit.metainterp.resoperation import rop, opname, ResOperation
diff --git a/rpython/jit/metainterp/optimizeopt/test/test_util.py 
b/rpython/jit/metainterp/optimizeopt/test/test_util.py
--- a/rpython/jit/metainterp/optimizeopt/test/test_util.py
+++ b/rpython/jit/metainterp/optimizeopt/test/test_util.py
@@ -338,21 +338,11 @@
 
 class Storage(compile.ResumeGuardDescr):
     "for tests."
-    def __init__(self, metainterp_sd=None, original_greenkey=None):
-        self.metainterp_sd = metainterp_sd
-        self.original_greenkey = original_greenkey
-    def store_final_boxes(self, op, boxes, metainterp_sd):
-        op.setfailargs(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
+        return Storage()
 
-def _sortboxes(boxes):
-    _kind2count = {history.INT: 1, history.REF: 2, history.FLOAT: 3}
-    return sorted(boxes, key=lambda box: _kind2count[box.type])
+    def store_final_boxes(self, *args):
+        pass
 
 class BaseTest(object):
 
@@ -376,8 +366,6 @@
         if fail_args is None:
             return None
         descr = Storage()
-        descr.rd_frame_info_list = resume.FrameInfo(None, "code", 11)
-        descr.rd_snapshot = resume.Snapshot(None, _sortboxes(fail_args))
         return descr
 
     def assert_equal(self, optimized, expected, text_right=None):
diff --git a/rpython/jit/metainterp/resoperation.py 
b/rpython/jit/metainterp/resoperation.py
--- a/rpython/jit/metainterp/resoperation.py
+++ b/rpython/jit/metainterp/resoperation.py
@@ -1,7 +1,9 @@
 from rpython.rlib.objectmodel import we_are_translated, specialize
+from rpython.rlib.objectmodel import compute_identity_hash
 
 class AbstractValue(object):
-    pass
+    def _get_hash_(self):
+        return compute_identity_hash(self)
 
 @specialize.argtype(2)
 def ResOperation(opnum, args, result, descr=None):
@@ -36,6 +38,7 @@
     pc = 0
     opnum = 0
     _cls_has_bool_result = False
+    type = 'v'
 
     _attrs_ = ()
 
@@ -177,6 +180,27 @@
     def is_call(self):
         return rop._CALL_FIRST <= self.getopnum() <= rop._CALL_LAST
 
+    def is_call_assembler(self):
+        opnum = self.opnum
+        return (opnum == rop.CALL_ASSEMBLER_I or
+                opnum == rop.CALL_ASSEMBLER_R or
+                opnum == rop.CALL_ASSEMBLER_N or
+                opnum == rop.CALL_ASSEMBLER_F)
+
+    def is_call_may_force(self):
+        opnum = self.opnum
+        return (opnum == rop.CALL_MAY_FORCE_I or
+                opnum == rop.CALL_MAY_FORCE_R or
+                opnum == rop.CALL_MAY_FORCE_N or
+                opnum == rop.CALL_MAY_FORCE_F)
+
+    def is_call_pure(self):
+        opnum = self.opnum
+        return (opnum == rop.CALL_PURE_I or
+                opnum == rop.CALL_PURE_R or
+                opnum == rop.CALL_PURE_N or
+                opnum == rop.CALL_PURE_F)        
+
     def is_ovf(self):
         return rop._OVF_FIRST <= self.getopnum() <= rop._OVF_LAST
 
@@ -251,6 +275,8 @@
 class IntOp(object):
     _mixin_ = True
 
+    type = 'i'
+
     def getint(self):
         return self._resint
 
@@ -260,6 +286,8 @@
 class FloatOp(object):
     _mixin_ = True
 
+    type = 'f'
+
     def getfloatstorage(self):
         return self._resfloat
 
@@ -269,6 +297,8 @@
 class RefOp(object):
     _mixin_ = True
 
+    type = 'r'
+
     def getref_base(self):
         return self._resref
 
diff --git a/rpython/jit/metainterp/resume.py b/rpython/jit/metainterp/resume.py
--- a/rpython/jit/metainterp/resume.py
+++ b/rpython/jit/metainterp/resume.py
@@ -358,7 +358,9 @@
         # make sure that nobody attached resume data to this guard yet
         assert not storage.rd_numb
         snapshot = storage.rd_snapshot
-        assert snapshot is not None # is that true?
+        if snapshot is None:
+            assert not we_are_translated()
+            return # for tests in optimizeopt
         numb, liveboxes_from_env, v = self.memo.number(optimizer, snapshot)
         self.liveboxes_from_env = liveboxes_from_env
         self.liveboxes = {}
diff --git a/rpython/jit/tool/oparser.py b/rpython/jit/tool/oparser.py
--- a/rpython/jit/tool/oparser.py
+++ b/rpython/jit/tool/oparser.py
@@ -23,7 +23,7 @@
         return 'escape'
 
     def clone(self):
-        op = ESCAPE_OP(self.result)
+        op = ESCAPE_OP(0)
         op.initarglist(self.getarglist()[:])
         return op
 
@@ -38,7 +38,7 @@
         return 'force_spill'
 
     def clone(self):
-        op = FORCE_SPILL(self.result)
+        op = FORCE_SPILL(0)
         op.initarglist(self.getarglist()[:])
         return op
 
@@ -265,12 +265,12 @@
 
     def create_op(self, opnum, args, descr):
         if opnum == ESCAPE_OP.OPNUM:
-            op = ESCAPE_OP()
+            op = ESCAPE_OP(0)
             op.initarglist(args)
             assert descr is None
             return op
         if opnum == FORCE_SPILL.OPNUM:
-            op = FORCE_SPILL()
+            op = FORCE_SPILL(0)
             op.initarglist(args)
             assert descr is None
             return op
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to