[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