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