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) _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit