[pypy-commit] pypy optresult: hack enough to get the basic test go to the backend
fijal
noreply at buildbot.pypy.org
Tue Nov 18 07:43:24 CET 2014
Author: Maciej Fijalkowski <fijall at gmail.com>
Branch: optresult
Changeset: r74570:8960f6fef760
Date: 2014-11-18 08:43 +0200
http://bitbucket.org/pypy/pypy/changeset/8960f6fef760/
Log: hack enough to get the basic test go to the backend
diff --git a/rpython/jit/metainterp/compile.py b/rpython/jit/metainterp/compile.py
--- a/rpython/jit/metainterp/compile.py
+++ b/rpython/jit/metainterp/compile.py
@@ -128,9 +128,10 @@
part = create_empty_loop(metainterp)
part.inputargs = inputargs[:]
h_ops = history.operations
- part.operations = [ResOperation(rop.LABEL, inputargs, None, descr=TargetToken(jitcell_token))] + \
+ # XXX why do we clone here?
+ part.operations = [ResOperation(rop.LABEL, inputargs, descr=TargetToken(jitcell_token))] + \
[h_ops[i].clone() for i in range(start, len(h_ops))] + \
- [ResOperation(rop.LABEL, jumpargs, None, descr=jitcell_token)]
+ [ResOperation(rop.LABEL, jumpargs, descr=jitcell_token)]
try:
optimize_trace(metainterp_sd, part, enable_opts)
diff --git a/rpython/jit/metainterp/executor.py b/rpython/jit/metainterp/executor.py
--- a/rpython/jit/metainterp/executor.py
+++ b/rpython/jit/metainterp/executor.py
@@ -437,7 +437,6 @@
def execute(cpu, metainterp, opnum, descr, *argboxes):
- xxx
# only for opnums with a fixed arity
num_args = len(argboxes)
withdescr = has_descr(opnum)
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
@@ -1,7 +1,7 @@
from rpython.rtyper.extregistry import ExtRegistryEntry
from rpython.rtyper.lltypesystem import lltype, llmemory, rffi
from rpython.rlib.objectmodel import we_are_translated, Symbolic
-from rpython.rlib.objectmodel import compute_unique_id
+from rpython.rlib.objectmodel import compute_unique_id, specialize
from rpython.rlib.rarithmetic import r_int64, is_valid_int
from rpython.conftest import option
@@ -172,6 +172,16 @@
self.identifier = identifier # for testing
+ at specialize.argtype(0)
+def newconst(value):
+ if isinstance(value, int):
+ return ConstInt(value)
+ elif isinstance(value, float):
+ return ConstFloat(value)
+ else:
+ assert lltype.typeOf(value) == llmemory.GCREF
+ return ConstPtr(value)
+
class Const(AbstractValue):
__slots__ = ()
@@ -689,6 +699,7 @@
@staticmethod
def check_consistency_of_branch(operations, seen):
"NOT_RPYTHON"
+ return # XXX for now
for op in operations:
for i in range(op.numargs()):
box = op.getarg(i)
@@ -763,8 +774,10 @@
self.inputargs = None
self.operations = []
- def record(self, opnum, argboxes, resbox, descr=None):
- op = ResOperation(opnum, argboxes, resbox, descr)
+ @specialize.argtype(3)
+ def record(self, opnum, argboxes, value, descr=None):
+ op = ResOperation(opnum, argboxes, descr)
+ op.setvalue(value)
self.operations.append(op)
return op
diff --git a/rpython/jit/metainterp/logger.py b/rpython/jit/metainterp/logger.py
--- a/rpython/jit/metainterp/logger.py
+++ b/rpython/jit/metainterp/logger.py
@@ -155,10 +155,10 @@
s_offset = "+%d: " % offset
args = ", ".join([self.repr_of_arg(op.getarg(i)) for i in range(op.numargs())])
- if op.result is not None:
- res = self.repr_of_arg(op.result) + " = "
- else:
- res = ""
+ #if op.result is not None:
+ # res = self.repr_of_arg(op.result) + " = "
+ #else:
+ res = ""
is_guard = op.is_guard()
if op.getdescr() is not None:
descr = op.getdescr()
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
@@ -42,7 +42,6 @@
op.getarglist(), op.getdescr())
oldop = self.pure_operations.get(args, None)
if oldop is not None and oldop.getdescr() is op.getdescr():
- assert oldop.getopnum() == op.getopnum()
self.optimizer.make_equal_to(op, self.getvalue(oldop))
return
else:
diff --git a/rpython/jit/metainterp/optimizeopt/rewrite.py b/rpython/jit/metainterp/optimizeopt/rewrite.py
--- a/rpython/jit/metainterp/optimizeopt/rewrite.py
+++ b/rpython/jit/metainterp/optimizeopt/rewrite.py
@@ -233,7 +233,7 @@
# replace "x / const" by "x * (1/const)" if possible
if v2.is_constant():
- divisor = v2.box.getfloat()
+ divisor = v2.box.getfloatstorage()
fraction = math.frexp(divisor)[0]
# This optimization is valid for powers of two
# but not for zeroes, some denormals and NaN:
@@ -242,7 +242,8 @@
rfraction = math.frexp(reciprocal)[0]
if rfraction == 0.5 or rfraction == -0.5:
c = ConstFloat(longlong.getfloatstorage(reciprocal))
- op = op.copy_and_change(rop.FLOAT_MUL, args=[arg1, c])
+ op = self.optimizer.replace_op_with(op, rop.FLOAT_MUL,
+ args=[arg1, c])
self.emit_operation(op)
def optimize_FLOAT_NEG(self, op):
diff --git a/rpython/jit/metainterp/optimizeopt/simplify.py b/rpython/jit/metainterp/optimizeopt/simplify.py
--- a/rpython/jit/metainterp/optimizeopt/simplify.py
+++ b/rpython/jit/metainterp/optimizeopt/simplify.py
@@ -48,7 +48,7 @@
if not self.unroll:
descr = op.getdescr()
if isinstance(descr, JitCellToken):
- return self.optimize_JUMP(op.copy_and_change(rop.JUMP))
+ return self.optimize_JUMP(op._copy_and_change(rop.JUMP))
self.last_label_descr = op.getdescr()
self.emit_operation(op)
diff --git a/rpython/jit/metainterp/pyjitpl.py b/rpython/jit/metainterp/pyjitpl.py
--- a/rpython/jit/metainterp/pyjitpl.py
+++ b/rpython/jit/metainterp/pyjitpl.py
@@ -1883,11 +1883,11 @@
# execute the operation
profiler = self.staticdata.profiler
profiler.count_ops(opnum)
- resbox = executor.execute(self.cpu, self, opnum, descr, *argboxes)
+ resvalue = executor.execute(self.cpu, self, opnum, descr, *argboxes)
if rop._ALWAYS_PURE_FIRST <= opnum <= rop._ALWAYS_PURE_LAST:
- return self._record_helper_pure(opnum, resbox, descr, *argboxes)
+ return self._record_helper_pure(opnum, resvalue, descr, *argboxes)
else:
- return self._record_helper_nonpure_varargs(opnum, resbox, descr,
+ return self._record_helper_nonpure_varargs(opnum, resvalue, descr,
list(argboxes))
@specialize.arg(1)
@@ -1896,6 +1896,7 @@
# execute the operation
profiler = self.staticdata.profiler
profiler.count_ops(opnum)
+ xxx
resbox = executor.execute_varargs(self.cpu, self,
opnum, argboxes, descr)
# check if the operation can be constant-folded away
@@ -1906,16 +1907,18 @@
resbox = self._record_helper_nonpure_varargs(opnum, resbox, descr, argboxes)
return resbox
- def _record_helper_pure(self, opnum, resbox, descr, *argboxes):
+ @specialize.argtype(2)
+ def _record_helper_pure(self, opnum, resvalue, descr, *argboxes):
canfold = self._all_constants(*argboxes)
if canfold:
- resbox = resbox.constbox() # ensure it is a Const
- return resbox
+ return history.newconst(resvalue)
else:
- resbox = resbox.nonconstbox() # ensure it is a Box
- return self._record_helper_nonpure_varargs(opnum, resbox, descr, list(argboxes))
+ return self._record_helper_nonpure_varargs(opnum, resvalue, descr,
+ list(argboxes))
+ @specialize.argtype(2)
def _record_helper_pure_varargs(self, opnum, resbox, descr, argboxes):
+ xxx
canfold = self._all_constants_varargs(argboxes)
if canfold:
resbox = resbox.constbox() # ensure it is a Const
@@ -1924,19 +1927,19 @@
resbox = resbox.nonconstbox() # ensure it is a Box
return self._record_helper_nonpure_varargs(opnum, resbox, descr, argboxes)
- def _record_helper_nonpure_varargs(self, opnum, resbox, descr, argboxes):
- assert resbox is None or isinstance(resbox, Box)
+ @specialize.argtype(2)
+ def _record_helper_nonpure_varargs(self, opnum, resvalue, descr, argboxes):
if (rop._OVF_FIRST <= opnum <= rop._OVF_LAST and
self.last_exc_value_box is None and
self._all_constants_varargs(argboxes)):
- return resbox.constbox()
+ return history.newconst(resvalue)
# record the operation
profiler = self.staticdata.profiler
profiler.count_ops(opnum, Counters.RECORDED_OPS)
self.heapcache.invalidate_caches(opnum, descr, argboxes)
- op = self.history.record(opnum, argboxes, resbox, descr)
+ op = self.history.record(opnum, argboxes, resvalue, descr)
self.attach_debug_info(op)
- return resbox
+ return op
def execute_new_with_vtable(self, known_class):
resbox = self.execute_and_record(rop.NEW_WITH_VTABLE, 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
@@ -115,7 +115,7 @@
descr = self.getdescr()
if descr is not None:
descr = descr.clone_if_mutable()
- op = ResOperation(self.getopnum(), args[:], self.result, descr)
+ op = ResOperation(self.getopnum(), args[:], descr)
if not we_are_translated():
op.name = self.name
op.pc = self.pc
@@ -340,6 +340,9 @@
name = self.type + str(len(memo))
memo[self] = name
return name
+
+ def getdescr(self):
+ return None
class InputArgInt(IntOp, AbstractInputArg):
def __init__(self, intval):
More information about the pypy-commit
mailing list