OSDN Git Service

Really fix the fall-through logic.
authorRafael Espindola <rafael.espindola@gmail.com>
Sun, 12 Jun 2011 05:57:01 +0000 (05:57 +0000)
committerRafael Espindola <rafael.espindola@gmail.com>
Sun, 12 Jun 2011 05:57:01 +0000 (05:57 +0000)
Add a triple to the tests.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@132885 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/AsmPrinter/AsmPrinter.cpp
test/CodeGen/X86/asm-label.ll
test/CodeGen/X86/asm-label2.ll [new file with mode: 0644]

index 00f3501..f324148 100644 (file)
@@ -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;
index 0c227b1..1fc6e2e 100644 (file)
@@ -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 (file)
index 0000000..0b5de34
--- /dev/null
@@ -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