[LLVMdev] Call instruction
David Greene
dag at cray.com
Fri Sep 7 09:10:35 PDT 2007
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?
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?
This is probably a bug I introduced but I want to make sure it actually is a
bug.
-Dave
More information about the llvm-dev
mailing list