Don't send PHI nodes down to SelectionDAGBuilder of FastISel, since

they end up doing nothing.

llvm-svn: 101904
This commit is contained in:
Dan Gohman 2010-04-20 15:00:41 +00:00
parent f0490a0b8e
commit 3915c2cc7c
4 changed files with 10 additions and 6 deletions

View File

@ -52,6 +52,7 @@
#include "llvm/Target/TargetInstrInfo.h"
#include "llvm/Target/TargetLowering.h"
#include "llvm/Target/TargetMachine.h"
#include "llvm/Support/ErrorHandling.h"
#include "FunctionLoweringInfo.h"
using namespace llvm;
@ -692,10 +693,6 @@ FastISel::SelectOperator(const User *I, unsigned Opcode) {
// Nothing to emit.
return true;
case Instruction::PHI:
// PHI nodes are already emitted.
return true;
case Instruction::Alloca:
// FunctionLowering has the static-sized case covered.
if (StaticAllocaMap.count(cast<AllocaInst>(I)))
@ -735,6 +732,9 @@ FastISel::SelectOperator(const User *I, unsigned Opcode) {
return true;
}
case Instruction::PHI:
llvm_unreachable("FastISel shouldn't visit PHI nodes!");
default:
// Unhandled instruction. Halt "fast" selection and bail.
return false;

View File

@ -621,6 +621,10 @@ void SelectionDAGBuilder::visit(const Instruction &I) {
CurDebugLoc = DebugLoc();
}
void SelectionDAGBuilder::visitPHI(const PHINode &) {
llvm_unreachable("SelectionDAGBuilder shouldn't visit PHI nodes!");
}
void SelectionDAGBuilder::visit(unsigned Opcode, const User &I) {
// Note: this doesn't use InstVisitor, because it has to work with
// ConstantExpr's in addition to instructions.

View File

@ -468,7 +468,7 @@ private:
void visitAlloca(const AllocaInst &I);
void visitLoad(const LoadInst &I);
void visitStore(const StoreInst &I);
void visitPHI(const PHINode &I) { } // PHI nodes are handled specially.
void visitPHI(const PHINode &I);
void visitCall(const CallInst &I);
bool visitMemCmpCall(const CallInst &I);

View File

@ -728,7 +728,7 @@ void SelectionDAGISel::SelectAllBasicBlocks(const Function &Fn) {
const BasicBlock *LLVMBB = &*I;
MachineBasicBlock *BB = FuncInfo->MBBMap[LLVMBB];
BasicBlock::const_iterator const Begin = LLVMBB->begin();
BasicBlock::const_iterator const Begin = LLVMBB->getFirstNonPHI();
BasicBlock::const_iterator const End = LLVMBB->end();
BasicBlock::const_iterator BI = Begin;