From 6f2766d59744bb3d48867f3151643eac7111e773 Mon Sep 17 00:00:00 2001 From: Dan Gohman Date: Tue, 19 Aug 2008 22:31:46 +0000 Subject: [PATCH] Support unconditional fall-through branches in FastISel. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@55014 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/CodeGen/SelectionDAG/FastISel.cpp | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/lib/CodeGen/SelectionDAG/FastISel.cpp b/lib/CodeGen/SelectionDAG/FastISel.cpp index 5a7c8964750..ab6c80e1827 100644 --- a/lib/CodeGen/SelectionDAG/FastISel.cpp +++ b/lib/CodeGen/SelectionDAG/FastISel.cpp @@ -11,6 +11,7 @@ // //===----------------------------------------------------------------------===// +#include "llvm/Instructions.h" #include "llvm/CodeGen/FastISel.h" #include "llvm/CodeGen/MachineInstrBuilder.h" #include "llvm/CodeGen/MachineRegisterInfo.h" @@ -41,6 +42,21 @@ FastISel::SelectInstructions(BasicBlock::iterator Begin, BasicBlock::iterator En ValueMap[I] = ResultReg; break; } + case Instruction::Br: { + BranchInst *BI = cast(I); + + // For now, check for and handle just the most trivial case: an + // unconditional fall-through branch. + if (BI->isUnconditional() && + next(MachineFunction::iterator(MBB))->getBasicBlock() == + BI->getSuccessor(0)) { + MBB->addSuccessor(next(MachineFunction::iterator(MBB))); + break; + } + + // Something more complicated. Halt "fast" selection and bail. + return I; + } default: // Unhandled instruction. Halt "fast" selection and bail. return I;