diff --git a/llvm/lib/CodeGen/BranchFolding.cpp b/llvm/lib/CodeGen/BranchFolding.cpp --- a/llvm/lib/CodeGen/BranchFolding.cpp +++ b/llvm/lib/CodeGen/BranchFolding.cpp @@ -1342,7 +1342,7 @@ // points to this block. Blocks with their addresses taken shouldn't be // optimized away. if (IsEmptyBlock(MBB) && !MBB->isEHPad() && !MBB->hasAddressTaken() && - SameEHScope) { + SameEHScope && !MBB->isInlineAsmBrIndirectTarget()) { salvageDebugInfoFromEmptyBlock(TII, *MBB); // Dead block? Leave for cleanup later. if (MBB->pred_empty()) return MadeChange; @@ -1401,8 +1401,8 @@ // This has to check PrevBB->succ_size() because EH edges are ignored by // analyzeBranch. if (PriorCond.empty() && !PriorTBB && MBB->pred_size() == 1 && - PrevBB.succ_size() == 1 && - !MBB->hasAddressTaken() && !MBB->isEHPad()) { + PrevBB.succ_size() == 1 && !MBB->hasAddressTaken() && !MBB->isEHPad() && + !MBB->isInlineAsmBrIndirectTarget()) { LLVM_DEBUG(dbgs() << "\nMerging into block: " << PrevBB << "From MBB: " << *MBB); // Remove redundant DBG_VALUEs first. @@ -1566,9 +1566,9 @@ // If this branch is the only thing in its block, see if we can forward // other blocks across it. - if (CurTBB && CurCond.empty() && !CurFBB && - IsBranchOnlyBlock(MBB) && CurTBB != MBB && - !MBB->hasAddressTaken() && !MBB->isEHPad()) { + if (CurTBB && CurCond.empty() && !CurFBB && IsBranchOnlyBlock(MBB) && + CurTBB != MBB && !MBB->hasAddressTaken() && !MBB->isEHPad() && + !MBB->isInlineAsmBrIndirectTarget()) { DebugLoc dl = getBranchDebugLoc(*MBB); // This block may contain just an unconditional branch. Because there can // be 'non-branch terminators' in the block, try removing the branch and diff --git a/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp b/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp --- a/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp +++ b/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp @@ -3000,7 +3000,7 @@ BasicBlock *Dest = I.getIndirectDest(i); MachineBasicBlock *Target = FuncInfo.MBBMap[Dest]; Target->setIsInlineAsmBrIndirectTarget(); - Target->setHasAddressTaken(); + Target->setLabelMustBeEmitted(); // Don't add duplicate machine successors. if (Dests.insert(Dest).second) addSuccessorWithProb(CallBrMBB, Target, BranchProbability::getZero()); diff --git a/llvm/lib/CodeGen/SelectionDAG/TargetLowering.cpp b/llvm/lib/CodeGen/SelectionDAG/TargetLowering.cpp --- a/llvm/lib/CodeGen/SelectionDAG/TargetLowering.cpp +++ b/llvm/lib/CodeGen/SelectionDAG/TargetLowering.cpp @@ -5287,14 +5287,14 @@ case InlineAsm::isInput: OpInfo.CallOperandVal = Call.getArgOperand(ArgNo); break; - case InlineAsm::isLabel: - OpInfo.CallOperandVal = - cast(&Call)->getBlockAddressForIndirectDest(LabelNo); - OpInfo.ConstraintVT = - getAsmOperandValueType(DL, OpInfo.CallOperandVal->getType()) - .getSimpleVT(); + case InlineAsm::isLabel: { + OpInfo.CallOperandVal = cast(&Call)->getIndirectDest(LabelNo); + Type *_ = OpInfo.CallOperandVal->getType(); + Type *T = Type::getInt8PtrTy(_->getContext()); + OpInfo.ConstraintVT = getAsmOperandValueType(DL, T).getSimpleVT(); ++LabelNo; continue; + } case InlineAsm::isClobber: // Nothing to do. break; diff --git a/llvm/lib/CodeGen/TailDuplicator.cpp b/llvm/lib/CodeGen/TailDuplicator.cpp --- a/llvm/lib/CodeGen/TailDuplicator.cpp +++ b/llvm/lib/CodeGen/TailDuplicator.cpp @@ -176,7 +176,8 @@ // TailBB's immediate successors are now successors of those predecessors // which duplicated TailBB. Add the predecessors as sources to the PHI // instructions. - bool isDead = MBB->pred_empty() && !MBB->hasAddressTaken(); + bool isDead = MBB->pred_empty() && !MBB->hasAddressTaken() && + !MBB->isInlineAsmBrIndirectTarget(); if (PreRegAlloc) updateSuccessorsPHIs(MBB, isDead, TDBBs, Succs); @@ -913,10 +914,9 @@ // Layout preds are not always CFG preds. Check. *PrevBB->succ_begin() == TailBB && !TII->analyzeBranch(*PrevBB, PriorTBB, PriorFBB, PriorCond) && - PriorCond.empty() && - (!PriorTBB || PriorTBB == TailBB) && - TailBB->pred_size() == 1 && - !TailBB->hasAddressTaken()) { + PriorCond.empty() && (!PriorTBB || PriorTBB == TailBB) && + TailBB->pred_size() == 1 && !TailBB->hasAddressTaken() && + !TailBB->isInlineAsmBrIndirectTarget()) { LLVM_DEBUG(dbgs() << "\nMerging into block: " << *PrevBB << "From MBB: " << *TailBB); // There may be a branch to the layout successor. This is unlikely but it diff --git a/llvm/lib/Target/X86/X86ISelLowering.cpp b/llvm/lib/Target/X86/X86ISelLowering.cpp --- a/llvm/lib/Target/X86/X86ISelLowering.cpp +++ b/llvm/lib/Target/X86/X86ISelLowering.cpp @@ -55706,9 +55706,9 @@ // In any sort of PIC mode addresses need to be computed at runtime by // adding in a register or some sort of table lookup. These can't - // be used as immediates. BlockAddresses are fine though. + // be used as immediates. BlockAddresses and BasicBlocks are fine though. if ((Subtarget.isPICStyleGOT() || Subtarget.isPICStyleStubPIC()) && - !isa(Op)) + !(isa(Op) || isa(Op))) return; // If we are in non-pic codegen mode, we allow the address of a global (with diff --git a/llvm/test/CodeGen/AArch64/callbr-asm-label.ll b/llvm/test/CodeGen/AArch64/callbr-asm-label.ll --- a/llvm/test/CodeGen/AArch64/callbr-asm-label.ll +++ b/llvm/test/CodeGen/AArch64/callbr-asm-label.ll @@ -5,9 +5,8 @@ define i32 @test1() { ; CHECK-LABEL: test1: ; CHECK: .word b -; CHECK-NEXT: .word .Ltmp0 +; CHECK-NEXT: .word .LBB0_2 ; CHECK: // %bb.1: -; CHECK: .Ltmp0: ; CHECK: .LBB0_2: // %indirect entry: callbr void asm sideeffect "1:\0A\09.word b, ${0:l}\0A\09", "!i"() @@ -31,9 +30,8 @@ if.then: ; CHECK: .word b -; CHECK-NEXT: .word .Ltmp2 -; CHECK: .Ltmp2: -; CHECK-NEXT: .LBB1_3: // %if.end6 +; CHECK-NEXT: .word .LBB1_3 +; CHECK: .LBB1_3: // %if.end6 callbr void asm sideeffect "1:\0A\09.word b, ${0:l}\0A\09", "!i"() to label %if.then4 [label %if.end6] @@ -48,8 +46,7 @@ br i1 %phitmp, label %if.end10, label %if.then9 if.then9: -; CHECK: .Ltmp4: -; CHECK-NEXT: .LBB1_5: // %l_yes +; CHECK: .LBB1_5: // %l_yes callbr void asm sideeffect "", "!i"() to label %if.end10 [label %l_yes] diff --git a/llvm/test/CodeGen/PowerPC/ppc64-inlineasm-clobber.ll b/llvm/test/CodeGen/PowerPC/ppc64-inlineasm-clobber.ll --- a/llvm/test/CodeGen/PowerPC/ppc64-inlineasm-clobber.ll +++ b/llvm/test/CodeGen/PowerPC/ppc64-inlineasm-clobber.ll @@ -87,8 +87,8 @@ ; PPC64LE-NEXT: ld r0, 16(r1) ; PPC64LE-NEXT: mtlr r0 ; PPC64LE-NEXT: blr -; PPC64LE-NEXT: .Ltmp0: # Block address taken ; PPC64LE-NEXT: .LBB3_2: # %return_early +; PPC64LE-NEXT: # Label of block must be emitted ; PPC64LE-NEXT: li r3, 0 ; PPC64LE-NEXT: b .LBB3_1 ; @@ -106,8 +106,8 @@ ; PPC64BE-NEXT: ld r0, 16(r1) ; PPC64BE-NEXT: mtlr r0 ; PPC64BE-NEXT: blr -; PPC64BE-NEXT: .Ltmp0: # Block address taken ; PPC64BE-NEXT: .LBB3_2: # %return_early +; PPC64BE-NEXT: # Label of block must be emitted ; PPC64BE-NEXT: li r3, 0 ; PPC64BE-NEXT: b .LBB3_1 entry: @@ -131,8 +131,8 @@ ; PPC64LE-NEXT: # %bb.1: # %return ; PPC64LE-NEXT: extsw r3, r3 ; PPC64LE-NEXT: blr -; PPC64LE-NEXT: .Ltmp1: # Block address taken ; PPC64LE-NEXT: .LBB4_2: # %return_early +; PPC64LE-NEXT: # Label of block must be emitted ; PPC64LE-NEXT: li r3, 0 ; PPC64LE-NEXT: extsw r3, r3 ; PPC64LE-NEXT: blr @@ -145,8 +145,8 @@ ; PPC64BE-NEXT: # %bb.1: # %return ; PPC64BE-NEXT: extsw r3, r3 ; PPC64BE-NEXT: blr -; PPC64BE-NEXT: .Ltmp1: # Block address taken ; PPC64BE-NEXT: .LBB4_2: # %return_early +; PPC64BE-NEXT: # Label of block must be emitted ; PPC64BE-NEXT: li r3, 0 ; PPC64BE-NEXT: extsw r3, r3 ; PPC64BE-NEXT: blr diff --git a/llvm/test/CodeGen/X86/callbr-asm-bb-exports.ll b/llvm/test/CodeGen/X86/callbr-asm-bb-exports.ll --- a/llvm/test/CodeGen/X86/callbr-asm-bb-exports.ll +++ b/llvm/test/CodeGen/X86/callbr-asm-bb-exports.ll @@ -6,7 +6,6 @@ ; output from SelectionDAG. ; CHECK: t0: ch = EntryToken -; CHECK-NEXT: t16: i64 = BlockAddress<@test, %fail> 0 ; CHECK-NEXT: t4: i32,ch = CopyFromReg t0, Register:i32 %3 ; CHECK-NEXT: t10: i32 = add t4, Constant:i32<1> ; CHECK-NEXT: t12: ch = CopyToReg t0, Register:i32 %0, t10 @@ -17,7 +16,7 @@ ; CHECK-NEXT: t2: i32,ch = CopyFromReg t0, Register:i32 %2 ; CHECK-NEXT: t8: i32 = add t2, Constant:i32<4> ; CHECK-NEXT: t22: ch,glue = CopyToReg t17, Register:i32 %5, t8 -; CHECK-NEXT: t30: ch,glue = inlineasm_br t22, TargetExternalSymbol:i64'xorl $0, $0; jmp ${1:l}', MDNode:ch, TargetConstant:i64<0>, TargetConstant:i32<2359305>, Register:i32 %5, TargetConstant:i64<13>, TargetBlockAddress:i64<@test, %fail> 0, TargetConstant:i32<12>, Register:i32 $df, TargetConstant:i32<12>, Register:i16 $fpsw, TargetConstant:i32<12>, Register:i32 $eflags, t22:1 +; CHECK-NEXT: t29: ch,glue = inlineasm_br t22, TargetExternalSymbol:i64'xorl $0, $0; jmp ${1:l}', MDNode:ch, TargetConstant:i64<0>, TargetConstant:i32<2359305>, Register:i32 %5, TargetConstant:i64<13>, BasicBlock:ch, TargetConstant:i32<12>, Register:i32 $df, TargetConstant:i32<12>, Register:i16 $fpsw, TargetConstant:i32<12>, Register:i32 $eflags, t22:1 define i32 @test(i32 %a, i32 %b, i32 %c) { entry: diff --git a/llvm/test/CodeGen/X86/callbr-asm-blockplacement.ll b/llvm/test/CodeGen/X86/callbr-asm-blockplacement.ll --- a/llvm/test/CodeGen/X86/callbr-asm-blockplacement.ll +++ b/llvm/test/CodeGen/X86/callbr-asm-blockplacement.ll @@ -50,8 +50,8 @@ ; CHECK-NEXT: #NO_APP ; CHECK-NEXT: # %bb.4: # %bb17 ; CHECK-NEXT: callq widget@PLT -; CHECK-NEXT: .Ltmp0: # Block address taken ; CHECK-NEXT: .LBB0_5: # %bb18 +; CHECK-NEXT: # Label of block must be emitted ; CHECK-NEXT: movw $0, 14(%rbx) ; CHECK-NEXT: addq $8, %rsp ; CHECK-NEXT: popq %rbx diff --git a/llvm/test/CodeGen/X86/callbr-asm-branch-folding.ll b/llvm/test/CodeGen/X86/callbr-asm-branch-folding.ll --- a/llvm/test/CodeGen/X86/callbr-asm-branch-folding.ll +++ b/llvm/test/CodeGen/X86/callbr-asm-branch-folding.ll @@ -55,8 +55,8 @@ ; CHECK-NEXT: #APP ; CHECK-NEXT: #NO_APP ; CHECK-NEXT: jmp .LBB0_9 -; CHECK-NEXT: .Ltmp0: # Block address taken -; CHECK-NEXT: # %bb.7: # %if.then20.critedge +; CHECK-NEXT: .LBB0_7: # %if.then20.critedge +; CHECK-NEXT: # Label of block must be emitted ; CHECK-NEXT: movl j(%rip), %edi ; CHECK-NEXT: movslq %eax, %rcx ; CHECK-NEXT: movl $1, %esi diff --git a/llvm/test/CodeGen/X86/callbr-asm-destinations.ll b/llvm/test/CodeGen/X86/callbr-asm-destinations.ll --- a/llvm/test/CodeGen/X86/callbr-asm-destinations.ll +++ b/llvm/test/CodeGen/X86/callbr-asm-destinations.ll @@ -8,10 +8,10 @@ ; CHECK-NEXT: addl $4, %eax ; CHECK-NEXT: #APP ; CHECK-NEXT: xorl %eax, %eax -; CHECK-NEXT: jmp .Ltmp0 +; CHECK-NEXT: jmp .LBB0_1 ; CHECK-NEXT: #NO_APP -; CHECK-NEXT: .Ltmp0: # Block address taken -; CHECK-NEXT: # %bb.1: # %fail +; CHECK-NEXT: .LBB0_1: # %fail +; CHECK-NEXT: # Label of block must be emitted ; CHECK-NEXT: movl $1, %eax ; CHECK-NEXT: retl entry: @@ -29,13 +29,13 @@ ; CHECK-NEXT: addl $4, %eax ; CHECK-NEXT: #APP ; CHECK-NEXT: xorl %eax, %eax -; CHECK-NEXT: jmp .Ltmp1 -; CHECK-NEXT: jmp .Ltmp1 +; CHECK-NEXT: jmp .LBB1_2 +; CHECK-NEXT: jmp .LBB1_2 ; CHECK-NEXT: #NO_APP ; CHECK-NEXT: # %bb.1: # %normal ; CHECK-NEXT: retl -; CHECK-NEXT: .Ltmp1: # Block address taken ; CHECK-NEXT: .LBB1_2: # %fail +; CHECK-NEXT: # Label of block must be emitted ; CHECK-NEXT: movl $1, %eax ; CHECK-NEXT: retl entry: diff --git a/llvm/test/CodeGen/X86/callbr-asm-instr-scheduling.ll b/llvm/test/CodeGen/X86/callbr-asm-instr-scheduling.ll --- a/llvm/test/CodeGen/X86/callbr-asm-instr-scheduling.ll +++ b/llvm/test/CodeGen/X86/callbr-asm-instr-scheduling.ll @@ -33,11 +33,11 @@ ; CHECK-NEXT: andl $511, %eax # imm = 0x1FF ; CHECK-NEXT: leaq (%rdx,%rax,8), %rax ; CHECK-NEXT: #APP +; CHECK-NEXT: .Ltmp0: +; CHECK-NEXT: jmp .Ltmp1 ; CHECK-NEXT: .Ltmp2: -; CHECK-NEXT: jmp .Ltmp3 -; CHECK-NEXT: .Ltmp4: -; CHECK-NEXT: .zero (-(((.Ltmp5-.Ltmp6)-(.Ltmp4-.Ltmp2))>0))*((.Ltmp5-.Ltmp6)-(.Ltmp4-.Ltmp2)),144 -; CHECK-NEXT: .Ltmp7: +; CHECK-NEXT: .zero (-(((.Ltmp3-.Ltmp4)-(.Ltmp2-.Ltmp0))>0))*((.Ltmp3-.Ltmp4)-(.Ltmp2-.Ltmp0)),144 +; CHECK-NEXT: .Ltmp5: entry: %0 = tail call i64 asm sideeffect "mov %cr3,$0\0A\09", "=r,=*m,~{dirflag},~{fpsr},~{flags}"(ptr elementtype(i64) nonnull @__force_order) %and.i = and i64 %0, 9223372036854771712 diff --git a/llvm/test/CodeGen/X86/callbr-asm-label-addr.ll b/llvm/test/CodeGen/X86/callbr-asm-label-addr.ll --- a/llvm/test/CodeGen/X86/callbr-asm-label-addr.ll +++ b/llvm/test/CodeGen/X86/callbr-asm-label-addr.ll @@ -3,9 +3,9 @@ define i32 @test1(i32 %x) { ; CHECK-LABEL: test1: ; CHECK: .quad .Ltmp0 -; CHECK-NEXT: .quad .Ltmp1 -; CHECK: .Ltmp1: -; CHECK-NEXT: # %bb.1: # %bar +; CHECK-NEXT: .quad .LBB0_1 +; CHECK: .LBB0_1: # %bar +; CHECK-NEXT: # Label of block must be emitted ; CHECK-NEXT: callq foo ; CHECK-NEXT: .Ltmp0: ; CHECK-NEXT: # %bb.2: # %baz diff --git a/llvm/test/CodeGen/X86/callbr-asm-outputs-pred-succ.ll b/llvm/test/CodeGen/X86/callbr-asm-outputs-pred-succ.ll --- a/llvm/test/CodeGen/X86/callbr-asm-outputs-pred-succ.ll +++ b/llvm/test/CodeGen/X86/callbr-asm-outputs-pred-succ.ll @@ -17,12 +17,12 @@ ; Check the second INLINEASM_BR target block is preceded by the block with the ; second INLINEASM_BR. -; CHECK: bb.2 (%ir-block.7, address-taken, inlineasm-br-indirect-target): +; CHECK: bb.2 (%ir-block.7, inlineasm-br-indirect-target): ; CHECK-NEXT: predecessors: %bb.1 ; Check the first INLINEASM_BR target block is predecessed by the block with ; the first INLINEASM_BR. -; CHECK: bb.4 (%ir-block.11, address-taken, inlineasm-br-indirect-target): +; CHECK: bb.4 (%ir-block.11, inlineasm-br-indirect-target): ; CHECK-NEXT: predecessors: %bb.0 @.str = private unnamed_addr constant [26 x i8] c"inline asm#1 returned %d\0A\00", align 1 diff --git a/llvm/test/CodeGen/X86/callbr-asm-outputs.ll b/llvm/test/CodeGen/X86/callbr-asm-outputs.ll --- a/llvm/test/CodeGen/X86/callbr-asm-outputs.ll +++ b/llvm/test/CodeGen/X86/callbr-asm-outputs.ll @@ -10,12 +10,12 @@ ; CHECK-NEXT: addl $4, %eax ; CHECK-NEXT: #APP ; CHECK-NEXT: xorl %eax, %eax -; CHECK-NEXT: jmp .Ltmp0 +; CHECK-NEXT: jmp .LBB0_2 ; CHECK-NEXT: #NO_APP ; CHECK-NEXT: # %bb.1: # %normal ; CHECK-NEXT: retl -; CHECK-NEXT: .Ltmp0: # Block address taken ; CHECK-NEXT: .LBB0_2: # %abnormal +; CHECK-NEXT: # Label of block must be emitted ; CHECK-NEXT: movl $1, %eax ; CHECK-NEXT: retl entry: @@ -48,27 +48,27 @@ ; CHECK-NEXT: #APP ; CHECK-NEXT: testl %esi, %esi ; CHECK-NEXT: testl %edi, %esi -; CHECK-NEXT: jne .Ltmp1 +; CHECK-NEXT: jne .LBB1_4 ; CHECK-NEXT: #NO_APP ; CHECK-NEXT: jmp .LBB1_3 ; CHECK-NEXT: .LBB1_2: # %if.else ; CHECK-NEXT: #APP ; CHECK-NEXT: testl %esi, %edi ; CHECK-NEXT: testl %esi, %edi -; CHECK-NEXT: jne .Ltmp2 +; CHECK-NEXT: jne .LBB1_5 ; CHECK-NEXT: #NO_APP ; CHECK-NEXT: .LBB1_3: ; CHECK-NEXT: movl %esi, %eax ; CHECK-NEXT: addl %edi, %eax -; CHECK-NEXT: .Ltmp2: # Block address taken ; CHECK-NEXT: .LBB1_5: # %return +; CHECK-NEXT: # Label of block must be emitted ; CHECK-NEXT: popl %esi ; CHECK-NEXT: .cfi_def_cfa_offset 8 ; CHECK-NEXT: popl %edi ; CHECK-NEXT: .cfi_def_cfa_offset 4 ; CHECK-NEXT: retl -; CHECK-NEXT: .Ltmp1: # Block address taken ; CHECK-NEXT: .LBB1_4: # %label_true +; CHECK-NEXT: # Label of block must be emitted ; CHECK-NEXT: .cfi_def_cfa_offset 12 ; CHECK-NEXT: movl $-2, %eax ; CHECK-NEXT: jmp .LBB1_5 @@ -131,8 +131,8 @@ ; CHECK-NEXT: popl %edi ; CHECK-NEXT: .cfi_def_cfa_offset 4 ; CHECK-NEXT: retl -; CHECK-NEXT: .Ltmp3: # Block address taken ; CHECK-NEXT: .LBB2_6: # %indirect +; CHECK-NEXT: # Label of block must be emitted ; CHECK-NEXT: .cfi_def_cfa_offset 12 ; CHECK-NEXT: movl $42, %eax ; CHECK-NEXT: jmp .LBB2_5 @@ -163,23 +163,23 @@ ; CHECK-NEXT: #APP ; CHECK-NEXT: testl %ecx, %ecx ; CHECK-NEXT: testl %edx, %ecx -; CHECK-NEXT: jne .Ltmp4 +; CHECK-NEXT: jne .LBB3_3 ; CHECK-NEXT: #NO_APP ; CHECK-NEXT: # %bb.1: # %asm.fallthrough ; CHECK-NEXT: #APP ; CHECK-NEXT: testl %ecx, %edx ; CHECK-NEXT: testl %ecx, %edx -; CHECK-NEXT: jne .Ltmp5 +; CHECK-NEXT: jne .LBB3_4 ; CHECK-NEXT: #NO_APP ; CHECK-NEXT: # %bb.2: # %asm.fallthrough2 ; CHECK-NEXT: addl %edx, %ecx ; CHECK-NEXT: movl %ecx, %eax ; CHECK-NEXT: retl -; CHECK-NEXT: .Ltmp4: # Block address taken ; CHECK-NEXT: .LBB3_3: # %label_true +; CHECK-NEXT: # Label of block must be emitted ; CHECK-NEXT: movl $-2, %eax -; CHECK-NEXT: .Ltmp5: # Block address taken ; CHECK-NEXT: .LBB3_4: # %return +; CHECK-NEXT: # Label of block must be emitted ; CHECK-NEXT: retl entry: %0 = callbr { i32, i32 } asm sideeffect "testl $0, $0; testl $1, $2; jne ${3:l}", "=r,=r,r,!i,!i,~{dirflag},~{fpsr},~{flags}"(i32 %out1) @@ -214,8 +214,7 @@ ; CHECK: # %bb.0: ; CHECK-NEXT: #APP ; CHECK-NEXT: #NO_APP -; CHECK-NEXT: .Ltmp6: # Block address taken -; CHECK-NEXT: # %bb.1: +; CHECK-NEXT: .LBB4_1: # Label of block must be emitted ; CHECK-NEXT: retl %1 = call i32 @llvm.read_register.i32(metadata !3) %2 = callbr i32 asm "", "={esp},!i,{esp},~{dirflag},~{fpsr},~{flags}"(i32 %1) diff --git a/llvm/test/CodeGen/X86/callbr-asm-phi-placement.ll b/llvm/test/CodeGen/X86/callbr-asm-phi-placement.ll --- a/llvm/test/CodeGen/X86/callbr-asm-phi-placement.ll +++ b/llvm/test/CodeGen/X86/callbr-asm-phi-placement.ll @@ -16,9 +16,9 @@ ; CHECK-NEXT: pushq %rbx ; CHECK-NEXT: pushq %rax ; CHECK-NEXT: movq %rsi, %r14 -; CHECK-NEXT: .Ltmp0: # Block address taken ; CHECK-NEXT: .LBB0_1: # %loop ; CHECK-NEXT: # =>This Inner Loop Header: Depth=1 +; CHECK-NEXT: # Label of block must be emitted ; CHECK-NEXT: movq (%r14), %rbx ; CHECK-NEXT: callq foo@PLT ; CHECK-NEXT: movq %rbx, %rdi diff --git a/llvm/test/CodeGen/X86/callbr-asm-sink.ll b/llvm/test/CodeGen/X86/callbr-asm-sink.ll --- a/llvm/test/CodeGen/X86/callbr-asm-sink.ll +++ b/llvm/test/CodeGen/X86/callbr-asm-sink.ll @@ -12,12 +12,11 @@ ; CHECK: # %bb.0: ; CHECK-NEXT: leaq 8(%rdi), %rax ; CHECK-NEXT: #APP -; CHECK-NEXT: # 8(%rdi) .Ltmp0 +; CHECK-NEXT: # 8(%rdi) .LBB0_1 ; CHECK-NEXT: #NO_APP ; CHECK-NEXT: # %bb.2: ; CHECK-NEXT: retq -; CHECK-NEXT: .Ltmp0: # Block address taken -; CHECK-NEXT: .LBB0_1: +; CHECK-NEXT: .LBB0_1: # Label of block must be emitted ; CHECK-NEXT: movq $0, -8(%rax) ; CHECK-NEXT: retq %2 = getelementptr inbounds %struct1, %struct1* %0, i64 0, i32 1 diff --git a/llvm/test/CodeGen/X86/callbr-asm.ll b/llvm/test/CodeGen/X86/callbr-asm.ll --- a/llvm/test/CodeGen/X86/callbr-asm.ll +++ b/llvm/test/CodeGen/X86/callbr-asm.ll @@ -12,13 +12,13 @@ ; CHECK-NEXT: addl $4, %eax ; CHECK-NEXT: #APP ; CHECK-NEXT: xorl %eax, %eax -; CHECK-NEXT: jmp .Ltmp0 +; CHECK-NEXT: jmp .LBB0_2 ; CHECK-NEXT: #NO_APP ; CHECK-NEXT: # %bb.1: # %normal ; CHECK-NEXT: xorl %eax, %eax ; CHECK-NEXT: retl -; CHECK-NEXT: .Ltmp0: # Block address taken ; CHECK-NEXT: .LBB0_2: # %fail +; CHECK-NEXT: # Label of block must be emitted ; CHECK-NEXT: movl $1, %eax ; CHECK-NEXT: retl entry: @@ -41,14 +41,14 @@ ; CHECK-NEXT: #APP ; CHECK-EMPTY: ; CHECK-NEXT: xorl %eax, %eax -; CHECK-NEXT: jmp .Ltmp1 +; CHECK-NEXT: jmp .LBB1_2 ; CHECK-EMPTY: ; CHECK-NEXT: #NO_APP ; CHECK-NEXT: # %bb.1: # %normal ; CHECK-NEXT: xorl %eax, %eax ; CHECK-NEXT: retl -; CHECK-NEXT: .Ltmp1: # Block address taken ; CHECK-NEXT: .LBB1_2: # %fail +; CHECK-NEXT: # Label of block must be emitted ; CHECK-NEXT: movl $1, %eax ; CHECK-NEXT: retl entry: @@ -89,43 +89,43 @@ define i32 @test3(i32 %a) { ; CHECK-LABEL: test3: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: .Ltmp2: # Block address taken ; CHECK-NEXT: .LBB3_1: # %label01 ; CHECK-NEXT: # =>This Loop Header: Depth=1 ; CHECK-NEXT: # Child Loop BB3_2 Depth 2 ; CHECK-NEXT: # Child Loop BB3_3 Depth 3 ; CHECK-NEXT: # Child Loop BB3_4 Depth 4 -; CHECK-NEXT: .Ltmp3: # Block address taken +; CHECK-NEXT: # Label of block must be emitted ; CHECK-NEXT: .LBB3_2: # %label02 ; CHECK-NEXT: # Parent Loop BB3_1 Depth=1 ; CHECK-NEXT: # => This Loop Header: Depth=2 ; CHECK-NEXT: # Child Loop BB3_3 Depth 3 ; CHECK-NEXT: # Child Loop BB3_4 Depth 4 +; CHECK-NEXT: # Label of block must be emitted ; CHECK-NEXT: addl $4, {{[0-9]+}}(%esp) -; CHECK-NEXT: .Ltmp4: # Block address taken ; CHECK-NEXT: .LBB3_3: # %label03 ; CHECK-NEXT: # Parent Loop BB3_1 Depth=1 ; CHECK-NEXT: # Parent Loop BB3_2 Depth=2 ; CHECK-NEXT: # => This Loop Header: Depth=3 ; CHECK-NEXT: # Child Loop BB3_4 Depth 4 -; CHECK-NEXT: .Ltmp5: # Block address taken +; CHECK-NEXT: # Label of block must be emitted ; CHECK-NEXT: .LBB3_4: # %label04 ; CHECK-NEXT: # Parent Loop BB3_1 Depth=1 ; CHECK-NEXT: # Parent Loop BB3_2 Depth=2 ; CHECK-NEXT: # Parent Loop BB3_3 Depth=3 ; CHECK-NEXT: # => This Inner Loop Header: Depth=4 +; CHECK-NEXT: # Label of block must be emitted ; CHECK-NEXT: #APP -; CHECK-NEXT: jmp .Ltmp2 -; CHECK-NEXT: jmp .Ltmp3 -; CHECK-NEXT: jmp .Ltmp4 +; CHECK-NEXT: jmp .LBB3_1 +; CHECK-NEXT: jmp .LBB3_2 +; CHECK-NEXT: jmp .LBB3_3 ; CHECK-NEXT: #NO_APP ; CHECK-NEXT: # %bb.5: # %normal0 ; CHECK-NEXT: # in Loop: Header=BB3_4 Depth=4 ; CHECK-NEXT: #APP -; CHECK-NEXT: jmp .Ltmp2 -; CHECK-NEXT: jmp .Ltmp3 -; CHECK-NEXT: jmp .Ltmp4 -; CHECK-NEXT: jmp .Ltmp5 +; CHECK-NEXT: jmp .LBB3_1 +; CHECK-NEXT: jmp .LBB3_2 +; CHECK-NEXT: jmp .LBB3_3 +; CHECK-NEXT: jmp .LBB3_4 ; CHECK-NEXT: #NO_APP ; CHECK-NEXT: # %bb.6: # %normal1 ; CHECK-NEXT: movl {{[0-9]+}}(%esp), %eax @@ -165,14 +165,14 @@ ; CHECK-LABEL: test4: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: #APP -; CHECK-NEXT: ja .Ltmp6 +; CHECK-NEXT: ja .LBB4_3 ; CHECK-NEXT: #NO_APP ; CHECK-NEXT: # %bb.1: # %asm.fallthrough ; CHECK-NEXT: #APP -; CHECK-NEXT: ja .Ltmp6 +; CHECK-NEXT: ja .LBB4_3 ; CHECK-NEXT: #NO_APP -; CHECK-NEXT: .Ltmp6: # Block address taken ; CHECK-NEXT: .LBB4_3: # %quux +; CHECK-NEXT: # Label of block must be emitted ; CHECK-NEXT: retl entry: callbr void asm sideeffect "ja $0", "!i,~{dirflag},~{fpsr},~{flags}"() diff --git a/llvm/test/CodeGen/X86/inline-asm-pic.ll b/llvm/test/CodeGen/X86/inline-asm-pic.ll --- a/llvm/test/CodeGen/X86/inline-asm-pic.ll +++ b/llvm/test/CodeGen/X86/inline-asm-pic.ll @@ -26,13 +26,14 @@ ; CHECK-LABEL: x: ; CHECK: ## %bb.0: ; CHECK-NEXT: ## InlineAsm Start -; CHECK-NEXT: ## Ltmp0 +; CHECK-NEXT: ## LBB1_1 ; CHECK-EMPTY: ; CHECK-NEXT: ## InlineAsm End ; CHECK-NEXT: ## %bb.2: ## %return ; CHECK-NEXT: retl ; CHECK-NEXT: Ltmp0: ## Block address taken ; CHECK-NEXT: LBB1_1: ## %overflow +; CHECK-NEXT: ## Label of block must be emitted ; CHECK-NEXT: retl callbr void asm "# ${0:l}\0A", "!i"() to label %return [label %overflow] diff --git a/llvm/test/CodeGen/X86/shrinkwrap-callbr.ll b/llvm/test/CodeGen/X86/shrinkwrap-callbr.ll --- a/llvm/test/CodeGen/X86/shrinkwrap-callbr.ll +++ b/llvm/test/CodeGen/X86/shrinkwrap-callbr.ll @@ -20,7 +20,7 @@ ; CHECK-NEXT: # %bb.1: # %if.end ; CHECK-NEXT: callq fn ; CHECK-NEXT: #APP -; CHECK-NEXT: # jump to .Ltmp0 +; CHECK-NEXT: # jump to .LBB0_4 ; CHECK-NEXT: #NO_APP ; CHECK-NEXT: # %bb.2: # %return ; CHECK-NEXT: movl $4, %eax @@ -33,8 +33,8 @@ ; CHECK-NEXT: popq %rcx ; CHECK-NEXT: .cfi_def_cfa_offset 8 ; CHECK-NEXT: retq -; CHECK-NEXT: .Ltmp0: # Block address taken ; CHECK-NEXT: .LBB0_4: # %two +; CHECK-NEXT: # Label of block must be emitted ; CHECK-NEXT: .cfi_def_cfa_offset 16 ; CHECK-NEXT: popq %rax ; CHECK-NEXT: .cfi_def_cfa_offset 8 diff --git a/llvm/test/CodeGen/X86/tail-dup-asm-goto.ll b/llvm/test/CodeGen/X86/tail-dup-asm-goto.ll --- a/llvm/test/CodeGen/X86/tail-dup-asm-goto.ll +++ b/llvm/test/CodeGen/X86/tail-dup-asm-goto.ll @@ -35,10 +35,10 @@ ; CHECK-NEXT: successors: %bb.5(0x80000000), %bb.4(0x00000000) ; CHECK-NEXT: {{ $}} ; CHECK-NEXT: [[PHI:%[0-9]+]]:gr64 = PHI [[COPY]], %bb.2, [[MOV64rm]], %bb.1 - ; CHECK-NEXT: INLINEASM_BR &"#$0 $1 $2", 9 /* sideeffect mayload attdialect */, 13 /* imm */, 42, 13 /* imm */, 0, 13 /* imm */, blockaddress(@test1, %ir-block.bb17.i.i.i), 12 /* clobber */, implicit-def early-clobber $df, 12 /* clobber */, implicit-def early-clobber $fpsw, 12 /* clobber */, implicit-def early-clobber $eflags + ; CHECK-NEXT: INLINEASM_BR &"#$0 $1 $2", 9 /* sideeffect mayload attdialect */, 13 /* imm */, 42, 13 /* imm */, 0, 13 /* imm */, %bb.4, 12 /* clobber */, implicit-def early-clobber $df, 12 /* clobber */, implicit-def early-clobber $fpsw, 12 /* clobber */, implicit-def early-clobber $eflags ; CHECK-NEXT: JMP_1 %bb.5 ; CHECK-NEXT: {{ $}} - ; CHECK-NEXT: bb.4.bb17.i.i.i (address-taken, inlineasm-br-indirect-target): + ; CHECK-NEXT: bb.4.bb17.i.i.i (inlineasm-br-indirect-target): ; CHECK-NEXT: successors: %bb.5(0x80000000) ; CHECK-NEXT: {{ $}} ; CHECK-NEXT: {{ $}}