diff options
-rw-r--r-- | lib/CodeGen/AsmPrinter/AsmPrinter.cpp | 3 | ||||
-rw-r--r-- | test/CodeGen/X86/asm-label.ll | 2 | ||||
-rw-r--r-- | test/CodeGen/X86/asm-label2.ll | 22 |
3 files changed, 26 insertions, 1 deletions
diff --git a/lib/CodeGen/AsmPrinter/AsmPrinter.cpp b/lib/CodeGen/AsmPrinter/AsmPrinter.cpp index 00f3501fcf..f324148cea 100644 --- a/lib/CodeGen/AsmPrinter/AsmPrinter.cpp +++ b/lib/CodeGen/AsmPrinter/AsmPrinter.cpp @@ -1941,6 +1941,9 @@ isBlockOnlyReachableByFallthrough(const MachineBasicBlock *MBB) const { if (TII->AnalyzeBranch(*Pred, PredTBB, PredFBB, PredCond)) return false; + if (PredTBB == MBB || PredFBB == MBB) + return false; + // This is a fall through if there is no conditions in the bb // or if there is no explicit false branch. return PredCond.empty() || !PredFBB; diff --git a/test/CodeGen/X86/asm-label.ll b/test/CodeGen/X86/asm-label.ll index 0c227b1b94..1fc6e2eaf2 100644 --- a/test/CodeGen/X86/asm-label.ll +++ b/test/CodeGen/X86/asm-label.ll @@ -1,4 +1,4 @@ -; RUN: llc -O0 < %s | FileCheck %s +; RUN: llc -mtriple=x86_64-apple-darwin10 -O0 < %s | FileCheck %s ; test that we print a label that we use. We had a bug where ; we would print the jump, but not the label because it was considered diff --git a/test/CodeGen/X86/asm-label2.ll b/test/CodeGen/X86/asm-label2.ll new file mode 100644 index 0000000000..0b5de3403f --- /dev/null +++ b/test/CodeGen/X86/asm-label2.ll @@ -0,0 +1,22 @@ +; RUN: llc -mtriple=x86_64-apple-darwin10 -O0 < %s | FileCheck %s + +; test that we print a label that we use. We had a bug where +; we would print the jump, but not the label because it was considered +; a fall through. + +; CHECK: jmp LBB0_1 +; CHECK: LBB0_1: + +define void @foobar() { +entry: + invoke void @_zed() + to label %invoke.cont unwind label %lpad + +invoke.cont: ; preds = %entry + ret void + +lpad: ; preds = %entry + unreachable +} + +declare void @_zed() ssp align 2 |