[PATCH] D64982: [AsmPrinter] Print label if MBB's address is taken

Bill Wendling via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Fri Jul 19 02:20:03 PDT 2019


void created this revision.
void added reviewers: nickdesaulniers, craig.topper.
Herald added a project: LLVM.
Herald added a subscriber: llvm-commits.

Make sure that we emit a label for the MBB if its address is taken.


Repository:
  rL LLVM

https://reviews.llvm.org/D64982

Files:
  lib/CodeGen/AsmPrinter/AsmPrinterInlineAsm.cpp
  test/CodeGen/X86/callbr-asm-label-addr.ll
  test/CodeGen/X86/callbr-asm.ll


Index: test/CodeGen/X86/callbr-asm.ll
===================================================================
--- test/CodeGen/X86/callbr-asm.ll
+++ test/CodeGen/X86/callbr-asm.ll
@@ -19,6 +19,7 @@
 ; 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:
Index: test/CodeGen/X86/callbr-asm-label-addr.ll
===================================================================
--- /dev/null
+++ test/CodeGen/X86/callbr-asm-label-addr.ll
@@ -0,0 +1,28 @@
+; RUN: llc < %s -mtriple=x86_64-unknown-linux-gnu | FileCheck %s
+
+; CHECK-LABEL: test1:
+; CHECK:       .quad .LBB0_2
+; CHECK-NEXT:  .quad .LBB0_1
+; CHECK-LABEL: .LBB0_1:
+; CHECK-LABEL: .LBB0_2:
+
+define i32 @test1(i32 %x) {
+entry:
+  callbr void asm sideeffect ".quad ${0:l}\0A\09.quad ${1:l}", "i,X,~{dirflag},~{fpsr},~{flags}"(i8* blockaddress(@test1, %baz), i8* blockaddress(@test1, %bar))
+          to label %asm.fallthrough [label %bar]
+
+asm.fallthrough:
+  br label %bar
+
+bar:
+  %call = tail call i32 @foo(i32 %x) #2
+  br label %baz
+
+baz:
+  %call1 = tail call i32 @mux(i32 %call) #2
+  ret i32 %call1
+}
+
+declare dso_local i32 @foo(i32) local_unnamed_addr #1
+
+declare dso_local i32 @mux(i32) local_unnamed_addr #1
Index: lib/CodeGen/AsmPrinter/AsmPrinterInlineAsm.cpp
===================================================================
--- lib/CodeGen/AsmPrinter/AsmPrinterInlineAsm.cpp
+++ lib/CodeGen/AsmPrinter/AsmPrinterInlineAsm.cpp
@@ -435,6 +435,7 @@
               for (const MachineBasicBlock &MBB : *MF)
                 if (BB == MBB.getBasicBlock()) {
                   MBB.getSymbol()->print(OS, AP->MAI);
+                  const_cast<MachineBasicBlock*>(&MBB)->setLabelMustBeEmitted();
                   break;
                 }
             } else if (MI->getOperand(OpNo).isMBB()) {


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D64982.210779.patch
Type: text/x-patch
Size: 1934 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20190719/a23c5d1c/attachment.bin>


More information about the llvm-commits mailing list