Author: Richard Plangger <planri...@gmail.com>
Branch: fix-longevity
Changeset: r82439:a5af78134022
Date: 2016-02-23 14:58 +0100
http://bitbucket.org/pypy/pypy/changeset/a5af78134022/

Log:    (remi, plan_rich) new test involving a call

diff --git a/rpython/jit/backend/llsupport/test/test_regalloc_call.py 
b/rpython/jit/backend/llsupport/test/test_regalloc_call.py
--- a/rpython/jit/backend/llsupport/test/test_regalloc_call.py
+++ b/rpython/jit/backend/llsupport/test/test_regalloc_call.py
@@ -6,6 +6,10 @@
 from rpython.jit.metainterp.history import TargetToken
 from rpython.jit.metainterp.resoperation import (rop, ResOperation,
         AbstractValue, CountingDict)
+from rpython.rtyper.lltypesystem import lltype
+from rpython.rtyper.lltypesystem import rffi
+from rpython.rtyper.annlowlevel import llhelper
+from rpython.jit.codewriter.effectinfo import EffectInfo
 
 class FakeReg(object):
     def __init__(self, i):
@@ -19,8 +23,8 @@
 
 CPU = getcpuclass()
 
-def parse_loop(text):
-    ops = parse(text)
+def parse_loop(text, namespace={}):
+    ops = parse(text, namespace=namespace)
     tt = None
     tt = TargetToken(ops.operations[-1].getdescr())
     for op in ops.operations:
@@ -47,7 +51,7 @@
         self.pushes = []
 
     def regalloc_mov(self, prev_loc, loc):
-        self.moves.append((prev_loc, loc))
+        self.moves.append((prev_loc, loc, 'pos: ' + 
str(self.regalloc.rm.position)))
         print "mov bindings: ", self.regalloc.rm.reg_bindings
         print prev_loc, "->", loc
     def regalloc_push(self, loc):
@@ -128,6 +132,19 @@
 
 class TestRegalloc(object):
 
+    def setup_method(self, name):
+        cpu = CPU(None, None)
+        cpu.setup_once()
+
+        def x(i):
+            return i
+        FPTR = lltype.Ptr(lltype.FuncType([rffi.UINT], rffi.UINT))
+        func_ptr = llhelper(FPTR, x)
+        calldescr = cpu.calldescrof(FPTR.TO, FPTR.TO.ARGS, FPTR.TO.RESULT, 
EffectInfo.MOST_GENERAL)
+
+        ns = {'calldescr': calldescr}
+        self.namespace = ns
+
     def test_allocate_register_into_jump_register(self):
         tt, ops = parse_loop("""
         [p0,i1]
@@ -141,15 +158,32 @@
 
     def test_2allocate_register_into_jump_register2(self):
         tt, ops = parse_loop("""
-        [p0,i1]
-        i2 = int_add(i1,i1)
-        i3 = int_add(i2,i1)
-        guard_true(i3) []
-        jump(p0,i2)
+        [p0,i0]
+        i1 = int_add(i0,i0)
+        i2 = int_add(i0,i1)
+        guard_true(i2) []
+        jump(p0,i1)
         """)
-        i2 = ops.operations[0]
-        i3 = ops.operations[1]
+        i1 = ops.operations[0]
+        i2 = ops.operations[1]
         trace_alloc = TraceAllocation(ops, [eax, edx], [r8, r9], [eax, edx], 
tt)
-        assert trace_alloc.initial_register(i2) == edx
-        assert trace_alloc.initial_register(i3) != edx
+        assert trace_alloc.initial_register(i1) == edx
+        assert trace_alloc.initial_register(i2) != edx
+        assert trace_alloc.move_count() == 1
 
+    def test_call_allocate_first_param_to_callee(self):
+        tt, ops = parse_loop("""
+        [p0,i0]
+        i1 = int_add(i0,i0)
+        i2 = int_add(i0,i1)
+        call_n(p0, i1, descr=calldescr)
+        guard_true(i2) []
+        jump(p0,i1)
+        """, namespace=self.namespace)
+        i1 = ops.operations[0]
+        i2 = ops.operations[1]
+        trace_alloc = TraceAllocation(ops, [eax, edx], [r8, r9], [eax, edx], 
tt)
+        assert trace_alloc.initial_register(i1) == edx
+        assert trace_alloc.initial_register(i2) != edx
+        assert trace_alloc.move_count() == 1
+
_______________________________________________
pypy-commit mailing list
pypy-commit@python.org
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to