Author: Maciej Fijalkowski <[email protected]>
Branch: optresult-unroll
Changeset: r79531:9b9ea4d9c72a
Date: 2015-09-08 11:37 +0200
http://bitbucket.org/pypy/pypy/changeset/9b9ea4d9c72a/
Log: some fixes to translation
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
@@ -262,7 +262,7 @@
del enable_opts['unroll']
ops = history.operations[start:]
- if 'unroll' not in enable_opts:
+ if 'unroll' not in enable_opts or not
metainterp.cpu.supports_guard_gc_type:
return compile_simple_loop(metainterp, greenkey, start, inputargs, ops,
jumpargs, enable_opts)
jitcell_token = make_jitcell_token(jitdriver_sd)
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
@@ -15,6 +15,7 @@
# ____________________________________________________________
[email protected](4)
def _do_call(cpu, metainterp, argboxes, descr, rettype):
assert metainterp is not None
# count the number of arguments of the different types
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
@@ -170,7 +170,8 @@
def _getfield(self, opinfo, descr, optheap, true_force=True):
res = opinfo.getitem(descr, self.index, optheap)
- if isinstance(res, PreambleOp):
+ if (isinstance(res, PreambleOp) and
+ optheap.optimizer.cpu.supports_guard_gc_type):
if not true_force:
return res.op
index = res.preamble_op.getarg(1).getint()
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
@@ -147,12 +147,13 @@
old_op = self.optimizer._newoperations[pos]
if self.optimize_call_pure(op, old_op):
return
- for i, old_op in enumerate(self.extra_call_pure):
- if self.optimize_call_pure(op, old_op):
- if isinstance(old_op, PreambleOp):
- old_op = self.optimizer.force_op_from_preamble(old_op)
- self.extra_call_pure[i] = old_op
- return
+ if self.extra_call_pure:
+ for i, old_op in enumerate(self.extra_call_pure):
+ if self.optimize_call_pure(op, old_op):
+ if isinstance(old_op, PreambleOp):
+ old_op = self.optimizer.force_op_from_preamble(old_op)
+ self.extra_call_pure[i] = old_op
+ return
# replace CALL_PURE with just CALL
opnum = OpHelpers.call_for_descr(op.getdescr())
diff --git a/rpython/jit/metainterp/optimizeopt/shortpreamble.py
b/rpython/jit/metainterp/optimizeopt/shortpreamble.py
--- a/rpython/jit/metainterp/optimizeopt/shortpreamble.py
+++ b/rpython/jit/metainterp/optimizeopt/shortpreamble.py
@@ -17,6 +17,7 @@
See force_op_from_preamble for details how the extra things are put.
"""
+ op = None
def __init__(self, op, preamble_op, invented_name):
self.op = op
@@ -24,15 +25,23 @@
self.invented_name = invented_name
def numargs(self):
+ if self.op is None:
+ return 0
return self.op.numargs()
def getarglist(self):
+ if self.op is None:
+ return []
return self.op.getarglist()
def getarg(self, i):
+ if self.op is None:
+ return None
return self.op.getarg(i)
def getdescr(self):
+ if self.op is None:
+ return None
return self.op.getdescr()
def __repr__(self):
diff --git a/rpython/jit/metainterp/optimizeopt/unroll.py
b/rpython/jit/metainterp/optimizeopt/unroll.py
--- a/rpython/jit/metainterp/optimizeopt/unroll.py
+++ b/rpython/jit/metainterp/optimizeopt/unroll.py
@@ -18,6 +18,8 @@
class UnrollableOptimizer(Optimizer):
def force_op_from_preamble(self, preamble_op):
if isinstance(preamble_op, PreambleOp):
+ if self.optunroll.short_preamble_producer is None:
+ assert False # unreachable code
op = preamble_op.op
self.optimizer.inparg_dict[op] = None # XXX ARGH
# special hack for int_add(x, accumulator-const) optimization
diff --git a/rpython/jit/metainterp/optimizeopt/vstring.py
b/rpython/jit/metainterp/optimizeopt/vstring.py
--- a/rpython/jit/metainterp/optimizeopt/vstring.py
+++ b/rpython/jit/metainterp/optimizeopt/vstring.py
@@ -217,6 +217,9 @@
class VStringSliceInfo(StrPtrInfo):
length = -1
+ start = None
+ lgtop = None
+ s = None
def __init__(self, s, start, length, mode):
self.s = s
@@ -265,6 +268,10 @@
class VStringConcatInfo(StrPtrInfo):
#_attrs_ = ('mode', 'vleft', 'vright', '_is_virtual')
+
+ vleft = None
+ vright = None
+ _is_virtual = False
def __init__(self, mode, vleft, vright, is_virtual):
self.vleft = vleft
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit