forked from OSchip/llvm-project
Move FastISel's HandlePHINodesInSuccessorBlocks call down into FastISel
itself too. llvm-svn: 102176
This commit is contained in:
parent
5725580bb6
commit
6e9a8fcc28
|
@ -107,14 +107,6 @@ public:
|
|||
/// index value.
|
||||
unsigned getRegForGEPIndex(const Value *V);
|
||||
|
||||
/// HandlePHINodesInSuccessorBlocks - Handle PHI nodes in successor blocks.
|
||||
/// Emit code to ensure constants are copied into registers when needed.
|
||||
/// Remember the virtual registers that need to be added to the Machine PHI
|
||||
/// nodes as input. We cannot just directly add them, because expansion
|
||||
/// might result in multiple MBB's for one BB. As such, the start of the
|
||||
/// BB might correspond to a different MBB than the end.
|
||||
bool HandlePHINodesInSuccessorBlocks(const BasicBlock *LLVMBB);
|
||||
|
||||
virtual ~FastISel();
|
||||
|
||||
protected:
|
||||
|
@ -311,6 +303,14 @@ private:
|
|||
bool SelectBitCast(const User *I);
|
||||
|
||||
bool SelectCast(const User *I, unsigned Opcode);
|
||||
|
||||
/// HandlePHINodesInSuccessorBlocks - Handle PHI nodes in successor blocks.
|
||||
/// Emit code to ensure constants are copied into registers when needed.
|
||||
/// Remember the virtual registers that need to be added to the Machine PHI
|
||||
/// nodes as input. We cannot just directly add them, because expansion
|
||||
/// might result in multiple MBB's for one BB. As such, the start of the
|
||||
/// BB might correspond to a different MBB than the end.
|
||||
bool HandlePHINodesInSuccessorBlocks(const BasicBlock *LLVMBB);
|
||||
};
|
||||
|
||||
}
|
||||
|
|
|
@ -553,6 +553,12 @@ bool FastISel::SelectBitCast(const User *I) {
|
|||
|
||||
bool
|
||||
FastISel::SelectInstruction(const Instruction *I) {
|
||||
// Just before the terminator instruction, insert instructions to
|
||||
// feed PHI nodes in successor blocks.
|
||||
if (isa<TerminatorInst>(I))
|
||||
if (!HandlePHINodesInSuccessorBlocks(I->getParent()))
|
||||
return false;
|
||||
|
||||
DL = I->getDebugLoc();
|
||||
|
||||
// First, try doing target-independent selection.
|
||||
|
|
|
@ -751,20 +751,6 @@ void SelectionDAGISel::SelectAllBasicBlocks(const Function &Fn) {
|
|||
FastIS->startNewBlock(BB);
|
||||
// Do FastISel on as many instructions as possible.
|
||||
for (; BI != End; ++BI) {
|
||||
// Just before the terminator instruction, insert instructions to
|
||||
// feed PHI nodes in successor blocks.
|
||||
if (isa<TerminatorInst>(BI))
|
||||
if (!FastIS->HandlePHINodesInSuccessorBlocks(LLVMBB)) {
|
||||
++NumFastIselFailures;
|
||||
if (EnableFastISelVerbose || EnableFastISelAbort) {
|
||||
dbgs() << "FastISel miss: ";
|
||||
BI->dump();
|
||||
}
|
||||
assert(!EnableFastISelAbort &&
|
||||
"FastISel didn't handle a PHI in a successor");
|
||||
break;
|
||||
}
|
||||
|
||||
// Try to select the instruction with FastISel.
|
||||
if (FastIS->SelectInstruction(BI))
|
||||
continue;
|
||||
|
|
Loading…
Reference in New Issue