Author: Spenser Bauman <[email protected]>
Branch: remove-getfield-pure
Changeset: r81827:5efe5243ae95
Date: 2016-01-18 02:16 -0500
http://bitbucket.org/pypy/pypy/changeset/5efe5243ae95/
Log: Test case for a large number of immutable field references
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
@@ -9266,6 +9266,123 @@
a = lltype.malloc(lltype.GcArray(lltype.Ptr(self.NODE3)), 5, zero=True)
self.optimize_loop(ops, expected, jump_values=[a])
+ def test_large_number_of_immutable_references(self):
+ ops = """
+ [p0]
+ i0 = getfield_gc_i(p0, descr=bigadescr)
+ i1 = getfield_gc_i(p0, descr=bigbdescr)
+ i2 = getfield_gc_i(p0, descr=bigcdescr)
+ i3 = getfield_gc_i(p0, descr=bigddescr)
+ i4 = getfield_gc_i(p0, descr=bigedescr)
+ i5 = getfield_gc_i(p0, descr=bigfdescr)
+ i6 = getfield_gc_i(p0, descr=biggdescr)
+ i7 = getfield_gc_i(p0, descr=bighdescr)
+ i8 = getfield_gc_i(p0, descr=bigidescr)
+ i9 = getfield_gc_i(p0, descr=bigjdescr)
+ i10 = getfield_gc_i(p0, descr=bigkdescr)
+ i11 = getfield_gc_i(p0, descr=bigldescr)
+ i12 = getfield_gc_i(p0, descr=bigmdescr)
+ i13 = getfield_gc_i(p0, descr=bigndescr)
+ i14 = getfield_gc_i(p0, descr=bigodescr)
+ i15 = getfield_gc_i(p0, descr=bigpdescr)
+ i16 = getfield_gc_i(p0, descr=bigqdescr)
+ i17 = getfield_gc_i(p0, descr=bigrdescr)
+ i18 = getfield_gc_i(p0, descr=bigsdescr)
+ i19 = getfield_gc_i(p0, descr=bigtdescr)
+ i20 = getfield_gc_i(p0, descr=bigudescr)
+ i21 = getfield_gc_i(p0, descr=bigvdescr)
+ i22 = getfield_gc_i(p0, descr=bigwdescr)
+ i23 = getfield_gc_i(p0, descr=bigxdescr)
+ i24 = getfield_gc_i(p0, descr=bigydescr)
+ i25 = getfield_gc_i(p0, descr=bigzdescr)
+ i27 = getfield_gc_i(p0, descr=bigbdescr)
+ i28 = getfield_gc_i(p0, descr=bigcdescr)
+ i29 = getfield_gc_i(p0, descr=bigddescr)
+ i30 = getfield_gc_i(p0, descr=bigedescr)
+ i31 = getfield_gc_i(p0, descr=bigfdescr)
+ i32 = getfield_gc_i(p0, descr=biggdescr)
+ i33 = getfield_gc_i(p0, descr=bighdescr)
+ i34 = getfield_gc_i(p0, descr=bigidescr)
+ i35 = getfield_gc_i(p0, descr=bigjdescr)
+ i36 = getfield_gc_i(p0, descr=bigkdescr)
+ i37 = getfield_gc_i(p0, descr=bigldescr)
+ i38 = getfield_gc_i(p0, descr=bigmdescr)
+ i39 = getfield_gc_i(p0, descr=bigndescr)
+ i40 = getfield_gc_i(p0, descr=bigodescr)
+ i41 = getfield_gc_i(p0, descr=bigpdescr)
+ i42 = getfield_gc_i(p0, descr=bigqdescr)
+ i43 = getfield_gc_i(p0, descr=bigrdescr)
+ i44 = getfield_gc_i(p0, descr=bigsdescr)
+ i45 = getfield_gc_i(p0, descr=bigtdescr)
+ i46 = getfield_gc_i(p0, descr=bigudescr)
+ i47 = getfield_gc_i(p0, descr=bigvdescr)
+ i48 = getfield_gc_i(p0, descr=bigwdescr)
+ i49 = getfield_gc_i(p0, descr=bigxdescr)
+ i50 = getfield_gc_i(p0, descr=bigydescr)
+ i51 = getfield_gc_i(p0, descr=bigzdescr)
+ i26 = getfield_gc_i(p0, descr=bigadescr)
+ i99 = int_add(i26, i51)
+ escape_i(i27)
+ escape_i(i28)
+ escape_i(i29)
+ escape_i(i30)
+ escape_i(i31)
+ escape_i(i32)
+ escape_i(i33)
+ escape_i(i34)
+ escape_i(i35)
+ escape_i(i36)
+ escape_i(i37)
+ escape_i(i38)
+ escape_i(i39)
+ escape_i(i40)
+ escape_i(i41)
+ escape_i(i42)
+ escape_i(i43)
+ escape_i(i44)
+ escape_i(i45)
+ escape_i(i46)
+ escape_i(i47)
+ escape_i(i48)
+ escape_i(i49)
+ escape_i(i50)
+ escape_i(i51)
+ escape_i(i26)
+ escape_i(i99)
+ jump(p0)
+ """
+ expected = """
+
[p0,i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14,i15,i16,i17,i18,i19,i20,i21,i22,i23,i24,i25,i0,i99]
+ escape_i(i1)
+ escape_i(i2)
+ escape_i(i3)
+ escape_i(i4)
+ escape_i(i5)
+ escape_i(i6)
+ escape_i(i7)
+ escape_i(i8)
+ escape_i(i9)
+ escape_i(i10)
+ escape_i(i11)
+ escape_i(i12)
+ escape_i(i13)
+ escape_i(i14)
+ escape_i(i15)
+ escape_i(i16)
+ escape_i(i17)
+ escape_i(i18)
+ escape_i(i19)
+ escape_i(i20)
+ escape_i(i21)
+ escape_i(i22)
+ escape_i(i23)
+ escape_i(i24)
+ escape_i(i25)
+ escape_i(i0)
+ escape_i(i99)
+
jump(p0,i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14,i15,i16,i17,i18,i19,i20,i21,i22,i23,i24,i25,i0,i99)
+ """
+ self.optimize_loop(ops, expected)
class TestLLtype(OptimizeOptTest, LLtypeMixin):
pass
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
@@ -1,4 +1,4 @@
-import py, random
+import py, random, string
from rpython.rlib.debug import debug_print
from rpython.rtyper.lltypesystem import lltype, llmemory, rffi
@@ -122,7 +122,14 @@
('value', lltype.Signed),
('next', lltype.Ptr(NODE3)),
hints={'immutable': True}))
-
+
+ big_fields = [('big' + i, lltype.Signed) for i in string.ascii_lowercase]
+ BIG = lltype.GcForwardReference()
+ BIG.become(lltype.GcStruct('BIG', *big_fields, hints={'immutable': True}))
+
+ for field, _ in big_fields:
+ locals()[field + 'descr'] = cpu.fielddescrof(BIG, field)
+
node = lltype.malloc(NODE)
node.value = 5
node.next = node
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit