[pypy-commit] pypy optresult: clean the escape mess and start passing first unrolling tests
fijal
noreply at buildbot.pypy.org
Wed Dec 3 18:00:39 CET 2014
Author: Maciej Fijalkowski <fijall at gmail.com>
Branch: optresult
Changeset: r74796:fe81bdbcbbaa
Date: 2014-12-03 18:59 +0200
http://bitbucket.org/pypy/pypy/changeset/fe81bdbcbbaa/
Log: clean the escape mess and start passing first unrolling tests
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
@@ -13,7 +13,6 @@
TargetToken, AbstractFailDescr, ConstInt)
from rpython.jit.metainterp import history, jitexc
from rpython.jit.metainterp.optimize import InvalidLoop
-from rpython.jit.metainterp.inliner import Inliner
from rpython.jit.metainterp.resume import NUMBERING, PENDINGFIELDSP, ResumeDataDirectReader
from rpython.jit.codewriter import heaptracker, longlong
@@ -104,9 +103,12 @@
# ____________________________________________________________
class Memo(object):
- def __init__(self):
+ def __init__(self, initial_args=None, initial_res=None):
self.snapshots = {}
self.box_mapping = {}
+ if initial_args is not None:
+ for i in range(len(initial_args)):
+ self.box_mapping[initial_args[i]] = initial_res[i]
def get(self, box, default):
return self.box_mapping.get(box, default)
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
@@ -285,6 +285,9 @@
def getfloatstorage(self):
return self.value
+ def getfloat(self):
+ return longlong.getrealfloat(self.value)
+
getvalue = getfloatstorage
def _get_hash_(self):
diff --git a/rpython/jit/metainterp/inliner.py b/rpython/jit/metainterp/inliner.py
deleted file mode 100644
--- a/rpython/jit/metainterp/inliner.py
+++ /dev/null
@@ -1,57 +0,0 @@
-from rpython.jit.metainterp.history import Const
-from rpython.jit.metainterp.resume import Snapshot
-
-
-class Inliner(object):
- def __init__(self, inputargs, jump_args):
- assert len(inputargs) == len(jump_args)
- self.argmap = {}
- for i in range(len(inputargs)):
- if inputargs[i] in self.argmap:
- assert self.argmap[inputargs[i]] == jump_args[i]
- else:
- self.argmap[inputargs[i]] = jump_args[i]
- self.snapshot_map = {None: None}
-
- def inline_op(self, newop, ignore_result=False, clone=True,
- ignore_failargs=False):
- if clone:
- newop = newop.clone()
- args = newop.getarglist()
- newop.initarglist([self.inline_arg(a) for a in args])
-
- if newop.is_guard():
- args = newop.getfailargs()
- if args and not ignore_failargs:
- newop.setfailargs([self.inline_arg(a) for a in args])
- else:
- newop.setfailargs([])
-
- if newop.result and not ignore_result:
- old_result = newop.result
- newop.result = newop.result.clonebox()
- self.argmap[old_result] = newop.result
-
- self.inline_descr_inplace(newop.getdescr())
-
- return newop
-
- def inline_descr_inplace(self, descr):
- from rpython.jit.metainterp.compile import ResumeGuardDescr
- if isinstance(descr, ResumeGuardDescr):
- descr.rd_snapshot = self.inline_snapshot(descr.rd_snapshot)
-
- def inline_arg(self, arg):
- if arg is None:
- return None
- if isinstance(arg, Const):
- return arg
- return self.argmap[arg]
-
- def inline_snapshot(self, snapshot):
- if snapshot in self.snapshot_map:
- return self.snapshot_map[snapshot]
- boxes = [self.inline_arg(a) for a in snapshot.boxes]
- new_snapshot = Snapshot(self.inline_snapshot(snapshot.prev), boxes)
- self.snapshot_map[snapshot] = new_snapshot
- return new_snapshot
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
@@ -579,11 +579,11 @@
self.emit_operation(op)
def optimize_CAST_PTR_TO_INT(self, op):
- self.pure(rop.CAST_INT_TO_PTR, [op.result], op.getarg(0))
+ self.pure(rop.CAST_INT_TO_PTR, [op], op.getarg(0))
self.emit_operation(op)
def optimize_CAST_INT_TO_PTR(self, op):
- self.pure(rop.CAST_PTR_TO_INT, [op.result], op.getarg(0))
+ self.pure(rop.CAST_PTR_TO_INT, [op], op.getarg(0))
self.emit_operation(op)
def optimize_SAME_AS_i(self, op):
diff --git a/rpython/jit/metainterp/optimizeopt/test/test_optimizebasic.py b/rpython/jit/metainterp/optimizeopt/test/test_optimizebasic.py
--- a/rpython/jit/metainterp/optimizeopt/test/test_optimizebasic.py
+++ b/rpython/jit/metainterp/optimizeopt/test/test_optimizebasic.py
@@ -219,14 +219,14 @@
ops = """
[i0]
p0 = new_with_vtable(ConstClass(node_vtable))
- escape(p0)
+ escape_n(p0)
guard_class(p0, ConstClass(node_vtable)) []
jump(i0)
"""
expected = """
[i0]
p0 = new_with_vtable(ConstClass(node_vtable))
- escape(p0)
+ escape_n(p0)
jump(i0)
"""
self.optimize_loop(ops, expected)
@@ -315,19 +315,19 @@
def test_remove_consecutive_guard_value_constfold(self):
ops = """
[]
- i0 = escape()
+ i0 = escape_i()
guard_value(i0, 0) []
i1 = int_add(i0, 1)
guard_value(i1, 1) []
i2 = int_add(i1, 2)
- escape(i2)
+ escape_n(i2)
jump()
"""
expected = """
[]
- i0 = escape()
+ i0 = escape_i()
guard_value(i0, 0) []
- escape(3)
+ escape_n(3)
jump()
"""
self.optimize_loop(ops, expected)
@@ -428,14 +428,14 @@
def test_ooisnull_on_null_ptr_1(self):
ops = """
[]
- p0 = escape()
+ p0 = escape_r()
guard_isnull(p0) []
guard_isnull(p0) []
jump()
"""
expected = """
[]
- p0 = escape()
+ p0 = escape_r()
guard_isnull(p0) []
jump()
"""
@@ -517,7 +517,7 @@
def test_constptr_guard_value(self):
ops = """
[]
- p1 = escape()
+ p1 = escape_r()
guard_value(p1, ConstPtr(myptr)) []
jump()
"""
@@ -592,7 +592,7 @@
ops = """
[i1, p2, p3]
i3 = getfield_gc_i(p3, descr=valuedescr)
- escape(i3)
+ escape_n(i3)
p1 = new_with_vtable(ConstClass(node_vtable))
setfield_gc(p1, i1, descr=valuedescr)
jump(i1, p1, p2)
@@ -604,7 +604,7 @@
ops = """
[i1, p2, p3]
i3 = getfield_gc_i(p3, descr=valuedescr)
- escape(i3)
+ escape_n(i3)
p1 = new_with_vtable(ConstClass(node_vtable))
p1sub = new_with_vtable(ConstClass(node_vtable2))
setfield_gc(p1sub, i1, descr=valuedescr)
@@ -621,7 +621,7 @@
[i1, p2, p3]
p3sub = getfield_gc_r(p3, descr=nextdescr)
i3 = getfield_gc_i(p3sub, descr=valuedescr)
- escape(i3)
+ escape_n(i3)
p1 = new_with_vtable(ConstClass(node_vtable))
p2sub = new_with_vtable(ConstClass(node_vtable2))
setfield_gc(p2sub, i1, descr=valuedescr)
@@ -974,7 +974,7 @@
f2 = getinteriorfield_gc_f(p0, 0, descr=complexrealdescr)
f3 = getinteriorfield_gc_f(p0, 0, descr=compleximagdescr)
f4 = float_mul(f2, f3)
- i0 = escape(f4, p0)
+ i0 = escape_i(f4, p0)
finish(i0)
"""
expected = """
@@ -983,7 +983,7 @@
p0 = new_array_clear(1, descr=complexarraydescr)
setinteriorfield_gc(p0, 0, f1, descr=compleximagdescr)
setinteriorfield_gc(p0, 0, f0, descr=complexrealdescr)
- i0 = escape(f2, p0)
+ i0 = escape_i(f2, p0)
finish(i0)
"""
self.optimize_loop(ops, expected)
@@ -1008,8 +1008,8 @@
setfield_gc(p1, i, descr=valuedescr)
i0 = getfield_gc_i(p1, descr=valuedescr)
i1 = int_add(i0, 1)
- escape(p1)
- escape(p1)
+ escape_n(p1)
+ escape_n(p1)
jump(i1)
"""
expected = """
@@ -1017,8 +1017,8 @@
i1 = int_add(i, 1)
p1 = new_with_vtable(ConstClass(node_vtable))
setfield_gc(p1, i, descr=valuedescr)
- escape(p1)
- escape(p1)
+ escape_n(p1)
+ escape_n(p1)
jump(i1)
"""
self.optimize_loop(ops, expected)
@@ -1027,7 +1027,7 @@
ops = """
[i, p0]
i0 = getfield_gc_i(p0, descr=valuedescr)
- escape(p0)
+ escape_n(p0)
i1 = int_add(i0, i)
p1 = new_with_vtable(ConstClass(node_vtable))
setfield_gc(p1, i1, descr=valuedescr)
@@ -1042,7 +1042,7 @@
p1 = new_with_vtable(ConstClass(node_vtable))
setfield_gc(p1, i, descr=valuedescr)
i1 = getfield_gc_i(p1, descr=valuedescr)
- escape(p1)
+ escape_n(p1)
i2 = getfield_gc_i(p1, descr=valuedescr)
i3 = int_add(i1, i2)
jump(i3)
@@ -1051,7 +1051,7 @@
[i]
p1 = new_with_vtable(ConstClass(node_vtable))
setfield_gc(p1, i, descr=valuedescr)
- escape(p1)
+ escape_n(p1)
i2 = getfield_gc_i(p1, descr=valuedescr)
i3 = int_add(i, i2)
jump(i3)
@@ -1065,7 +1065,7 @@
setfield_gc(p1, i, descr=valuedescr)
i1 = getfield_gc_i(p1, descr=valuedescr)
setfield_gc(p1, 0, descr=valuedescr)
- escape(p1)
+ escape_n(p1)
i2 = getfield_gc_i(p1, descr=valuedescr)
jump(i2)
"""
@@ -1073,7 +1073,7 @@
[i]
p1 = new_with_vtable(ConstClass(node_vtable))
setfield_gc(p1, 0, descr=valuedescr)
- escape(p1)
+ escape_n(p1)
i2 = getfield_gc_i(p1, descr=valuedescr)
jump(i2)
"""
@@ -1185,7 +1185,7 @@
p1 = new_array(5, descr=arraydescr)
setarrayitem_gc(p1, 0, i1, descr=arraydescr)
setarrayitem_gc(p1, 1, 0, descr=arraydescr)
- escape(p1)
+ escape_n(p1)
jump(i1)
"""
expected = """
@@ -1193,7 +1193,7 @@
p1 = new_array(5, descr=arraydescr)
setarrayitem_gc(p1, 0, i1, descr=arraydescr)
setarrayitem_gc(p1, 1, 0, descr=arraydescr)
- escape(p1)
+ escape_n(p1)
jump(i1)
"""
self.optimize_loop(ops, expected)
@@ -1223,7 +1223,7 @@
ops = """
[i1, p2, p3]
i3 = getarrayitem_gc_i(p3, 0, descr=arraydescr)
- escape(i3)
+ escape_n(i3)
p1 = new_array(1, descr=arraydescr)
setarrayitem_gc(p1, 0, i1, descr=arraydescr)
jump(i1, p1, p2)
@@ -1238,17 +1238,17 @@
setfield_gc(p2, 3, descr=valuedescr)
i1 = getfield_gc_i(p2, descr=valuedescr) # i1 = const 3
p1 = new_array(i1, descr=arraydescr)
- escape(p1)
+ escape_n(p1)
i2 = arraylen_gc(p1)
- escape(i2)
+ escape_n(i2)
jump()
"""
expected = """
[]
p1 = new_array(3, descr=arraydescr)
- escape(p1)
+ escape_n(p1)
i2 = arraylen_gc(p1)
- escape(i2)
+ escape_n(i2)
jump()
"""
self.optimize_loop(ops, expected)
@@ -1257,14 +1257,14 @@
ops = """
[i1, p2]
i2 = getfield_gc(p2, descr=adescr)
- escape(i2)
+ escape_n(i2)
p3 = new(descr=ssize)
setfield_gc(p3, i1, descr=adescr)
jump(i1, p3)
"""
expected = """
[i1, i2]
- escape(i2)
+ escape_n(i2)
jump(i1, i1)
"""
py.test.skip("XXX")
@@ -1274,7 +1274,7 @@
ops = """
[i1, p2, p3]
i3 = getfield_gc_i(p3, descr=adescr)
- escape(i3)
+ escape_n(i3)
p1 = new(descr=ssize)
setfield_gc(p1, i1, descr=adescr)
jump(i1, p1, p2)
@@ -1289,20 +1289,20 @@
i2 = getfield_gc_i(p2, descr=valuedescr)
i3 = getfield_gc_i(p1, descr=valuedescr)
i4 = getfield_gc_i(p2, descr=valuedescr)
- escape(i1)
- escape(i2)
- escape(i3)
- escape(i4)
+ escape_n(i1)
+ escape_n(i2)
+ escape_n(i3)
+ escape_n(i4)
jump(p1, p2)
"""
expected = """
[p1, p2]
i1 = getfield_gc_i(p1, descr=valuedescr)
i2 = getfield_gc_i(p2, descr=valuedescr)
- escape(i1)
- escape(i2)
- escape(i1)
- escape(i2)
+ escape_n(i1)
+ escape_n(i2)
+ escape_n(i1)
+ escape_n(i2)
jump(p1, p2)
"""
self.optimize_loop(ops, expected)
@@ -1312,13 +1312,13 @@
[p1, i1]
setfield_gc(p1, i1, descr=valuedescr)
i2 = getfield_gc_i(p1, descr=valuedescr)
- escape(i2)
+ escape_n(i2)
jump(p1, i1)
"""
expected = """
[p1, i1]
setfield_gc(p1, i1, descr=valuedescr)
- escape(i1)
+ escape_n(i1)
jump(p1, i1)
"""
self.optimize_loop(ops, expected)
@@ -1329,14 +1329,14 @@
setfield_gc(p1, i1, descr=valuedescr)
setfield_gc(p2, p1, descr=nextdescr)
i2 = getfield_gc_i(p1, descr=valuedescr)
- escape(i2)
+ escape_n(i2)
jump(p1, p2, i1)
"""
expected = """
[p1, p2, i1]
setfield_gc(p1, i1, descr=valuedescr)
setfield_gc(p2, p1, descr=nextdescr)
- escape(i1)
+ escape_n(i1)
jump(p1, p2, i1)
"""
self.optimize_loop(ops, expected)
@@ -1347,7 +1347,7 @@
setfield_gc(p1, i1, descr=valuedescr)
setfield_gc(p2, i2, descr=valuedescr)
i3 = getfield_gc_i(p1, descr=valuedescr)
- escape(i3)
+ escape_n(i3)
jump(p1, p2, i1, i3)
"""
self.optimize_loop(ops, ops)
@@ -1358,16 +1358,16 @@
i1 = getfield_gc_i(p1, descr=valuedescr)
debug_merge_point(15, 0)
i2 = getfield_gc_i(p1, descr=valuedescr)
- escape(i1)
- escape(i2)
+ escape_n(i1)
+ escape_n(i2)
jump(p1)
"""
expected = """
[p1]
i1 = getfield_gc_i(p1, descr=valuedescr)
debug_merge_point(15, 0)
- escape(i1)
- escape(i1)
+ escape_n(i1)
+ escape_n(i1)
jump(p1)
"""
self.optimize_loop(ops, expected)
@@ -1379,8 +1379,8 @@
i2 = int_add_ovf(i1, 14)
guard_no_overflow() []
i3 = getfield_gc_i(p1, descr=valuedescr)
- escape(i2)
- escape(i3)
+ escape_n(i2)
+ escape_n(i3)
jump(p1)
"""
expected = """
@@ -1388,8 +1388,8 @@
i1 = getfield_gc_i(p1, descr=valuedescr)
i2 = int_add_ovf(i1, 14)
guard_no_overflow() []
- escape(i2)
- escape(i1)
+ escape_n(i2)
+ escape_n(i1)
jump(p1)
"""
self.optimize_loop(ops, expected)
@@ -1400,16 +1400,16 @@
i1 = getfield_gc_i(p1, descr=valuedescr)
setarrayitem_gc(p2, 0, p1, descr=arraydescr2)
i3 = getfield_gc_i(p1, descr=valuedescr)
- escape(i1)
- escape(i3)
+ escape_n(i1)
+ escape_n(i3)
jump(p1, p2)
"""
expected = """
[p1, p2]
i1 = getfield_gc_i(p1, descr=valuedescr)
setarrayitem_gc(p2, 0, p1, descr=arraydescr2)
- escape(i1)
- escape(i1)
+ escape_n(i1)
+ escape_n(i1)
jump(p1, p2)
"""
self.optimize_loop(ops, expected)
@@ -1419,15 +1419,15 @@
[]
i1 = getfield_gc_i(ConstPtr(myptr), descr=valuedescr)
i2 = getfield_gc_i(ConstPtr(myptr), descr=valuedescr)
- escape(i1)
- escape(i2)
+ escape_n(i1)
+ escape_n(i2)
jump()
"""
expected = """
[]
i1 = getfield_gc_i(ConstPtr(myptr), descr=valuedescr)
- escape(i1)
- escape(i1)
+ escape_n(i1)
+ escape_n(i1)
jump()
"""
self.optimize_loop(ops, expected)
@@ -1438,15 +1438,15 @@
guard_value(p1, ConstPtr(myptr)) []
i1 = getfield_gc_i(p1, descr=valuedescr)
i2 = getfield_gc_i(ConstPtr(myptr), descr=valuedescr)
- escape(i1)
- escape(i2)
+ escape_n(i1)
+ escape_n(i2)
jump(p1)
"""
expected = """
[]
i1 = getfield_gc_i(ConstPtr(myptr), descr=valuedescr)
- escape(i1)
- escape(i1)
+ escape_n(i1)
+ escape_n(i1)
jump()
"""
py.test.skip("XXX")
@@ -1456,10 +1456,10 @@
ops = """
[p1]
i1 = getfield_gc_i(p1, descr=valuedescr)
- escape()
+ escape_n()
i2 = getfield_gc_i(p1, descr=valuedescr)
- escape(i1)
- escape(i2)
+ escape_n(i1)
+ escape_n(i2)
jump(p1)
"""
self.optimize_loop(ops, ops)
@@ -1468,9 +1468,9 @@
ops = """
[p1, i1]
setfield_gc(p1, i1, descr=valuedescr)
- escape()
+ escape_n()
i2 = getfield_gc_i(p1, descr=valuedescr)
- escape(i2)
+ escape_n(i2)
jump(p1, i1)
"""
self.optimize_loop(ops, ops)
@@ -1495,13 +1495,13 @@
setfield_gc(p1, i1, descr=valuedescr)
i2 = getfield_gc_i(p1, descr=valuedescr)
setfield_gc(p1, i3, descr=valuedescr)
- escape(i2)
+ escape_n(i2)
jump(p1, i1, i3)
"""
expected = """
[p1, i1, i3]
setfield_gc(p1, i3, descr=valuedescr)
- escape(i1)
+ escape_n(i1)
jump(p1, i1, i3)
"""
self.optimize_loop(ops, expected)
@@ -1512,7 +1512,7 @@
setfield_gc(p1, i1, descr=valuedescr)
i2 = getfield_gc_i(p2, descr=valuedescr)
setfield_gc(p1, i3, descr=valuedescr)
- escape(i2)
+ escape_n(i2)
jump(p1, p2, i1, i3)
"""
# potential aliasing of p1 and p2 means that we cannot kill the
@@ -1558,14 +1558,14 @@
p2 = getfield_gc_r(p0, descr=nextdescr)
i2 = getfield_gc_i(p2, descr=valuedescr)
setfield_gc(p0, NULL, descr=nextdescr)
- escape(i2)
+ escape_n(i2)
jump(p0, i1)
"""
expected = """
[p0, i1]
setfield_raw(i1, i1, descr=valuedescr)
setfield_gc(p0, NULL, descr=nextdescr)
- escape(i1)
+ escape_n(i1)
jump(p0, i1)
"""
self.optimize_loop(ops, expected)
@@ -1574,7 +1574,7 @@
ops = """
[p1, i1, i2]
setfield_gc(p1, i1, descr=valuedescr)
- escape()
+ escape_n()
setfield_gc(p1, i2, descr=valuedescr)
jump(p1, i1, i2)
"""
@@ -1691,20 +1691,20 @@
p3 = getarrayitem_gc_r(p1, 1, descr=arraydescr2)
p4 = getarrayitem_gc_r(p1, 0, descr=arraydescr2)
p5 = getarrayitem_gc_r(p1, 1, descr=arraydescr2)
- escape(p2)
- escape(p3)
- escape(p4)
- escape(p5)
+ escape_n(p2)
+ escape_n(p3)
+ escape_n(p4)
+ escape_n(p5)
jump(p1)
"""
expected = """
[p1]
p2 = getarrayitem_gc_r(p1, 0, descr=arraydescr2)
p3 = getarrayitem_gc_r(p1, 1, descr=arraydescr2)
- escape(p2)
- escape(p3)
- escape(p2)
- escape(p3)
+ escape_n(p2)
+ escape_n(p3)
+ escape_n(p2)
+ escape_n(p3)
jump(p1)
"""
self.optimize_loop(ops, expected)
@@ -1714,13 +1714,13 @@
[p1, p2]
setarrayitem_gc(p1, 0, p2, descr=arraydescr2)
p3 = getarrayitem_gc_r(p1, 0, descr=arraydescr2)
- escape(p3)
+ escape_n(p3)
jump(p1, p3)
"""
expected = """
[p1, p2]
setarrayitem_gc(p1, 0, p2, descr=arraydescr2)
- escape(p2)
+ escape_n(p2)
jump(p1, p2)
"""
self.optimize_loop(ops, expected)
@@ -1733,8 +1733,8 @@
setarrayitem_gc(p1, i1, p3, descr=arraydescr2)
p4 = getarrayitem_gc(p1, 0, descr=arraydescr2)
p5 = getarrayitem_gc(p1, i1, descr=arraydescr2)
- escape(p4)
- escape(p5)
+ escape_n(p4)
+ escape_n(p5)
jump(p1, p2, p3, i1)
"""
expected = """
@@ -1742,8 +1742,8 @@
setarrayitem_gc(p1, 0, p2, descr=arraydescr2)
setarrayitem_gc(p1, i1, p3, descr=arraydescr2)
p4 = getarrayitem_gc(p1, 0, descr=arraydescr2)
- escape(p4)
- escape(p3)
+ escape_n(p4)
+ escape_n(p3)
jump(p1, p2, p3, i1)
"""
self.optimize_loop(ops, expected)
@@ -1757,9 +1757,9 @@
p5 = getarrayitem_gc_r(p1, i1, descr=arraydescr2)
p6 = getarrayitem_gc_r(p1, 0, descr=arraydescr2)
p7 = getarrayitem_gc_r(p1, 1, descr=arraydescr2)
- escape(p5)
- escape(p6)
- escape(p7)
+ escape_n(p5)
+ escape_n(p6)
+ escape_n(p7)
jump(p1, p2, p3, p4, i1)
"""
expected = """
@@ -1768,9 +1768,9 @@
setarrayitem_gc(p1, 0, p3, descr=arraydescr2)
setarrayitem_gc(p1, 1, p4, descr=arraydescr2)
p5 = getarrayitem_gc_r(p1, i1, descr=arraydescr2)
- escape(p5)
- escape(p3)
- escape(p4)
+ escape_n(p5)
+ escape_n(p3)
+ escape_n(p4)
jump(p1, p2, p3, p4, i1)
"""
self.optimize_loop(ops, expected)
@@ -1781,17 +1781,17 @@
p3 = getarrayitem_gc_r(p1, 0, descr=arraydescr2)
i4 = getfield_gc_pure_i(ConstPtr(myptr), descr=valuedescr)
p5 = getarrayitem_gc_r(p1, 0, descr=arraydescr2)
- escape(p3)
- escape(i4)
- escape(p5)
+ escape_n(p3)
+ escape_n(i4)
+ escape_n(p5)
jump(p1, p2)
"""
expected = """
[p1, p2]
p3 = getarrayitem_gc_r(p1, 0, descr=arraydescr2)
- escape(p3)
- escape(5)
- escape(p3)
+ escape_n(p3)
+ escape_n(5)
+ escape_n(p3)
jump(p1, p2)
"""
self.optimize_loop(ops, expected)
@@ -1803,16 +1803,16 @@
setarrayitem_gc(p2, 1, p4, descr=arraydescr2)
p5 = getarrayitem_gc_r(p1, 0, descr=arraydescr2)
p6 = getarrayitem_gc_r(p2, 1, descr=arraydescr2)
- escape(p5)
- escape(p6)
+ escape_n(p5)
+ escape_n(p6)
jump(p1, p2, p3, p4, i1)
"""
expected = """
[p1, p2, p3, p4, i1]
setarrayitem_gc(p1, 0, p3, descr=arraydescr2)
setarrayitem_gc(p2, 1, p4, descr=arraydescr2)
- escape(p3)
- escape(p4)
+ escape_n(p3)
+ escape_n(p4)
jump(p1, p2, p3, p4, i1)
"""
self.optimize_loop(ops, expected)
@@ -1864,19 +1864,19 @@
[i0, p1]
p4 = getfield_gc_r(p1, descr=nextdescr)
guard_nonnull(p4) []
- escape(p4)
+ escape_n(p4)
#
p2 = new_with_vtable(ConstClass(node_vtable))
- p3 = escape()
+ p3 = escape_r()
setfield_gc(p2, p3, descr=nextdescr)
jump(i0, p2)
"""
expected = """
[i0, p4]
guard_nonnull(p4) []
- escape(p4)
+ escape_n(p4)
#
- p3 = escape()
+ p3 = escape_r()
jump(i0, p3)
"""
py.test.skip("XXX")
@@ -1888,19 +1888,19 @@
[i0, p1]
p4 = getarrayitem_gc(p1, 0, descr=arraydescr2)
guard_nonnull(p4) []
- escape(p4)
+ escape_n(p4)
#
p2 = new_array(1, descr=arraydescr2)
- p3 = escape()
+ p3 = escape_r()
setarrayitem_gc(p2, 0, p3, descr=arraydescr2)
jump(i0, p2)
"""
expected = """
[i0, p4]
guard_nonnull(p4) []
- escape(p4)
+ escape_n(p4)
#
- p3 = escape()
+ p3 = escape_r()
jump(i0, p3)
"""
py.test.skip("XXX")
@@ -1922,7 +1922,7 @@
p1a = new_with_vtable(ConstClass(node_vtable2))
p2a = new_with_vtable(ConstClass(node_vtable))
p3a = new_with_vtable(ConstClass(node_vtable))
- escape(p3a)
+ escape_n(p3a)
setfield_gc(p1a, p2a, descr=nextdescr)
setfield_gc(p1a, p3a, descr=otherdescr)
jump(p1a)
@@ -1933,7 +1933,7 @@
guard_class(p3, ConstClass(node_vtable)) []
setfield_gc(p3, p2, descr=otherdescr)
p3a = new_with_vtable(ConstClass(node_vtable))
- escape(p3a)
+ escape_n(p3a)
p2a = new_with_vtable(ConstClass(node_vtable))
jump(p2a, p3a)
"""
@@ -1955,7 +1955,7 @@
p2a = new_with_vtable(ConstClass(node_vtable))
setfield_gc(p3, p2a, descr=otherdescr)
p3a = new_with_vtable(ConstClass(node_vtable))
- escape(p3a)
+ escape_n(p3a)
setfield_gc(p1a, p2a, descr=nextdescr)
setfield_gc(p1a, p3a, descr=otherdescr)
jump(p1a)
@@ -1967,7 +1967,7 @@
p2a = new_with_vtable(ConstClass(node_vtable))
setfield_gc(p3, p2a, descr=otherdescr)
p3a = new_with_vtable(ConstClass(node_vtable))
- escape(p3a)
+ escape_n(p3a)
jump(p2a, p3a)
"""
py.test.skip("XXX")
@@ -1992,7 +1992,7 @@
guard_class(p1, ConstClass(node_vtable2)) []
#
p2 = new_with_vtable(ConstClass(node_vtable))
- escape(p2) # prevent it from staying Virtual
+ escape_n(p2) # prevent it from staying Virtual
jump(p2)
"""
py.test.raises(InvalidLoop, self.optimize_loop,
@@ -2128,8 +2128,8 @@
i4 = int_add(i2, 1)
i4b = int_is_true(i4)
guard_true(i4b) []
- escape(i3)
- escape(i4)
+ escape_n(i3)
+ escape_n(i4)
guard_true(i1) []
guard_true(i2) []
jump(p1, p2)
@@ -2140,8 +2140,8 @@
i3 = int_add(i1, 1)
i3b = int_is_true(i3)
guard_true(i3b) []
- escape(i3)
- escape(i3)
+ escape_n(i3)
+ escape_n(i3)
guard_true(i1) []
jump(p1, p2)
"""
@@ -2178,8 +2178,8 @@
guard_no_overflow() []
i4b = int_is_true(i4)
guard_true(i4b) []
- escape(i3)
- escape(i4)
+ escape_n(i3)
+ escape_n(i4)
jump(i1)
"""
expected = """
@@ -2188,8 +2188,8 @@
guard_no_overflow() []
i3b = int_is_true(i3)
guard_true(i3b) []
- escape(i3)
- escape(i3)
+ escape_n(i3)
+ escape_n(i3)
jump(i1)
"""
self.optimize_loop(ops, expected)
@@ -2295,12 +2295,12 @@
ops = """
[f0]
f1 = float_mul(f0, 1.0)
- f2 = escape(f1)
+ f2 = escape_f(f1)
jump(f2)
"""
expected = """
[f0]
- f2 = escape(f0)
+ f2 = escape_f(f0)
jump(f2)
"""
self.optimize_loop(ops, expected)
@@ -2308,12 +2308,12 @@
ops = """
[f0]
f1 = float_mul(1.0, f0)
- f2 = escape(f1)
+ f2 = escape_f(f1)
jump(f2)
"""
expected = """
[f0]
- f2 = escape(f0)
+ f2 = escape_f(f0)
jump(f2)
"""
self.optimize_loop(ops, expected)
@@ -2322,13 +2322,13 @@
ops = """
[f0]
f1 = float_mul(f0, -1.0)
- f2 = escape(f1)
+ f2 = escape_f(f1)
jump(f2)
"""
expected = """
[f0]
f1 = float_neg(f0)
- f2 = escape(f1)
+ f2 = escape_f(f1)
jump(f2)
"""
self.optimize_loop(ops, expected)
@@ -2336,13 +2336,13 @@
ops = """
[f0]
f1 = float_mul(-1.0, f0)
- f2 = escape(f1)
+ f2 = escape_f(f1)
jump(f2)
"""
expected = """
[f0]
f1 = float_neg(f0)
- f2 = escape(f1)
+ f2 = escape_f(f1)
jump(f2)
"""
self.optimize_loop(ops, expected)
@@ -2354,14 +2354,14 @@
f2 = float_neg(f1)
f3 = float_neg(f2)
f4 = float_neg(f3)
- escape(f4)
+ escape_n(f4)
jump(f4)
"""
expected = """
[f0]
# The backend removes this dead op.
f1 = float_neg(f0)
- escape(f0)
+ escape_n(f0)
jump(f0)
"""
self.optimize_loop(ops, expected)
@@ -2373,7 +2373,7 @@
f2 = float_truediv(f1, 3.0)
f3 = float_truediv(f2, -0.25)
f4 = float_truediv(f3, 0.0)
- f5 = escape(f4)
+ f5 = escape_f(f4)
jump(f5)
"""
@@ -2383,7 +2383,7 @@
f2 = float_truediv(f1, 3.0)
f3 = float_mul(f2, -4.0)
f4 = float_truediv(f3, 0.0)
- f5 = escape(f4)
+ f5 = escape_f(f4)
jump(f5)
"""
self.optimize_loop(ops, expected)
@@ -2770,16 +2770,16 @@
i1 = getfield_gc_i(p1, descr=valuedescr)
i2 = call_i(i1, descr=nonwritedescr)
i3 = getfield_gc_i(p1, descr=valuedescr)
- escape(i1)
- escape(i3)
+ escape_n(i1)
+ escape_n(i3)
jump(p1, p2)
"""
expected = """
[p1, p2]
i1 = getfield_gc_i(p1, descr=valuedescr)
i2 = call_i(i1, descr=nonwritedescr)
- escape(i1)
- escape(i1)
+ escape_n(i1)
+ escape_n(i1)
jump(p1, p2)
"""
self.optimize_loop(ops, expected)
@@ -2792,10 +2792,10 @@
i3 = call_i(i1, descr=writeadescr)
i4 = getfield_gc_i(p1, descr=adescr)
i5 = getfield_gc_i(p1, descr=bdescr)
- escape(i1)
- escape(i2)
- escape(i4)
- escape(i5)
+ escape_n(i1)
+ escape_n(i2)
+ escape_n(i4)
+ escape_n(i5)
jump(p1, p2)
"""
expected = """
@@ -2804,10 +2804,10 @@
i2 = getfield_gc_i(p1, descr=bdescr)
i3 = call_i(i1, descr=writeadescr)
i4 = getfield_gc_i(p1, descr=adescr)
- escape(i1)
- escape(i2)
- escape(i4)
- escape(i2)
+ escape_n(i1)
+ escape_n(i2)
+ escape_n(i4)
+ escape_n(i2)
jump(p1, p2)
"""
self.optimize_loop(ops, expected)
@@ -2820,10 +2820,10 @@
i3 = call_i(i1, descr=writeadescr)
p5 = getarrayitem_gc_r(p1, 0, descr=arraydescr2)
p6 = getarrayitem_gc_r(p2, 1, descr=arraydescr2)
- escape(p3)
- escape(p4)
- escape(p5)
- escape(p6)
+ escape_n(p3)
+ escape_n(p4)
+ escape_n(p5)
+ escape_n(p6)
jump(p1, p2, i1)
"""
expected = """
@@ -2831,10 +2831,10 @@
p3 = getarrayitem_gc_r(p1, 0, descr=arraydescr2)
p4 = getarrayitem_gc_r(p2, 1, descr=arraydescr2)
i3 = call_i(i1, descr=writeadescr)
- escape(p3)
- escape(p4)
- escape(p3)
- escape(p4)
+ escape_n(p3)
+ escape_n(p4)
+ escape_n(p3)
+ escape_n(p4)
jump(p1, p2, i1)
"""
self.optimize_loop(ops, expected)
@@ -2849,12 +2849,12 @@
p5 = getarrayitem_gc_r(p2, 0, descr=arraydescr2)
p6 = getarrayitem_gc_r(p2, 1, descr=arraydescr2)
i4 = getarrayitem_gc_i(p1, 1, descr=arraydescr)
- escape(p3)
- escape(p4)
- escape(p5)
- escape(p6)
- escape(i2)
- escape(i4)
+ escape_n(p3)
+ escape_n(p4)
+ escape_n(p5)
+ escape_n(p6)
+ escape_n(i2)
+ escape_n(i4)
jump(p1, p2, i1)
"""
expected = """
@@ -2864,12 +2864,12 @@
i2 = getarrayitem_gc_i(p1, 1, descr=arraydescr)
i3 = call_i(i1, descr=writearraydescr)
i4 = getarrayitem_gc_i(p1, 1, descr=arraydescr)
- escape(p3)
- escape(p4)
- escape(p3)
- escape(p4)
- escape(i2)
- escape(i4)
+ escape_n(p3)
+ escape_n(p4)
+ escape_n(p3)
+ escape_n(p4)
+ escape_n(i2)
+ escape_n(i4)
jump(p1, p2, i1)
"""
self.optimize_loop(ops, expected)
@@ -2964,16 +2964,16 @@
call_pure_results = {tuple(arg_consts): ConstInt(42)}
ops = '''
[i0, i1, i2]
- escape(i1)
- escape(i2)
+ escape_n(i1)
+ escape_n(i2)
i3 = call_pure_i(123456, 4, 5, 6, descr=plaincalldescr)
i4 = call_pure_i(123456, 4, i0, 6, descr=plaincalldescr)
jump(i0, i3, i4)
'''
expected = '''
[i0, i1, i2]
- escape(i1)
- escape(i2)
+ escape_n(i1)
+ escape_n(i2)
i4 = call_i(123456, 4, i0, 6, descr=plaincalldescr)
jump(i0, 42, i4)
'''
@@ -2997,7 +2997,7 @@
ops = """
[p1]
p2 = virtual_ref(p1, 5)
- escape(p2)
+ escape_n(p2)
virtual_ref_finish(p2, p1)
jump(p1)
"""
@@ -3007,7 +3007,7 @@
p2 = new_with_vtable(ConstClass(jit_virtual_ref_vtable))
setfield_gc(p2, NULL, descr=virtualforceddescr)
setfield_gc(p2, p0, descr=virtualtokendescr)
- escape(p2)
+ escape_n(p2)
setfield_gc(p2, p1, descr=virtualforceddescr)
setfield_gc(p2, NULL, descr=virtualtokendescr)
jump(p1)
@@ -3146,7 +3146,7 @@
[i1]
p1 = new_with_vtable(ConstClass(node_vtable))
p2 = virtual_ref(p1, 7)
- escape(p2)
+ escape_n(p2)
virtual_ref_finish(p2, p1)
call_may_force_n(i1, descr=mayforcevirtdescr)
guard_not_forced() []
@@ -3158,7 +3158,7 @@
p2 = new_with_vtable(ConstClass(jit_virtual_ref_vtable))
setfield_gc(p2, NULL, descr=virtualforceddescr)
setfield_gc(p2, p3, descr=virtualtokendescr)
- escape(p2)
+ escape_n(p2)
p1 = new_with_vtable(ConstClass(node_vtable))
setfield_gc(p2, p1, descr=virtualforceddescr)
setfield_gc(p2, NULL, descr=virtualtokendescr)
@@ -3172,7 +3172,7 @@
ops = """
[i1, p1]
p2 = virtual_ref(p1, 23)
- escape(p2)
+ escape_n(p2)
virtual_ref_finish(p2, p1)
call_may_force_n(i1, descr=mayforcevirtdescr)
guard_not_forced() [i1]
@@ -3184,7 +3184,7 @@
p2 = new_with_vtable(ConstClass(jit_virtual_ref_vtable))
setfield_gc(p2, NULL, descr=virtualforceddescr)
setfield_gc(p2, p3, descr=virtualtokendescr)
- escape(p2)
+ escape_n(p2)
setfield_gc(p2, p1, descr=virtualforceddescr)
setfield_gc(p2, NULL, descr=virtualtokendescr)
call_may_force_n(i1, descr=mayforcevirtdescr)
@@ -4235,12 +4235,12 @@
p1 = same_as_r(s"ab")
p2 = same_as_r(s"cde")
p3 = call_r(0, p1, p2, descr=strconcatdescr)
- escape(p3)
+ escape_n(p3)
jump()
"""
expected = """
[]
- escape(s"abcde")
+ escape_n(s"abcde")
jump()
"""
self.optimize_strunicode_loop(ops, expected)
@@ -4329,7 +4329,7 @@
[p1, i1, i2, i3]
p2 = call_r(0, p1, i1, i2, descr=strslicedescr)
i4 = strgetitem(p2, i3)
- escape(i4)
+ escape_n(i4)
jump(p1, i1, i2, i3)
"""
expected = """
@@ -4337,7 +4337,7 @@
i6 = int_sub(i2, i1) # killed by the backend
i5 = int_add(i1, i3)
i4 = strgetitem(p1, i5)
- escape(i4)
+ escape_n(i4)
jump(p1, i1, i2, i3)
"""
self.optimize_strunicode_loop(ops, expected)
@@ -4350,12 +4350,12 @@
strsetitem(p1, 1, i4)
p2 = call_r(0, p1, 1, 2, descr=strslicedescr)
i5 = strgetitem(p2, 0)
- escape(i5)
+ escape_n(i5)
jump(i3, i4)
"""
expected = """
[i3, i4]
- escape(i4)
+ escape_n(i4)
jump(i3, i4)
"""
self.optimize_strunicode_loop(ops, expected)
@@ -4416,7 +4416,7 @@
ops = """
[p1, p2]
i0 = call_i(0, p1, p2, descr=strequaldescr)
- escape(i0)
+ escape_n(i0)
jump(p1, p2)
"""
self.optimize_strunicode_loop_extradescrs(ops, ops)
@@ -4426,7 +4426,7 @@
[p1, p2, p3]
p4 = call_r(0, p1, p2, descr=strconcatdescr)
i0 = call_i(0, p3, p4, descr=strequaldescr)
- escape(i0)
+ escape_n(i0)
jump(p1, p2, p3)
"""
expected = """
@@ -4438,7 +4438,7 @@
copystrcontent(p1, p4, 0, 0, i1)
copystrcontent(p2, p4, 0, i1, i2)
i0 = call_i(0, p3, p4, descr=strequaldescr)
- escape(i0)
+ escape_n(i0)
jump(p1, p2, p3)
"""
self.optimize_strunicode_loop_extradescrs(ops, expected)
@@ -4448,14 +4448,14 @@
[p1, i1, i2, p3]
p4 = call_r(0, p1, i1, i2, descr=strslicedescr)
i0 = call_i(0, p4, p3, descr=strequaldescr)
- escape(i0)
+ escape_n(i0)
jump(p1, i1, i2, p3)
"""
expected = """
[p1, i1, i2, p3]
i3 = int_sub(i2, i1)
i0 = call_i(0, p1, i1, i3, p3, descr=streq_slice_checknull_descr)
- escape(i0)
+ escape_n(i0)
jump(p1, i1, i2, p3)
"""
self.optimize_strunicode_loop_extradescrs(ops, expected)
@@ -4465,14 +4465,14 @@
[p1, i1, i2, p3]
p4 = call_r(0, p1, i1, i2, descr=strslicedescr)
i0 = call_i(0, p3, p4, descr=strequaldescr)
- escape(i0)
+ escape_n(i0)
jump(p1, i1, i2, p3)
"""
expected = """
[p1, i1, i2, p3]
i4 = int_sub(i2, i1)
i0 = call_i(0, p1, i1, i4, p3, descr=streq_slice_checknull_descr)
- escape(i0)
+ escape_n(i0)
jump(p1, i1, i2, p3)
"""
self.optimize_strunicode_loop_extradescrs(ops, expected)
@@ -4483,7 +4483,7 @@
guard_nonnull(p3) []
p4 = call_r(0, p1, i1, i2, descr=strslicedescr)
i0 = call_i(0, p3, p4, descr=strequaldescr)
- escape(i0)
+ escape_n(i0)
jump(p1, i1, i2, p3)
"""
expected = """
@@ -4491,7 +4491,7 @@
guard_nonnull(p3) []
i4 = int_sub(i2, i1)
i0 = call_i(0, p1, i1, i4, p3, descr=streq_slice_nonnull_descr)
- escape(i0)
+ escape_n(i0)
jump(p1, i1, i2, p3)
"""
self.optimize_strunicode_loop_extradescrs(ops, expected)
@@ -4501,14 +4501,14 @@
[p1, i1, i2]
p3 = call_r(0, p1, i1, i2, descr=strslicedescr)
i0 = call_i(0, p3, s"x", descr=strequaldescr)
- escape(i0)
+ escape_n(i0)
jump(p1, i1, i2)
"""
expected = """
[p1, i1, i2]
i3 = int_sub(i2, i1)
i0 = call_i(0, p1, i1, i3, 120, descr=streq_slice_char_descr)
- escape(i0)
+ escape_n(i0)
jump(p1, i1, i2)
"""
self.optimize_strunicode_loop_extradescrs(ops, expected)
@@ -4520,14 +4520,14 @@
p5 = newstr(1)
strsetitem(p5, 0, i3)
i0 = call_i(0, p5, p4, descr=strequaldescr)
- escape(i0)
+ escape_n(i0)
jump(p1, i1, i2, i3)
"""
expected = """
[p1, i1, i2, i3]
i4 = int_sub(i2, i1)
i0 = call_i(0, p1, i1, i4, i3, descr=streq_slice_char_descr)
- escape(i0)
+ escape_n(i0)
jump(p1, i1, i2, i3)
"""
self.optimize_strunicode_loop_extradescrs(ops, expected)
@@ -4536,13 +4536,13 @@
ops = """
[p1]
i0 = call_i(0, p1, NULL, descr=strequaldescr)
- escape(i0)
+ escape_n(i0)
jump(p1)
"""
expected = """
[p1]
i0 = ptr_eq(p1, NULL)
- escape(i0)
+ escape_n(i0)
jump(p1)
"""
self.optimize_strunicode_loop_extradescrs(ops, expected)
@@ -4551,13 +4551,13 @@
ops = """
[p1]
i0 = call_i(0, NULL, p1, descr=strequaldescr)
- escape(i0)
+ escape_n(i0)
jump(p1)
"""
expected = """
[p1]
i0 = ptr_eq(p1, NULL)
- escape(i0)
+ escape_n(i0)
jump(p1)
"""
self.optimize_strunicode_loop_extradescrs(ops, expected)
@@ -4567,14 +4567,14 @@
[p1]
guard_nonnull(p1) []
i0 = call_i(0, p1, s"hello world", descr=strequaldescr)
- escape(i0)
+ escape_n(i0)
jump(p1)
"""
expected = """
[p1]
guard_nonnull(p1) []
i0 = call_i(0, p1, s"hello world", descr=streq_nonnull_descr)
- escape(i0)
+ escape_n(i0)
jump(p1)
"""
self.optimize_strunicode_loop_extradescrs(ops, expected)
@@ -4584,7 +4584,7 @@
[p1]
guard_nonnull(p1) []
i0 = call_i(0, p1, s"", descr=strequaldescr)
- escape(i0)
+ escape_n(i0)
jump(p1)
"""
expected = """
@@ -4592,7 +4592,7 @@
guard_nonnull(p1) []
i1 = strlen(p1)
i0 = int_eq(i1, 0)
- escape(i0)
+ escape_n(i0)
jump(p1)
"""
self.optimize_strunicode_loop_extradescrs(ops, expected)
@@ -4602,14 +4602,14 @@
[p1]
guard_nonnull(p1) []
i0 = call_i(0, p1, s"x", descr=strequaldescr)
- escape(i0)
+ escape_n(i0)
jump(p1)
"""
expected = """
[p1]
guard_nonnull(p1) []
i0 = call_i(0, p1, 120, descr=streq_nonnull_char_descr)
- escape(i0)
+ escape_n(i0)
jump(p1)
"""
self.optimize_strunicode_loop_extradescrs(ops, expected)
@@ -4619,7 +4619,7 @@
[p1, p2]
p4 = call_r(0, p1, p2, descr=strconcatdescr)
i0 = call_i(0, s"hello world", p4, descr=strequaldescr)
- escape(i0)
+ escape_n(i0)
jump(p1, p2)
"""
expected = """
@@ -4631,7 +4631,7 @@
copystrcontent(p1, p4, 0, 0, i1)
copystrcontent(p2, p4, 0, i1, i2)
i0 = call_i(0, s"hello world", p4, descr=streq_nonnull_descr)
- escape(i0)
+ escape_n(i0)
jump(p1, p2)
"""
self.optimize_strunicode_loop_extradescrs(ops, expected)
@@ -4641,12 +4641,12 @@
[i1]
p1 = newstr(0)
i0 = call_i(0, p1, s"", descr=strequaldescr)
- escape(i0)
+ escape_n(i0)
jump(i1)
"""
expected = """
[i1]
- escape(1)
+ escape_n(1)
jump(i1)
"""
self.optimize_strunicode_loop_extradescrs(ops, expected)
@@ -4657,13 +4657,13 @@
p1 = newstr(1)
strsetitem(p1, 0, i1)
i0 = call_i(0, p1, s"x", descr=strequaldescr)
- escape(i0)
+ escape_n(i0)
jump(i1)
"""
expected = """
[i1]
i0 = int_eq(i1, 120) # ord('x')
- escape(i0)
+ escape_n(i0)
jump(i1)
"""
self.optimize_strunicode_loop_extradescrs(ops, expected)
@@ -4675,7 +4675,7 @@
strsetitem(p1, 0, i1)
strsetitem(p1, 1, i2)
i0 = call_i(0, p1, s"xy", descr=strequaldescr)
- escape(i0)
+ escape_n(i0)
jump(i1, i2)
"""
expected = """
@@ -4684,7 +4684,7 @@
strsetitem(p1, 0, i1)
strsetitem(p1, 1, i2)
i0 = call_i(0, p1, s"xy", descr=streq_lengthok_descr)
- escape(i0)
+ escape_n(i0)
jump(i1, i2)
"""
self.optimize_strunicode_loop_extradescrs(ops, expected)
@@ -4693,13 +4693,13 @@
ops = """
[p1]
i0 = call_i(0, s"x", p1, descr=strequaldescr)
- escape(i0)
+ escape_n(i0)
jump(p1)
"""
expected = """
[p1]
i0 = call_i(0, p1, 120, descr=streq_checknull_char_descr)
- escape(i0)
+ escape_n(i0)
jump(p1)
"""
self.optimize_strunicode_loop_extradescrs(ops, expected)
@@ -4710,12 +4710,12 @@
p1 = newstr(1)
strsetitem(p1, 0, i1)
i0 = call_i(0, s"xy", p1, descr=strequaldescr)
- escape(i0)
+ escape_n(i0)
jump(i1)
"""
expected = """
[i1]
- escape(0)
+ escape_n(0)
jump(i1)
"""
self.optimize_strunicode_loop_extradescrs(ops, expected)
@@ -4724,12 +4724,12 @@
ops = """
[]
p0 = call_r(0, "xy", descr=s2u_descr) # string -> unicode
- escape(p0)
+ escape_n(p0)
jump()
"""
expected = """
[]
- escape(u"xy")
+ escape_n(u"xy")
jump()
"""
self.optimize_strunicode_loop_extradescrs(ops, expected)
@@ -4738,7 +4738,7 @@
ops = """
[p0]
p1 = call_r(0, p0, descr=s2u_descr) # string -> unicode
- escape(p1)
+ escape_n(p1)
jump(p1)
"""
self.optimize_strunicode_loop_extradescrs(ops, ops)
@@ -4753,13 +4753,13 @@
i2 = strgetitem(p0, i0)
i3 = int_eq(i1, i2)
guard_true(i3) []
- escape(i2)
+ escape_n(i2)
jump(p0, i0)
"""
expected = """
[p0, i0]
i1 = strgetitem(p0, i0)
- escape(i1)
+ escape_n(i1)
jump(p0, i0)
"""
self.optimize_strunicode_loop(ops, expected)
@@ -4788,7 +4788,7 @@
[p0, i0]
i1 = int_add(i0, 1)
p1 = call_r(0, p0, i0, i1, descr=strslicedescr)
- escape(p1)
+ escape_n(p1)
jump(p0, i1)
"""
expected = """
@@ -4797,7 +4797,7 @@
p1 = newstr(1)
i2 = strgetitem(p0, i0)
strsetitem(p1, 0, i2)
- escape(p1)
+ escape_n(p1)
jump(p0, i1)
"""
self.optimize_strunicode_loop(ops, expected)
@@ -4841,7 +4841,7 @@
ops = """
[i0]
p0 = newstr(i0)
- escape(p0)
+ escape_n(p0)
i1 = strlen(p0)
i2 = int_add(i1, 1)
jump(i2)
@@ -4849,7 +4849,7 @@
expected = """
[i0]
p0 = newstr(i0)
- escape(p0)
+ escape_n(p0)
i1 = int_add(i0, 1)
jump(i1)
"""
@@ -5009,8 +5009,8 @@
[i0, i1]
p0 = new(descr=ssize)
p1 = new(descr=ssize)
- escape(p0)
- escape(p1)
+ escape_n(p0)
+ escape_n(p1)
setfield_gc(p0, i0, descr=adescr)
setfield_gc(p1, i1, descr=adescr)
i2 = getfield_gc_i(p0, descr=adescr)
@@ -5019,9 +5019,9 @@
expected = """
[i0, i1]
p0 = new(descr=ssize)
- escape(p0)
+ escape_n(p0)
p1 = new(descr=ssize)
- escape(p1)
+ escape_n(p1)
setfield_gc(p0, i0, descr=adescr)
setfield_gc(p1, i1, descr=adescr)
jump(i0, i0)
@@ -5192,14 +5192,14 @@
p1 = newstr(1)
strsetitem(p1, 0, i0)
p2 = newstr(1)
- escape(p2)
+ escape_n(p2)
copystrcontent(p1, p2, 0, 0, 1)
finish()
"""
expected = """
[i0]
p2 = newstr(1)
- escape(p2)
+ escape_n(p2)
strsetitem(p2, 0, i0)
finish()
"""
diff --git a/rpython/jit/metainterp/optimizeopt/test/test_optimizeopt.py b/rpython/jit/metainterp/optimizeopt/test/test_optimizeopt.py
--- a/rpython/jit/metainterp/optimizeopt/test/test_optimizeopt.py
+++ b/rpython/jit/metainterp/optimizeopt/test/test_optimizeopt.py
@@ -1,14 +1,15 @@
import py
from rpython.rlib.objectmodel import instantiate
from rpython.jit.metainterp import compile, resume
-from rpython.jit.metainterp.history import AbstractDescr, ConstInt, BoxInt, TreeLoop
+from rpython.jit.metainterp.history import AbstractDescr, ConstInt, TreeLoop
from rpython.jit.metainterp.optimize import InvalidLoop
from rpython.jit.metainterp.optimizeopt import build_opt_chain
from rpython.jit.metainterp.optimizeopt.test.test_util import (
LLtypeMixin, BaseTest, convert_old_style_to_targets)
from rpython.jit.metainterp.optimizeopt.test.test_optimizebasic import \
FakeMetaInterpStaticData
-from rpython.jit.metainterp.resoperation import rop, opname, oparity
+from rpython.jit.metainterp.resoperation import rop, opname, oparity,\
+ InputArgInt
def test_build_opt_chain():
@@ -134,10 +135,10 @@
def test_simple(self):
ops = """
[]
- f = escape()
+ f = escape_f()
f0 = float_sub(f, 1.0)
guard_value(f0, 0.0) [f0]
- escape(f)
+ escape_n(f)
jump()
"""
self.optimize_loop(ops, ops)
@@ -178,9 +179,9 @@
self.optimize_loop(ops, expected)
def test_constfold_all(self):
- from rpython.jit.metainterp.executor import execute_nonspec
+ from rpython.jit.metainterp.executor import _execute_nonspec
import random
- for opnum in range(rop.INT_ADD, rop.SAME_AS+1):
+ for opnum in range(rop.INT_ADD, rop.SAME_AS_I+1):
try:
op = opname[opnum]
except KeyError:
@@ -193,15 +194,14 @@
ops = """
[]
i1 = %s(%s)
- escape(i1)
+ escape_n(i1)
jump()
""" % (op.lower(), ', '.join(map(str, args)))
- argboxes = [BoxInt(a) for a in args]
- expected_value = execute_nonspec(self.cpu, None, opnum,
- argboxes).getint()
+ argboxes = [InputArgInt(a) for a in args]
+ expected_value = _execute_nonspec(self.cpu, None, opnum, argboxes)
expected = """
[]
- escape(%d)
+ escape_n(%d)
jump()
""" % expected_value
self.optimize_loop(ops, expected)
diff --git a/rpython/jit/metainterp/optimizeopt/test/test_util.py b/rpython/jit/metainterp/optimizeopt/test/test_util.py
--- a/rpython/jit/metainterp/optimizeopt/test/test_util.py
+++ b/rpython/jit/metainterp/optimizeopt/test/test_util.py
@@ -18,7 +18,7 @@
from rpython.jit.metainterp.counter import DeterministicJitCounter
from rpython.config.translationoption import get_combined_translation_config
from rpython.jit.metainterp.resoperation import rop, ResOperation, InputArgRef
-from rpython.jit.metainterp.optimizeopt.unroll import Inliner
+
def test_sort_descrs():
class PseudoDescr(AbstractDescr):
@@ -343,9 +343,9 @@
op.setfailargs(boxes)
def __eq__(self, other):
return type(self) is type(other) # xxx obscure
- def clone_if_mutable(self):
+ def clone_if_mutable(self, memo):
res = Storage(self.metainterp_sd, self.original_greenkey)
- self.copy_all_attributes_into(res)
+ self.copy_all_attributes_into(res, memo)
return res
def _sortboxes(boxes):
@@ -367,7 +367,7 @@
def add_guard_future_condition(self, res):
# invent a GUARD_FUTURE_CONDITION to not have to change all tests
if res.operations[-1].getopnum() == rop.JUMP:
- guard = ResOperation(rop.GUARD_FUTURE_CONDITION, [], None, descr=self.invent_fail_descr(None, -1, []))
+ guard = ResOperation(rop.GUARD_FUTURE_CONDITION, [], descr=self.invent_fail_descr(None, -1, []))
res.operations.insert(-1, guard)
def invent_fail_descr(self, model, opnum, fail_args):
@@ -414,7 +414,10 @@
jump_args = jumpop.getarglist()[:]
operations = operations[:-1]
- cloned_operations = [op.clone() for op in operations]
+ memo = compile.Memo()
+ cloned_operations = [op.clone(memo) for op in operations]
+ for op in cloned_operations:
+ op.is_source_op = True
preamble = TreeLoop('preamble')
preamble.inputargs = inputargs
@@ -427,11 +430,10 @@
assert preamble.operations[-1].getopnum() == rop.LABEL
- inliner = Inliner(inputargs, jump_args)
loop.operations = [preamble.operations[-1]] + \
- [inliner.inline_op(op, clone=False) for op in cloned_operations] + \
- [ResOperation(rop.JUMP, [inliner.inline_arg(a) for a in jump_args],
- None, descr=token)]
+ cloned_operations + \
+ [ResOperation(rop.JUMP, [memo.get(a, a) for a in jump_args],
+ descr=token)]
#[inliner.inline_op(jumpop)]
assert loop.operations[-1].getopnum() == rop.JUMP
assert loop.operations[0].getopnum() == rop.LABEL
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
@@ -1,8 +1,7 @@
import sys
-from rpython.jit.metainterp.compile import ResumeGuardDescr
+from rpython.jit.metainterp.compile import Memo
from rpython.jit.metainterp.history import TargetToken, JitCellToken, Const
-from rpython.jit.metainterp.inliner import Inliner
from rpython.jit.metainterp.optimize import InvalidLoop
from rpython.jit.metainterp.optimizeopt.generalize import KillHugeIntBounds
from rpython.jit.metainterp.optimizeopt.optimizer import Optimizer, Optimization
@@ -115,7 +114,7 @@
if start_label and self.jump_to_start_label(start_label, stop_label):
# Initial label matches, jump to it
- jumpop = ResOperation(rop.JUMP, stop_label.getarglist(), None,
+ jumpop = ResOperation(rop.JUMP, stop_label.getarglist(),
descr=start_label.getdescr())
if self.short:
# Construct our short preamble
@@ -318,9 +317,10 @@
'end of this bridge does not do that.')
args[short_inputargs[i]] = jmp_to_short_args[i]
- self.short_inliner = Inliner(short_inputargs, jmp_to_short_args)
- self._inline_short_preamble(self.short, self.short_inliner,
- patchguardop, self.short_boxes.assumed_classes)
+ self.memo = Memo(short_inputargs, jmp_to_short_args)
+ self._inline_short_preamble(self.short, self.memo,
+ patchguardop,
+ self.short_boxes.assumed_classes)
# Import boxes produced in the preamble but used in the loop
newoperations = self.optimizer.get_newoperations()
@@ -341,7 +341,7 @@
jumpop.initarglist(jumpargs)
self.optimizer.send_extra_operation(jumpop)
- self.short.append(ResOperation(rop.JUMP, short_jumpargs, None, descr=jumpop.getdescr()))
+ self.short.append(ResOperation(rop.JUMP, short_jumpargs, descr=jumpop.getdescr()))
# Verify that the virtual state at the end of the loop is one
# that is compatible with the virtual state at the start of the loop
@@ -397,21 +397,20 @@
else:
newargs[i] = a.clonebox()
boxmap[a] = newargs[i]
- inliner = Inliner(short_inputargs, newargs)
+ memo = Memo(short_inputargs, newargs)
target_token.assumed_classes = {}
for i in range(len(short)):
op = short[i]
- newop = inliner.inline_op(op)
- if op.result and op.result in self.short_boxes.assumed_classes:
- target_token.assumed_classes[newop.result] = self.short_boxes.assumed_classes[op.result]
+ newop = op.clone(memo)
+ if op.type != 'v' and op in self.short_boxes.assumed_classes:
+ target_token.assumed_classes[newop] = self.short_boxes.assumed_classes[op]
short[i] = newop
# Forget the values to allow them to be freed
for box in short[0].getarglist():
box.forget_value()
for op in short:
- if op.result:
- op.result.forget_value()
+ op.forget_value()
target_token.short_preamble = self.short
target_token.exported_state = None
@@ -492,7 +491,7 @@
def _import_op(self, op, inputargs, short_jumpargs, jumpargs):
- self.boxes_created_this_iteration[op.result] = None
+ self.boxes_created_this_iteration[op] = None
args = op.getarglist()
if op.is_guard():
args = args + op.getfailargs()
@@ -551,7 +550,7 @@
args = target.virtual_state.make_inputargs(values, self.optimizer,
keyboxes=True)
short_inputargs = target.short_preamble[0].getarglist()
- inliner = Inliner(short_inputargs, args)
+ memo = Memo(short_inputargs, args)
for guard in extra_guards:
if guard.is_guard():
@@ -561,7 +560,7 @@
try:
# NB: the short_preamble ends with a jump
- self._inline_short_preamble(target.short_preamble, inliner, patchguardop, target.assumed_classes)
+ self._inline_short_preamble(target.short_preamble, memo, patchguardop, target.assumed_classes)
except InvalidLoop:
#debug_print("Inlining failed unexpectedly",
# "jumping to preamble instead")
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
@@ -242,6 +242,9 @@
def returns_bool_result(self):
return self._cls_has_bool_result
+ def forget_value(self):
+ pass
+
# ===================
# Top of the hierachy
@@ -358,6 +361,9 @@
getvalue = getref_base
+ def forget_value(self):
+ self._resref = lltype.nullptr(llmemory.GCREF.TO)
+
def setref_base(self, refval):
self._resref = refval
@@ -626,7 +632,7 @@
'INT_INVERT/1/i',
'INT_FORCE_GE_ZERO/1/i',
#
- 'SAME_AS/1/rfi', # gets a Const or a Box, turns it into another Box
+ 'SAME_AS/1/ifr', # gets a Const or a Box, turns it into another Box
'CAST_PTR_TO_INT/1/i',
'CAST_INT_TO_PTR/1/r',
#
diff --git a/rpython/jit/tool/oparser.py b/rpython/jit/tool/oparser.py
--- a/rpython/jit/tool/oparser.py
+++ b/rpython/jit/tool/oparser.py
@@ -14,9 +14,6 @@
class ESCAPE_OP(N_aryOp, ResOpWithDescr):
- OPNUM = -123
-
- type = 'i'
is_source_op = True
def getopnum(self):
@@ -25,14 +22,38 @@
def getopname(self):
return 'escape'
- def clone(self):
- op = ESCAPE_OP()
- op.initarglist(self.getarglist()[:])
+ def clone(self, memo):
+ op = self.__class__()
+ op.initarglist([memo.get(arg, arg) for arg in self.getarglist()])
+ memo.set(self, op)
return op
+class ESCAPE_OP_I(ESCAPE_OP):
+ type = 'i'
+ OPNUM = -123
+
+class ESCAPE_OP_F(ESCAPE_OP):
+ type = 'f'
+ OPNUM = -124
+
+class ESCAPE_OP_N(ESCAPE_OP):
+ type = 'v'
+ OPNUM = -125
+
+class ESCAPE_OP_R(ESCAPE_OP):
+ type = 'r'
+ OPNUM = -126
+
+ALL_ESCAPE_OPS = {
+ ESCAPE_OP_I.OPNUM: ESCAPE_OP_I,
+ ESCAPE_OP_F.OPNUM: ESCAPE_OP_F,
+ ESCAPE_OP_N.OPNUM: ESCAPE_OP_N,
+ ESCAPE_OP_R.OPNUM: ESCAPE_OP_R
+}
+
class FORCE_SPILL(UnaryOp, PlainResOp):
- OPNUM = -124
+ OPNUM = -127
is_source_op = True
def getopnum(self):
@@ -224,8 +245,14 @@
try:
opnum = getattr(rop, opname.upper())
except AttributeError:
- if opname == 'escape':
- opnum = ESCAPE_OP.OPNUM
+ if opname == 'escape_i':
+ opnum = ESCAPE_OP_I.OPNUM
+ elif opname == 'escape_f':
+ opnum = ESCAPE_OP_F.OPNUM
+ elif opname == 'escape_n':
+ opnum = ESCAPE_OP_N.OPNUM
+ elif opname == 'escape_r':
+ opnum = ESCAPE_OP_R.OPNUM
elif opname == 'force_spill':
opnum = FORCE_SPILL.OPNUM
else:
@@ -268,8 +295,8 @@
return opnum, args, descr, fail_args
def create_op(self, opnum, args, descr):
- if opnum == ESCAPE_OP.OPNUM:
- op = ESCAPE_OP()
+ if opnum in ALL_ESCAPE_OPS:
+ op = ALL_ESCAPE_OPS[opnum]()
op.initarglist(args)
assert descr is None
return op
More information about the pypy-commit
mailing list