[LLVMdev] Call instruction
Evan Cheng
evan.cheng at apple.com
Fri Sep 7 09:47:50 PDT 2007
On Sep 7, 2007, at 9:10 AM, David Greene wrote:
> My home e--mail is down, which is where I get my llvm feeds, so
> please copy
> any replies to this address as well as the list.
>
> The call instruction can define implicit defs. What are the
> semantics when
> the call includes a use with a kill of some register and also an
> implicit def
> of that register? Is the register to be considered live out at
> that point?
Right. The register should be considered live past the call instruction.
>
> I've found a failing testcase where register scavenging complains
> about
> redefining a live register. The (ARM) code looks like this:
>
>
> bb408: 0x9b07468, LLVM BB @0x9ae9010, ID#8:
> Live Ins: %r4 %r5 %r7
> Predecessors according to CFG: 0x9b08398 (#71)
> STR %r4<kill>, %sp, %NOREG, 0, 14, %NOREG
> %r4 = MOVi 0, 14, %NOREG, %NOREG
> %r0 = MOVr %r7<kill>, 14, %NOREG, %NOREG
> %r1 = MOVr %r5<kill>, 14, %NOREG, %NOREG
> %r2 = LDR <fi#1>, %NOREG, 0, 14, %NOREG
> %r3 = MOVr %r4, 14, %NOREG, %NOREG
> BL <ga:gimplify_cond_expr>, %r0<kill>, %r1<kill>, %r2<kill>, %
> r3<kill>,
> %r0<imp-def>, %r1<imp-def,dead>, %r2<imp-def,dead>, %r3<imp-def,dead>,
> %r12<imp-def,dead>, %lr<imp-def,dead>, %d0<imp-def,dead>, %d1<imp-
> def,dead>,
> %d2<imp-def,dead>, %d3<imp-def,dead>, %d4<imp-def,dead>, %d5<imp-
> def,dead>,
> %d6<imp-def,dead>, %d7<imp-def,dead>, %cpsr<imp-def,dead>
> %r0 = MOVr %r4<kill>, 14, %NOREG, %NOREG
> %sp = ADDri %sp<kill>, 12, 14, %NOREG, %NOREG
> %r4 = LDR <fi#10>, %NOREG, 0, 14, %NOREG
> %r5 = LDR <fi#9>, %NOREG, 0, 14, %NOREG
> %r6 = LDR <fi#8>, %NOREG, 0, 14, %NOREG
> %r7 = LDR <fi#7>, %NOREG, 0, 14, %NOREG
> %r8 = LDR <fi#6>, %NOREG, 0, 14, %NOREG
> %r9 = LDR <fi#5>, %NOREG, 0, 14, %NOREG
> %r10 = LDR <fi#4>, %NOREG, 0, 14, %NOREG
> %r11 = LDR <fi#3>, %NOREG, 0, 14, %NOREG
> %lr = LDR <fi#2>, %NOREG, 0, 14, %NOREG
> %sp = ADDri %sp<kill>, 36, 14, %NOREG, %NOREG
> BX_RET 14, %NOREG, %r0<imp-use,kill>
>
> The problem is the def of %r0 right after the BL. %r0 is killed at
> the BL but
> is also implicitly defed and not marked dead. I believe it should
> be marked
> dead at the implicit def, similarly to %r1. Is that right?
Right. %r0 imp-def should be marked dead.
Evan
>
> This is probably a bug I introduced but I want to make sure it
> actually is a
> bug.
>
> -Dave
> _______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
More information about the llvm-dev
mailing list