summaryrefslogtreecommitdiffstats
path: root/llvm
diff options
context:
space:
mode:
authorEvan Cheng <evan.cheng@apple.com>2009-06-15 21:24:34 +0000
committerEvan Cheng <evan.cheng@apple.com>2009-06-15 21:24:34 +0000
commitb9bff5880a34c105f643fb7660c26a07c4257bf3 (patch)
tree761b40014439758d3a442e44829c376a6e571f8f /llvm
parentad0dba582f94b2d3571b344ff746ab75c4c62b52 (diff)
downloadbcm5719-llvm-b9bff5880a34c105f643fb7660c26a07c4257bf3.tar.gz
bcm5719-llvm-b9bff5880a34c105f643fb7660c26a07c4257bf3.zip
ifcvt should ignore cfg where true and false successors are the same.
llvm-svn: 73423
Diffstat (limited to 'llvm')
-rw-r--r--llvm/lib/CodeGen/IfConversion.cpp13
-rw-r--r--llvm/test/CodeGen/ARM/ifcvt9.ll12
2 files changed, 24 insertions, 1 deletions
diff --git a/llvm/lib/CodeGen/IfConversion.cpp b/llvm/lib/CodeGen/IfConversion.cpp
index 1d0887f843d..4d5c3c2c7dc 100644
--- a/llvm/lib/CodeGen/IfConversion.cpp
+++ b/llvm/lib/CodeGen/IfConversion.cpp
@@ -547,7 +547,11 @@ void IfConverter::ScanInstructions(BBInfo &BBI) {
// fallthrough.
if (!BBI.FalseBB)
BBI.FalseBB = findFalseBlock(BBI.BB, BBI.TrueBB);
- assert(BBI.FalseBB && "Expected to find the fallthrough block!");
+ if (!BBI.FalseBB) {
+ // Malformed bcc? True and false blocks are the same?
+ BBI.IsUnpredicable = true;
+ return;
+ }
}
// Then scan all the instructions.
@@ -663,6 +667,13 @@ IfConverter::BBInfo &IfConverter::AnalyzeBlock(MachineBasicBlock *BB,
return BBI;
}
+ // Do not ifcvt if true and false fallthrough blocks are the same.
+ if (!BBI.FalseBB) {
+ BBI.IsBeingAnalyzed = false;
+ BBI.IsAnalyzed = true;
+ return BBI;
+ }
+
BBInfo &TrueBBI = AnalyzeBlock(BBI.TrueBB, Tokens);
BBInfo &FalseBBI = AnalyzeBlock(BBI.FalseBB, Tokens);
diff --git a/llvm/test/CodeGen/ARM/ifcvt9.ll b/llvm/test/CodeGen/ARM/ifcvt9.ll
new file mode 100644
index 00000000000..bbd2f2ed621
--- /dev/null
+++ b/llvm/test/CodeGen/ARM/ifcvt9.ll
@@ -0,0 +1,12 @@
+; RUN: llvm-as < %s | llc -march=arm
+
+define fastcc void @t() nounwind {
+entry:
+ br i1 undef, label %bb.i.i3, label %growMapping.exit
+
+bb.i.i3: ; preds = %entry
+ unreachable
+
+growMapping.exit: ; preds = %entry
+ unreachable
+}
OpenPOWER on IntegriCloud