diff options
author | Rafael Espindola <rafael.espindola@gmail.com> | 2011-06-12 05:57:01 +0000 |
---|---|---|
committer | Rafael Espindola <rafael.espindola@gmail.com> | 2011-06-12 05:57:01 +0000 |
commit | 1edc08b09ff723f3ff80dba28401b58b3ee4569e (patch) | |
tree | 4341fb8dcc54682a991986e1327d973e4d5311c7 | |
parent | c1e903ceb3cfc3a091a8d3c0fd9ec7243f36584c (diff) |
Really fix the fall-through logic.
Add a triple to the tests.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@132885 91177308-0d34-0410-b5e6-96231b3b80d8
-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 |