Author: Spenser Bauman <saba...@gmail.com>
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
pypy-commit@python.org
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to