[pypy-commit] pypy jit-leaner-frontend: in-progress

fijal pypy.commits at gmail.com
Mon Mar 14 15:03:03 EDT 2016


Author: fijal
Branch: jit-leaner-frontend
Changeset: r83050:caa5be25642c
Date: 2016-03-14 12:47 +0200
http://bitbucket.org/pypy/pypy/changeset/caa5be25642c/

Log:	in-progress

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
@@ -7,7 +7,7 @@
 from rpython.conftest import option
 
 from rpython.jit.metainterp.resoperation import ResOperation, rop,\
-    AbstractValue, oparity
+    AbstractValue, oparity, AbstractResOp, IntOp, RefOp, FloatOp
 from rpython.jit.codewriter import heaptracker, longlong
 import weakref
 
@@ -640,6 +640,21 @@
 # ____________________________________________________________
 
 
+class FrontendOp(AbstractResOp):
+    type = 'v'
+    _attrs_ = ('position',)
+
+    def __init__(self, pos):
+        self.position = pos
+
+class IntFrontendOp(IntOp, FrontendOp):
+    _attrs_ = ('position', '_resint')
+
+class FloatFrontendOp(FloatOp, FrontendOp):
+    _attrs_ = ('position', '_resfloat')
+
+class RefFrontendOp(RefOp, FrontendOp):
+    _attrs_ = ('position', '_resref')
 
 class History(object):
     ends_with_jump = False
@@ -657,6 +672,7 @@
         self.trace = Trace(inpargs)
         self.inputargs = inpargs
         if self._cache:
+            xxx
             # hack to record the ops *after* we know our inputargs
             for op in self._cache:
                 newop = self.trace.record_op(op.getopnum(), op.getarglist(),
@@ -679,24 +695,25 @@
     @specialize.argtype(3)
     def record(self, opnum, argboxes, value, descr=None):
         if self.trace is None:
+            xxx
             op = ResOperation(opnum, argboxes, -1, descr)
             self._cache.append(op)
         else:
-            op = self.trace.record_op(opnum, argboxes, descr)
+            pos = self.trace._record_op(opnum, argboxes, descr)
         if value is None:
-            assert op.type == 'v'
+            op = FrontendOp(pos)
         elif isinstance(value, bool):
-            assert op.type == 'i'
+            op = IntFrontendOp(pos)
             op.setint(int(value))
         elif lltype.typeOf(value) == lltype.Signed:
-            assert op.type == 'i'
+            op = IntFrontendOp(pos)
             op.setint(value)
         elif lltype.typeOf(value) is longlong.FLOATSTORAGE:
-            assert op.type == 'f'
+            op = FloatFrontendOp(pos)
             op.setfloatstorage(value)
         else:
+            op = RefFrontendOp(pos)
             assert lltype.typeOf(value) == llmemory.GCREF
-            assert op.type == 'r'
             op.setref_base(value)
         return op
 
diff --git a/rpython/jit/metainterp/opencoder.py b/rpython/jit/metainterp/opencoder.py
--- a/rpython/jit/metainterp/opencoder.py
+++ b/rpython/jit/metainterp/opencoder.py
@@ -9,7 +9,7 @@
 
 from rpython.jit.metainterp.history import ConstInt, Const, ConstFloat, ConstPtr
 from rpython.jit.metainterp.resoperation import AbstractResOp, AbstractInputArg,\
-    ResOperation, oparity, rop, opwithdescr, GuardResOp
+    ResOperation, oparity, rop, opwithdescr, GuardResOp, IntOp, FloatOp, RefOp
 from rpython.rlib.rarithmetic import intmask
 from rpython.rlib.objectmodel import we_are_translated
 from rpython.rtyper.lltypesystem import rffi, lltype, llmemory
@@ -347,7 +347,7 @@
         vref_array = self._list_of_boxes(vref_boxes)
         s = TopSnapshot(combine_uint(2**16 - 1, 0), [], vable_array,
                         vref_array)
-        assert rffi.cast(lltype.Signed, self._ops[self._pos - 1]) == -1
+        assert rffi.cast(lltype.Signed, self._ops[self._pos - 1]) == 0
         # guards have no descr
         self._snapshots.append(s)
         self._ops[self._pos - 1] = rffi.cast(rffi.SHORT, len(self._snapshots) - 1)


More information about the pypy-commit mailing list