[pypy-commit] pypy remove-getfield-pure: Merge changes
sbauman
noreply at buildbot.pypy.org
Fri Oct 16 10:52:58 EDT 2015
Author: Spenser Bauman <sabauma at gmail.com>
Branch: remove-getfield-pure
Changeset: r80277:95c98ba9cf43
Date: 2015-10-09 18:16 -0400
http://bitbucket.org/pypy/pypy/changeset/95c98ba9cf43/
Log: Merge changes
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
@@ -1,3 +1,4 @@
+from rpython.rtyper.rclass import IR_QUASIIMMUTABLE
from rpython.jit.metainterp.optimizeopt.optimizer import Optimization, REMOVED
from rpython.jit.metainterp.resoperation import rop, OpHelpers, AbstractResOp,\
ResOperation
@@ -192,6 +193,22 @@
return
self.emit_operation(op)
+ def optimize_GETFIELD_GC_PURE_I(self, op):
+ from rpython.rlib.objectmodel import we_are_translated
+ # check that the descr is pure
+ # XXX quasi immutable descrs, are they pure or not?
+ if not we_are_translated():
+ descr = op.getdescr()
+ # Kind of weird that this returns a boolean or one of the IR_*
+ # family
+ assert descr.is_always_pure() in (True, IR_QUASIIMMUTABLE)
+ return self.optimize_default(op)
+ optimize_GETFIELD_GC_PURE_R = optimize_GETFIELD_GC_PURE_I
+ optimize_GETFIELD_GC_PURE_F = optimize_GETFIELD_GC_PURE_I
+ optimize_GETARRAYITEM_GC_PURE_I = optimize_GETFIELD_GC_PURE_I
+ optimize_GETARRAYITEM_GC_PURE_R = optimize_GETFIELD_GC_PURE_I
+ optimize_GETARRAYITEM_GC_PURE_F = optimize_GETFIELD_GC_PURE_I
+
def flush(self):
assert self.postponed_op is None
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
@@ -1089,9 +1089,9 @@
def test_getfield_gc_pure_1(self):
ops = """
[i]
- p1 = new_with_vtable(descr=nodesize)
- setfield_gc(p1, i, descr=valuedescr)
- i1 = getfield_gc_pure_i(p1, descr=valuedescr)
+ p1 = new_with_vtable(descr=nodesize3)
+ setfield_gc(p1, i, descr=valuedescr3)
+ i1 = getfield_gc_pure_i(p1, descr=valuedescr3)
jump(i1)
"""
expected = """
@@ -1103,14 +1103,13 @@
def test_getfield_gc_pure_2(self):
ops = """
[i]
- i1 = getfield_gc_pure_i(ConstPtr(myptr), descr=valuedescr)
+ i1 = getfield_gc_pure_i(ConstPtr(myptr3), descr=valuedescr3)
jump(i1)
"""
expected = """
[i]
- jump(5)
- """
- self.node.value = 5
+ jump(7)
+ """
self.optimize_loop(ops, expected)
def test_getfield_gc_nonpure_2(self):
@@ -1532,7 +1531,7 @@
setfield_gc(p1, i1, descr=valuedescr)
#
# some operations on which the above setfield_gc cannot have effect
- i3 = getarrayitem_gc_pure_i(p3, 1, descr=arraydescr)
+ i3 = getarrayitem_gc_i(p3, 1, descr=arraydescr)
i4 = getarrayitem_gc_i(p3, i3, descr=arraydescr)
i5 = int_add(i3, i4)
setarrayitem_gc(p3, 0, i5, descr=arraydescr)
@@ -1544,7 +1543,7 @@
expected = """
[p1, i1, i2, p3]
#
- i3 = getarrayitem_gc_pure_i(p3, 1, descr=arraydescr)
+ i3 = getarrayitem_gc_i(p3, 1, descr=arraydescr)
i4 = getarrayitem_gc_i(p3, i3, descr=arraydescr)
i5 = int_add(i3, i4)
#
@@ -1786,7 +1785,7 @@
ops = """
[p1, p2]
p3 = getarrayitem_gc_r(p1, 0, descr=arraydescr2)
- i4 = getfield_gc_pure_i(ConstPtr(myptr), descr=valuedescr)
+ i4 = getfield_gc_pure_i(ConstPtr(myptr3), descr=valuedescr3)
p5 = getarrayitem_gc_r(p1, 0, descr=arraydescr2)
escape_n(p3)
escape_n(i4)
@@ -1797,7 +1796,7 @@
[p1, p2]
p3 = getarrayitem_gc_r(p1, 0, descr=arraydescr2)
escape_n(p3)
- escape_n(5)
+ escape_n(7)
escape_n(p3)
jump(p1, p2)
"""
@@ -5869,15 +5868,15 @@
def test_getarrayitem_gc_pure_not_invalidated(self):
ops = """
[p0]
- i1 = getarrayitem_gc_pure_i(p0, 1, descr=arraydescr)
+ i1 = getarrayitem_gc_pure_i(p0, 1, descr=arrayimmutdescr)
escape_n(p0)
- i2 = getarrayitem_gc_pure_i(p0, 1, descr=arraydescr)
+ i2 = getarrayitem_gc_pure_i(p0, 1, descr=arrayimmutdescr)
escape_n(i2)
jump(p0)
"""
expected = """
[p0]
- i1 = getarrayitem_gc_pure_i(p0, 1, descr=arraydescr)
+ i1 = getarrayitem_gc_pure_i(p0, 1, descr=arrayimmutdescr)
escape_n(p0)
escape_n(i1)
jump(p0)
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
@@ -1423,7 +1423,7 @@
def test_getfield_gc_pure_2(self):
ops = """
[i]
- i1 = getfield_gc_pure_i(ConstPtr(myptr), descr=valuedescr)
+ i1 = getfield_gc_pure_i(ConstPtr(myptr3), descr=valuedescr3)
jump(i1)
"""
expected = """
@@ -1437,16 +1437,16 @@
ops = """
[]
p1 = escape_r()
- p2 = getfield_gc_pure_r(p1, descr=nextdescr)
+ p2 = getfield_gc_pure_r(p1, descr=nextdescr3)
escape_n(p2)
- p3 = getfield_gc_pure_r(p1, descr=nextdescr)
+ p3 = getfield_gc_pure_r(p1, descr=nextdescr3)
escape_n(p3)
jump()
"""
expected = """
[]
p1 = escape_r()
- p2 = getfield_gc_pure_r(p1, descr=nextdescr)
+ p2 = getfield_gc_pure_r(p1, descr=nextdescr3)
escape_n(p2)
escape_n(p2)
jump()
@@ -2317,7 +2317,7 @@
setfield_gc(p1, i1, descr=valuedescr)
#
# some operations on which the above setfield_gc cannot have effect
- i3 = getarrayitem_gc_pure_i(p3, 1, descr=arraydescr)
+ i3 = getarrayitem_gc_i(p3, 1, descr=arraydescr)
i4 = getarrayitem_gc_i(p3, i3, descr=arraydescr)
i5 = int_add(i3, i4)
setarrayitem_gc(p3, 0, i5, descr=arraydescr)
@@ -2330,7 +2330,7 @@
preamble = """
[p1, i1, i2, p3]
#
- i3 = getarrayitem_gc_pure_i(p3, 1, descr=arraydescr)
+ i3 = getarrayitem_gc_i(p3, 1, descr=arraydescr)
i4 = getarrayitem_gc_i(p3, i3, descr=arraydescr)
i5 = int_add(i3, i4)
#
@@ -2338,11 +2338,12 @@
setfield_gc(p1, i4, descr=nextdescr)
setarrayitem_gc(p3, 0, i5, descr=arraydescr)
escape_n()
- jump(p1, i1, i2, p3, i3)
- """
- expected = """
- [p1, i1, i2, p3, i3]
+ jump(p1, i1, i2, p3)
+ """
+ expected = """
+ [p1, i1, i2, p3]
#
+ i3 = getarrayitem_gc_i(p3, 1, descr=arraydescr)
i4 = getarrayitem_gc_i(p3, i3, descr=arraydescr)
i5 = int_add(i3, i4)
#
@@ -2350,8 +2351,7 @@
setfield_gc(p1, i4, descr=nextdescr)
setarrayitem_gc(p3, 0, i5, descr=arraydescr)
escape_n()
- ifoo = arraylen_gc(p3, descr=arraydescr) # killed by the backend
- jump(p1, i1, i2, p3, i3)
+ jump(p1, i1, i2, p3)
"""
self.optimize_loop(ops, expected, preamble)
@@ -2667,7 +2667,7 @@
ops = """
[p1, p2]
p3 = getarrayitem_gc_r(p1, 0, descr=arraydescr2)
- i4 = getfield_gc_pure_i(ConstPtr(myptr), descr=valuedescr)
+ i4 = getfield_gc_pure_i(ConstPtr(myptr3), descr=valuedescr3)
p5 = getarrayitem_gc_r(p1, 0, descr=arraydescr2)
escape_n(p3)
escape_n(i4)
@@ -2678,7 +2678,7 @@
[p1, p2]
p3 = getarrayitem_gc_r(p1, 0, descr=arraydescr2)
escape_n(p3)
- escape_n(5)
+ escape_n(7)
escape_n(p3)
jump(p1, p2)
"""
@@ -3303,8 +3303,8 @@
[p8, p11, i24]
p26 = new(descr=ssize)
setfield_gc(p26, i24, descr=adescr)
- i34 = getfield_gc_pure_i(p11, descr=abisdescr)
- i35 = getfield_gc_pure_i(p26, descr=adescr)
+ i34 = getfield_gc_i(p11, descr=abisdescr)
+ i35 = getfield_gc_i(p26, descr=adescr)
i36 = int_add_ovf(i34, i35)
guard_no_overflow() []
jump(p8, p11, i35)
@@ -4879,11 +4879,11 @@
def test_add_sub_ovf_virtual_unroll(self):
ops = """
[p15]
- i886 = getfield_gc_pure_i(p15, descr=valuedescr)
+ i886 = getfield_gc_i(p15, descr=valuedescr)
i888 = int_sub_ovf(i886, 1)
guard_no_overflow() []
escape_n(i888)
- i4360 = getfield_gc_pure_i(p15, descr=valuedescr)
+ i4360 = getfield_gc_i(p15, descr=valuedescr)
i4362 = int_add_ovf(i4360, 1)
guard_no_overflow() []
i4360p = int_sub_ovf(i4362, 1)
@@ -4973,8 +4973,8 @@
def test_pure(self):
ops = """
[p42]
- p53 = getfield_gc_r(ConstPtr(myptr), descr=nextdescr)
- p59 = getfield_gc_pure_r(p53, descr=valuedescr)
+ p53 = getfield_gc_r(ConstPtr(myptr3), descr=nextdescr3)
+ p59 = getfield_gc_pure_r(p53, descr=valuedescr3)
i61 = call_i(1, p59, descr=nonwritedescr)
jump(p42)
"""
@@ -5003,7 +5003,7 @@
ops = """
[p3]
p1 = escape_r()
- p2 = getfield_gc_pure_r(p1, descr=nextdescr)
+ p2 = getfield_gc_pure_r(p1, descr=nextdescr3)
setfield_gc(p1, p3, descr=otherdescr)
escape_n(p2)
jump(p3)
@@ -5011,7 +5011,7 @@
expected = """
[p3]
p1 = escape_r()
- p2 = getfield_gc_pure_r(p1, descr=nextdescr)
+ p2 = getfield_gc_pure_r(p1, descr=nextdescr3)
setfield_gc(p1, p3, descr=otherdescr)
escape_n(p2)
jump(p3)
@@ -5022,7 +5022,7 @@
ops = """
[]
p1 = escape_r()
- p2 = getfield_gc_pure_r(p1, descr=nextdescr)
+ p2 = getfield_gc_r(p1, descr=nextdescr)
p3 = escape_r()
setfield_gc(p3, p1, descr=nextdescr)
jump()
@@ -7496,7 +7496,7 @@
def test_forced_virtual_pure_getfield(self):
ops = """
[p0]
- p1 = getfield_gc_pure_r(p0, descr=valuedescr)
+ p1 = getfield_gc_pure_r(p0, descr=valuedescr3)
jump(p1)
"""
self.optimize_loop(ops, ops)
@@ -7780,14 +7780,14 @@
def test_loopinvariant_getarrayitem_gc_pure(self):
ops = """
[p9, i1]
- i843 = getarrayitem_gc_pure_i(p9, i1, descr=arraydescr)
+ i843 = getarrayitem_gc_pure_i(p9, i1, descr=arrayimmutdescr)
call_n(i843, descr=nonwritedescr)
jump(p9, i1)
"""
expected = """
[p9, i1, i843]
call_n(i843, descr=nonwritedescr)
- ifoo = arraylen_gc(p9, descr=arraydescr)
+ ifoo = arraylen_gc(p9, descr=arrayimmutdescr)
jump(p9, i1, i843)
"""
self.optimize_loop(ops, expected)
@@ -7796,7 +7796,7 @@
ops = """
[p0]
p1 = getfield_gc_r(p0, descr=nextdescr)
- p2 = getarrayitem_gc_pure_r(p1, 7, descr=gcarraydescr)
+ p2 = getarrayitem_gc_r(p1, 7, descr=gcarraydescr)
call_n(p2, descr=nonwritedescr)
jump(p0)
"""
@@ -7811,14 +7811,14 @@
i1 = arraylen_gc(p1, descr=gcarraydescr)
i2 = int_ge(i1, 8)
guard_true(i2) []
- p2 = getarrayitem_gc_pure_r(p1, 7, descr=gcarraydescr)
- jump(p2, p1)
- """
- expected = """
- [p0, p2, p1]
+ p2 = getarrayitem_gc_r(p1, 7, descr=gcarraydescr)
+ jump(p1, p2)
+ """
+ expected = """
+ [p0, p1, p2]
call_n(p2, descr=nonwritedescr)
i3 = arraylen_gc(p1, descr=gcarraydescr) # Should be killed by backend
- jump(p0, p2, p1)
+ jump(p0, p1, p2)
"""
self.optimize_loop(ops, expected, expected_short=short)
@@ -7993,7 +7993,7 @@
def test_dont_mixup_equal_boxes(self):
ops = """
[p8]
- i9 = getfield_gc_pure_i(p8, descr=valuedescr)
+ i9 = getfield_gc_pure_i(p8, descr=valuedescr3)
i10 = int_gt(i9, 0)
guard_true(i10) []
i29 = int_lshift(i9, 1)
@@ -8129,14 +8129,14 @@
ops = """
[p0]
p10 = getfield_gc_r(ConstPtr(myptr), descr=otherdescr)
- guard_value(p10, ConstPtr(myptr2)) []
+ guard_value(p10, ConstPtr(myptrb)) []
call_n(p10, descr=nonwritedescr)
- setfield_gc(ConstPtr(myptr), ConstPtr(myptr2), descr=otherdescr)
+ setfield_gc(ConstPtr(myptr), ConstPtr(myptrb), descr=otherdescr)
jump(p0)
"""
expected = """
[p0]
- call_n(ConstPtr(myptr2), descr=nonwritedescr)
+ call_n(ConstPtr(myptrb), descr=nonwritedescr)
jump(p0)
"""
self.optimize_loop(ops, expected)
@@ -8160,14 +8160,14 @@
ops = """
[p0]
p10 = getfield_gc_r(p0, descr=otherdescr)
- guard_value(p10, ConstPtr(myptr2)) []
+ guard_value(p10, ConstPtr(myptrb)) []
call_n(p10, descr=nonwritedescr)
- setfield_gc(p0, ConstPtr(myptr2), descr=otherdescr)
+ setfield_gc(p0, ConstPtr(myptrb), descr=otherdescr)
jump(p0)
"""
expected = """
[p0]
- call_n(ConstPtr(myptr2), descr=nonwritedescr)
+ call_n(ConstPtr(myptrb), descr=nonwritedescr)
jump(p0)
"""
self.optimize_loop(ops, expected)
@@ -8552,7 +8552,7 @@
[p10]
p52 = getfield_gc_r(p10, descr=nextdescr) # inst_storage
p54 = getarrayitem_gc_r(p52, 0, descr=arraydescr)
- p69 = getfield_gc_pure_r(p54, descr=otherdescr) # inst_w_function
+ p69 = getfield_gc_r(p54, descr=otherdescr) # inst_w_function
quasiimmut_field(p69, descr=quasiimmutdescr)
guard_not_invalidated() []
@@ -8562,7 +8562,7 @@
p106 = new_with_vtable(descr=nodesize)
p108 = new_array(3, descr=arraydescr)
p110 = new_with_vtable(descr=nodesize)
- setfield_gc(p110, ConstPtr(myptr2), descr=otherdescr) # inst_w_function
+ setfield_gc(p110, ConstPtr(myptrb), descr=otherdescr) # inst_w_function
setarrayitem_gc(p108, 0, p110, descr=arraydescr)
setfield_gc(p106, p108, descr=nextdescr) # inst_storage
jump(p106)
@@ -8780,13 +8780,13 @@
def test_virtual_back_and_forth(self):
ops = """
[p0]
- p1 = getfield_gc_pure_r(p0, descr=bdescr)
+ p1 = getfield_gc_pure_r(p0, descr=valuedescr3)
ptemp = new_with_vtable(descr=nodesize)
setfield_gc(ptemp, p1, descr=nextdescr)
p2 = getfield_gc_r(ptemp, descr=nextdescr)
- ix = getarrayitem_gc_pure_i(p2, 0, descr=arraydescr)
+ ix = getarrayitem_gc_pure_i(p2, 0, descr=arrayimmutdescr)
pfoo = getfield_gc_r(ptemp, descr=nextdescr)
- guard_value(pfoo, ConstPtr(myarray)) []
+ guard_value(pfoo, ConstPtr(immutarray)) []
ifoo = int_add(ix, 13)
escape_n(ix)
jump(p0)
@@ -8816,13 +8816,13 @@
def test_constant_float_pure(self):
ops = """
[p0]
- f0 = getarrayitem_gc_pure_f(p0, 3, descr=floatarraydescr)
+ f0 = getarrayitem_gc_pure_f(p0, 3, descr=floatarrayimmutdescr)
guard_value(f0, 1.03) []
jump(p0)
"""
expected = """
[p0]
- ifoo = arraylen_gc(p0, descr=floatarraydescr)
+ ifoo = arraylen_gc(p0, descr=floatarrayimmutdescr)
jump(p0)
"""
self.optimize_loop(ops, expected)
diff --git a/rpython/jit/metainterp/optimizeopt/test/test_unroll.py b/rpython/jit/metainterp/optimizeopt/test/test_unroll.py
--- a/rpython/jit/metainterp/optimizeopt/test/test_unroll.py
+++ b/rpython/jit/metainterp/optimizeopt/test/test_unroll.py
@@ -220,10 +220,10 @@
def test_double_getfield_plus_pure(self):
loop = """
[p0]
- pc = getfield_gc_pure_r(p0, descr=nextdescr)
+ pc = getfield_gc_pure_r(p0, descr=nextdescr3)
escape_n(p0) # that should flush the caches
- p1 = getfield_gc_r(pc, descr=nextdescr)
- i0 = getfield_gc_i(p1, descr=valuedescr)
+ p1 = getfield_gc_r(pc, descr=nextdescr3)
+ i0 = getfield_gc_i(p1, descr=valuedescr3)
jump(p0)
"""
es, loop, preamble = self.optimize(loop)
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
@@ -132,13 +132,21 @@
node2.parent.parent.typeptr = node_vtable2
node2addr = lltype.cast_opaque_ptr(llmemory.GCREF, node2)
myptr = lltype.cast_opaque_ptr(llmemory.GCREF, node)
- mynode2 = lltype.malloc(NODE)
+ mynodeb = lltype.malloc(NODE)
myarray = lltype.cast_opaque_ptr(llmemory.GCREF, lltype.malloc(lltype.GcArray(lltype.Signed), 13, zero=True))
- mynode2.parent.typeptr = node_vtable
- myptr2 = lltype.cast_opaque_ptr(llmemory.GCREF, mynode2)
- mynode3 = lltype.malloc(NODE2)
- mynode3.parent.parent.typeptr = node_vtable2
+ mynodeb.parent.typeptr = node_vtable
+ myptrb = lltype.cast_opaque_ptr(llmemory.GCREF, mynodeb)
+ myptr2 = lltype.malloc(NODE2)
+ myptr2.parent.parent.typeptr = node_vtable2
+ myptr2 = lltype.cast_opaque_ptr(llmemory.GCREF, myptr2)
+ nullptr = lltype.nullptr(llmemory.GCREF.TO)
+
+ mynode3 = lltype.malloc(NODE3)
+ mynode3.parent.typeptr = node_vtable3
+ mynode3.value = 7
+ mynode3.next = mynode3
myptr3 = lltype.cast_opaque_ptr(llmemory.GCREF, mynode3)
+
nullptr = lltype.nullptr(llmemory.GCREF.TO)
#nodebox2 = InputArgRef(lltype.cast_opaque_ptr(llmemory.GCREF, node2))
nodesize = cpu.sizeof(NODE, node_vtable)
@@ -197,7 +205,6 @@
immut_ptrval = cpu.fielddescrof(PTROBJ_IMMUT, 'ptrval')
arraydescr = cpu.arraydescrof(lltype.GcArray(lltype.Signed))
- floatarraydescr = cpu.arraydescrof(lltype.GcArray(lltype.Float))
arraydescr_tid = arraydescr.get_type_id()
array = lltype.malloc(lltype.GcArray(lltype.Signed), 15, zero=True)
arrayref = lltype.cast_opaque_ptr(llmemory.GCREF, array)
@@ -207,6 +214,11 @@
gcarraydescr_tid = gcarraydescr.get_type_id()
floatarraydescr = cpu.arraydescrof(lltype.GcArray(lltype.Float))
+ arrayimmutdescr = cpu.arraydescrof(lltype.GcArray(lltype.Signed, hints={"immutable": True}))
+ immutarray = lltype.cast_opaque_ptr(llmemory.GCREF, lltype.malloc(arrayimmutdescr.A, 13, zero=True))
+ gcarrayimmutdescr = cpu.arraydescrof(lltype.GcArray(llmemory.GCREF, hints={"immutable": True}))
+ floatarrayimmutdescr = cpu.arraydescrof(lltype.GcArray(lltype.Float, hints={"immutable": True}))
+
# a GcStruct not inheriting from OBJECT
tpl = lltype.malloc(S, zero=True)
tupleaddr = lltype.cast_opaque_ptr(llmemory.GCREF, tpl)
@@ -238,7 +250,7 @@
tsize = cpu.sizeof(T, None)
cdescr = cpu.fielddescrof(T, 'c')
ddescr = cpu.fielddescrof(T, 'd')
- arraydescr3 = cpu.arraydescrof(lltype.GcArray(lltype.Ptr(NODE)))
+ arraydescr3 = cpu.arraydescrof(lltype.GcArray(lltype.Ptr(NODE3)))
U = lltype.GcStruct('U',
('parent', OBJECT),
diff --git a/rpython/jit/metainterp/optimizeopt/test/test_virtualstate.py b/rpython/jit/metainterp/optimizeopt/test/test_virtualstate.py
--- a/rpython/jit/metainterp/optimizeopt/test/test_virtualstate.py
+++ b/rpython/jit/metainterp/optimizeopt/test/test_virtualstate.py
@@ -1103,8 +1103,8 @@
jump(p0)
"""
self.optimize_bridge(loops, bridge, loops[0], 'Loop0', [self.myptr])
- self.optimize_bridge(loops, bridge, loops[1], 'Loop1', [self.myptr3])
- self.optimize_bridge(loops[0], bridge, 'RETRACE', [self.myptr3])
+ self.optimize_bridge(loops, bridge, loops[1], 'Loop1', [self.myptr2])
+ self.optimize_bridge(loops[0], bridge, 'RETRACE', [self.myptr2])
self.optimize_bridge(loops, loops[0], loops[0], 'Loop0', [self.nullptr])
self.optimize_bridge(loops, loops[1], loops[1], 'Loop1', [self.nullptr])
More information about the pypy-commit
mailing list