[pypy-commit] pypy unroll-if-alt: Fix for some changes hakanardo made in the emitting of pure operations.
alex_gaynor
noreply at buildbot.pypy.org
Sun Sep 18 20:10:22 CEST 2011
Author: Alex Gaynor <alex.gaynor at gmail.com>
Branch: unroll-if-alt
Changeset: r47328:fc7b6f58decb
Date: 2011-09-18 14:10 -0400
http://bitbucket.org/pypy/pypy/changeset/fc7b6f58decb/
Log: Fix for some changes hakanardo made in the emitting of pure
operations.
diff --git a/pypy/jit/metainterp/optimizeopt/optimizer.py b/pypy/jit/metainterp/optimizeopt/optimizer.py
--- a/pypy/jit/metainterp/optimizeopt/optimizer.py
+++ b/pypy/jit/metainterp/optimizeopt/optimizer.py
@@ -71,7 +71,7 @@
guards.append(op)
elif self.level == LEVEL_KNOWNCLASS:
op = ResOperation(rop.GUARD_NONNULL, [box], None)
- guards.append(op)
+ guards.append(op)
op = ResOperation(rop.GUARD_CLASS, [box, self.known_class], None)
guards.append(op)
else:
@@ -112,7 +112,7 @@
self.lenbound.bound.intersect(other.lenbound.bound)
else:
self.lenbound = other.lenbound.clone()
-
+
def force_box(self):
return self.box
@@ -146,7 +146,7 @@
assert isinstance(constbox, Const)
self.box = constbox
self.level = LEVEL_CONSTANT
-
+
if isinstance(constbox, ConstInt):
val = constbox.getint()
self.intbound = IntBound(val, val)
@@ -378,7 +378,7 @@
new.set_optimizations(optimizations)
new.quasi_immutable_deps = self.quasi_immutable_deps
return new
-
+
def produce_potential_short_preamble_ops(self, sb):
raise NotImplementedError('This is implemented in unroll.UnrollableOptimizer')
@@ -505,9 +505,9 @@
if op.returns_bool_result():
self.bool_boxes[self.getvalue(op.result)] = None
self._emit_operation(op)
-
+
@specialize.argtype(0)
- def _emit_operation(self, op):
+ def _emit_operation(self, op):
for i in range(op.numargs()):
arg = op.getarg(i)
try:
@@ -557,12 +557,8 @@
def make_args_key(self, op):
n = op.numargs()
- if op.getopnum() == rop.CALL_PURE:
- start = 1
- else:
- start = 0
- args = [None] * (n + 2 - start)
- for i in range(start, n):
+ args = [None] * (n + 2)
+ for i in range(n):
arg = op.getarg(i)
try:
value = self.values[arg]
@@ -570,9 +566,9 @@
pass
else:
arg = value.get_key_box()
- args[i - start] = arg
- args[n - start] = ConstInt(op.getopnum())
- args[n + 1 - start] = op.getdescr()
+ args[i] = arg
+ args[n] = ConstInt(op.getopnum())
+ args[n + 1] = op.getdescr()
return args
@specialize.argtype(0)
@@ -620,7 +616,7 @@
def remember_emitting_pure(self, op):
pass
-
+
def constant_fold(self, op):
argboxes = [self.get_constant_box(op.getarg(i))
for i in range(op.numargs())]
@@ -662,9 +658,9 @@
arrayvalue = self.getvalue(op.getarg(0))
arrayvalue.make_len_gt(MODE_UNICODE, op.getdescr(), indexvalue.box.getint())
self.optimize_default(op)
-
-
+
+
dispatch_opt = make_dispatcher_method(Optimizer, 'optimize_',
default=Optimizer.optimize_default)
diff --git a/pypy/jit/metainterp/optimizeopt/rewrite.py b/pypy/jit/metainterp/optimizeopt/rewrite.py
--- a/pypy/jit/metainterp/optimizeopt/rewrite.py
+++ b/pypy/jit/metainterp/optimizeopt/rewrite.py
@@ -19,7 +19,7 @@
def new(self):
return OptRewrite()
-
+
def produce_potential_short_preamble_ops(self, sb):
for op in self.loop_invariant_producer.values():
sb.add_potential(op)
@@ -240,6 +240,7 @@
return
else:
self.optimizer.pure_operations[args] = op
+ self.optimizer.remember_emitting_pure(op)
# replace CALL_PURE with just CALL
args = op.getarglist()
@@ -361,7 +362,7 @@
# expects a compile-time constant
assert isinstance(arg, Const)
key = make_hashable_int(arg.getint())
-
+
resvalue = self.loop_invariant_results.get(key, None)
if resvalue is not None:
self.make_equal_to(op.result, resvalue)
diff --git a/pypy/jit/metainterp/optimizeopt/test/test_optimizeopt.py b/pypy/jit/metainterp/optimizeopt/test/test_optimizeopt.py
--- a/pypy/jit/metainterp/optimizeopt/test/test_optimizeopt.py
+++ b/pypy/jit/metainterp/optimizeopt/test/test_optimizeopt.py
@@ -3191,15 +3191,16 @@
jump(p1, i4, i3)
'''
expected = '''
- [p1, i4, i3]
- jump(p1, i3, i3)
+ [p1, i4, i3, i5]
+ setfield_gc(p1, i5, descr=valuedescr)
+ jump(p1, i3, i5, i5)
'''
preamble = '''
[p1, i1, i4]
setfield_gc(p1, i1, descr=valuedescr)
i3 = call(p1, descr=plaincalldescr)
setfield_gc(p1, i3, descr=valuedescr)
- jump(p1, i4, i3)
+ jump(p1, i4, i3, i3)
'''
self.optimize_loop(ops, expected, preamble)
@@ -3213,16 +3214,16 @@
jump(p1, i4, i3)
'''
expected = '''
- [p1, i4, i3]
+ [p1, i4, i3, i5]
setfield_gc(p1, i4, descr=valuedescr)
- jump(p1, i3, i3)
+ jump(p1, i3, i5, i5)
'''
preamble = '''
[p1, i1, i4]
setfield_gc(p1, i1, descr=valuedescr)
i3 = call(p1, descr=plaincalldescr)
setfield_gc(p1, i1, descr=valuedescr)
- jump(p1, i4, i3)
+ jump(p1, i4, i3, i3)
'''
self.optimize_loop(ops, expected, preamble)
@@ -3242,13 +3243,13 @@
escape(i1)
escape(i2)
i4 = call(123456, 4, i0, 6, descr=plaincalldescr)
- jump(i0, i4)
+ jump(i0, i4, i4)
'''
expected = '''
- [i0, i4]
+ [i0, i4, i5]
escape(42)
escape(i4)
- jump(i0, i4)
+ jump(i0, i5, i5)
'''
self.optimize_loop(ops, expected, preamble, call_pure_results)
@@ -3272,13 +3273,13 @@
escape(i2)
i4 = call(123456, 4, i0, 6, descr=plaincalldescr)
guard_no_exception() []
- jump(i0, i4)
+ jump(i0, i4, i4)
'''
expected = '''
- [i0, i2]
+ [i0, i2, i3]
escape(42)
escape(i2)
- jump(i0, i2)
+ jump(i0, i3, i3)
'''
self.optimize_loop(ops, expected, preamble, call_pure_results)
diff --git a/pypy/jit/metainterp/test/test_string.py b/pypy/jit/metainterp/test/test_string.py
--- a/pypy/jit/metainterp/test/test_string.py
+++ b/pypy/jit/metainterp/test/test_string.py
@@ -327,7 +327,7 @@
def test_str_slice_len_surviving(self):
_str = self._str
longstring = _str("Unrolling Trouble")
- mydriver = JitDriver(reds = ['i', 'a', 'sa'], greens = [])
+ mydriver = JitDriver(reds = ['i', 'a', 'sa'], greens = [])
def f(a):
i = sa = a
while i < len(longstring):
@@ -343,7 +343,7 @@
fillers = _str("abcdefghijklmnopqrstuvwxyz")
data = _str("ABCDEFGHIJKLMNOPQRSTUVWXYZ")
- mydriver = JitDriver(reds = ['line', 'noise', 'res'], greens = [])
+ mydriver = JitDriver(reds = ['line', 'noise', 'res'], greens = [])
def f():
line = data
noise = fillers
@@ -370,7 +370,7 @@
def __init__(self, value):
self.value = value
mydriver = JitDriver(reds = ['ratio', 'line', 'noise', 'res'],
- greens = [])
+ greens = [])
def f():
line = Str(data)
noise = Str(fillers)
@@ -408,7 +408,7 @@
return len(sa)
assert self.meta_interp(f, [16]) == f(16)
- def test_loop_invariant_string_slize(self):
+ def test_loop_invariant_string_slice(self):
_str = self._str
mydriver = JitDriver(reds = ['i', 'n', 'sa', 's', 's1'], greens = [])
def f(n, c):
@@ -425,7 +425,7 @@
return sa
assert self.meta_interp(f, [16, 'a']) == f(16, 'a')
- def test_loop_invariant_string_slize_boxed(self):
+ def test_loop_invariant_string_slice_boxed(self):
class Str(object):
def __init__(self, value):
self.value = value
@@ -445,7 +445,7 @@
return sa
assert self.meta_interp(f, [16, 'a']) == f(16, 'a')
- def test_loop_invariant_string_slize_in_array(self):
+ def test_loop_invariant_string_slice_in_array(self):
_str = self._str
mydriver = JitDriver(reds = ['i', 'n', 'sa', 's', 's1'], greens = [])
def f(n, c):
More information about the pypy-commit
mailing list