diff options
| author | Evan Cheng <evan.cheng@apple.com> | 2009-06-15 21:24:34 +0000 |
|---|---|---|
| committer | Evan Cheng <evan.cheng@apple.com> | 2009-06-15 21:24:34 +0000 |
| commit | b9bff5880a34c105f643fb7660c26a07c4257bf3 (patch) | |
| tree | 761b40014439758d3a442e44829c376a6e571f8f /llvm | |
| parent | ad0dba582f94b2d3571b344ff746ab75c4c62b52 (diff) | |
| download | bcm5719-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.cpp | 13 | ||||
| -rw-r--r-- | llvm/test/CodeGen/ARM/ifcvt9.ll | 12 |
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 +} |

