Author: Maciej Fijalkowski <[email protected]>
Branch: jitframe-on-heap
Changeset: r60052:28596864aa21
Date: 2013-01-14 19:10 +0200
http://bitbucket.org/pypy/pypy/changeset/28596864aa21/

Log:    manage to write a failing test

diff --git a/pypy/jit/backend/test/runner_test.py 
b/pypy/jit/backend/test/runner_test.py
--- a/pypy/jit/backend/test/runner_test.py
+++ b/pypy/jit/backend/test/runner_test.py
@@ -3725,3 +3725,64 @@
         # make sure that force reads the registers from a zeroed piece of
         # memory
         assert values[0] == 0
+
+    def test_compile_bridge_while_running(self):        
+        def func():
+            bridge = parse("""
+            [i1, i2]
+            i3 = int_add(i1, i2)
+            i4 = int_add(i1, i3)
+            i5 = int_add(i1, i4)
+            i6 = int_add(i4, i5)
+            i7 = int_add(i6, i5)
+            i8 = int_add(i5, 1)
+            i9 = int_add(i8, 1)
+            force_spill(i1)
+            force_spill(i2)
+            force_spill(i3)
+            force_spill(i4)
+            force_spill(i5)
+            force_spill(i6)
+            force_spill(i7)
+            force_spill(i8)
+            force_spill(i9)
+            call(ConstClass(func2_ptr), 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 
descr=calldescr2)
+            guard_true(i1, descr=guarddescr) [i1, i2, i3, i4, i5, i6, i7, i8, 
i9]
+            finish(i1, descr=finaldescr)
+            """, namespace={'finaldescr': finaldescr, 'calldescr2': calldescr2,
+                            'guarddescr': guarddescr, 'func2_ptr': func2_ptr})
+            self.cpu.compile_bridge(faildescr, bridge.inputargs,
+                                    bridge.operations, looptoken)
+
+        cpu = self.cpu
+        finaldescr = BasicFinalDescr(13)
+        finaldescr2 = BasicFinalDescr(133)
+        guarddescr = BasicFailDescr(8)
+
+        FUNC = self.FuncType([], lltype.Void)
+        FPTR = self.Ptr(FUNC)
+        func_ptr = llhelper(FPTR, func)
+        calldescr = cpu.calldescrof(FUNC, FUNC.ARGS, FUNC.RESULT,
+                                    EffectInfo.MOST_GENERAL)
+
+        def func2(a, b, c, d, e, f, g, h, i, j, k, l):
+            pass
+
+        FUNC2 = self.FuncType([lltype.Signed] * 12, lltype.Void)
+        FPTR2 = self.Ptr(FUNC2)
+        func2_ptr = llhelper(FPTR2, func2)
+        calldescr2 = cpu.calldescrof(FUNC2, FUNC2.ARGS, FUNC2.RESULT,
+                                    EffectInfo.MOST_GENERAL)
+        
+        faildescr = BasicFailDescr(0)
+        
+        looptoken = JitCellToken()
+        loop = parse("""
+        [i0, i1, i2]
+        call(ConstClass(func_ptr), descr=calldescr)
+        guard_true(i0, descr=faildescr) [i1, i2]
+        finish(i2, descr=finaldescr2)
+        """, namespace=locals())
+        self.cpu.compile_loop(loop.inputargs, loop.operations, looptoken)
+        frame = self.cpu.execute_token(looptoken, 0, 0, 3)
+        assert self.cpu.get_latest_descr(frame) is guarddescr
diff --git a/pypy/jit/backend/x86/assembler.py 
b/pypy/jit/backend/x86/assembler.py
--- a/pypy/jit/backend/x86/assembler.py
+++ b/pypy/jit/backend/x86/assembler.py
@@ -571,6 +571,7 @@
         operations = regalloc.prepare_bridge(inputargs, arglocs,
                                              operations,
                                              self.current_clt.allgcrefs)
+        self._check_frame_depth()
         frame_depth = self._assemble(regalloc, operations)
         codeendpos = self.mc.get_relative_pos()
         self.write_pending_failure_recoveries()
@@ -650,6 +651,9 @@
                 mc.writeimm32(self.error_trampoline_64 - pos_after_jz)
                 mc.copy_to_raw_memory(rawstart + pos_after_jz - 4)
 
+    def _check_frame_depth(self):
+        pass
+
     def get_asmmemmgr_blocks(self, looptoken):
         clt = looptoken.compiled_loop_token
         if clt.asmmemmgr_blocks is None:
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to