I suspect this is a straight forward problem so I thought I'd ask.
I'm developing a new backend. I recently updated from the LLVM
repository and now my output assembly is branching to labels/blocks that
have been removed. It had been working fine two weeks ago. What looks
suspicious is the following message:
TryTailMergeBlocks: BB#1, BB#3, BB#4
Looking for common tails of at least 3 instructions
*** Tail-duplicating BB#1
*** Tail-duplicating BB#3
because the missing labels are .LBB0_1 and .LBB0_3. both of branches to
those labels were unconditional branches. The conditional branch labels
are fine. Anyone have any idea what I may have done wrong?
.file "/tmp/20000112-1.bc"
.text
.globl main
.align 4
.type main, at function
main: # @main
# BB#0: # %entry
addi %r1, %r1, -32
st %r31, %r1,28
st %r12, %r1,24
addi %r12, %r0, 0
st %r12, %r1,20
addi %r2, %r0, 1
call special_format
oris r0,r0,0
subc r0, %r2, %r12
beq .LBB0_2
oris r0,r0,0
b .LBB0_1
oris r0,r0,0
# BB#1: # %if.then
call abort
oris r0,r0,0
.LBB0_2: # %if.end
addi %r12, %r0, 0
addi %r2, %r12, 0
call special_format
oris r0,r0,0
subc r0, %r2, %r12
bne .LBB0_4
oris r0,r0,0
b .LBB0_3
oris r0,r0,0
# BB#3: # %if.then3
call abort
oris r0,r0,0
.LBB0_4: # %if.end4
addi %r2, %r0, 0
call exit
oris r0,r0,0
.Ltmp0:
.size main, .Ltmp0-main
> I suspect this is a straight forward problem so I thought I'd ask. > I'm developing a new backend. I recently updated from the LLVM > repository and now my output assembly is branching to labels/blocks that > have been removed. It had been working fine two weeks ago. What looks > suspicious is the following message:Just quick though: have you implemented the branch-related hooks of your backend properly? E.g. AnalyzeBranch and around? -- With best regards, Anton Korobeynikov Faculty of Mathematics and Mechanics, Saint Petersburg State University
On 10/4/10 10:24 AM, Anton Korobeynikov wrote:>> I suspect this is a straight forward problem so I thought I'd ask. >> I'm developing a new backend. I recently updated from the LLVM >> repository and now my output assembly is branching to labels/blocks that >> have been removed. It had been working fine two weeks ago. What looks >> suspicious is the following message: > Just quick though: have you implemented the branch-related hooks of > your backend properly? > E.g. AnalyzeBranch and around? >It turns out I hadn't overridden AsmPrinter::isBlockOnlyReachableByFallthrough() to handle delay slots. I'm not sure why it worked previously.