Sink SelectionDAGBuilder's HandlePHINodesInSuccessorBlocks down
into SelectionDAGBuilder itself. llvm-svn: 102128
This commit is contained in:
parent
ea2744f4dc
commit
5b43aa0ddd
|
@ -615,6 +615,10 @@ void SelectionDAGBuilder::AssignOrderingToNode(const SDNode *Node) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void SelectionDAGBuilder::visit(const Instruction &I) {
|
void SelectionDAGBuilder::visit(const Instruction &I) {
|
||||||
|
// Set up outgoing PHI node register values before emitting the terminator.
|
||||||
|
if (isa<TerminatorInst>(&I))
|
||||||
|
HandlePHINodesInSuccessorBlocks(I.getParent());
|
||||||
|
|
||||||
CurDebugLoc = I.getDebugLoc();
|
CurDebugLoc = I.getDebugLoc();
|
||||||
|
|
||||||
visit(I.getOpcode(), I);
|
visit(I.getOpcode(), I);
|
||||||
|
|
|
@ -369,8 +369,6 @@ public:
|
||||||
void LowerCallTo(ImmutableCallSite CS, SDValue Callee, bool IsTailCall,
|
void LowerCallTo(ImmutableCallSite CS, SDValue Callee, bool IsTailCall,
|
||||||
MachineBasicBlock *LandingPad = NULL);
|
MachineBasicBlock *LandingPad = NULL);
|
||||||
|
|
||||||
void HandlePHINodesInSuccessorBlocks(const BasicBlock *LLVMBB);
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
// Terminator instructions.
|
// Terminator instructions.
|
||||||
void visitRet(const ReturnInst &I);
|
void visitRet(const ReturnInst &I);
|
||||||
|
@ -495,6 +493,8 @@ private:
|
||||||
|
|
||||||
const char *implVisitBinaryAtomic(const CallInst& I, ISD::NodeType Op);
|
const char *implVisitBinaryAtomic(const CallInst& I, ISD::NodeType Op);
|
||||||
const char *implVisitAluOverflow(const CallInst &I, ISD::NodeType Op);
|
const char *implVisitAluOverflow(const CallInst &I, ISD::NodeType Op);
|
||||||
|
|
||||||
|
void HandlePHINodesInSuccessorBlocks(const BasicBlock *LLVMBB);
|
||||||
};
|
};
|
||||||
|
|
||||||
} // end namespace llvm
|
} // end namespace llvm
|
||||||
|
|
|
@ -233,21 +233,9 @@ SelectionDAGISel::SelectBasicBlock(MachineBasicBlock *BB,
|
||||||
// Lower all of the non-terminator instructions. If a call is emitted
|
// Lower all of the non-terminator instructions. If a call is emitted
|
||||||
// as a tail call, cease emitting nodes for this block. Terminators
|
// as a tail call, cease emitting nodes for this block. Terminators
|
||||||
// are handled below.
|
// are handled below.
|
||||||
for (BasicBlock::const_iterator I = Begin;
|
for (BasicBlock::const_iterator I = Begin; I != End && !SDB->HasTailCall; ++I)
|
||||||
I != End && !SDB->HasTailCall && !isa<TerminatorInst>(I);
|
|
||||||
++I)
|
|
||||||
SDB->visit(*I);
|
SDB->visit(*I);
|
||||||
|
|
||||||
if (!SDB->HasTailCall) {
|
|
||||||
// Handle PHI nodes in successor blocks.
|
|
||||||
if (End == LLVMBB->end()) {
|
|
||||||
SDB->HandlePHINodesInSuccessorBlocks(LLVMBB);
|
|
||||||
|
|
||||||
// Lower the terminator after the copies are emitted.
|
|
||||||
SDB->visit(*LLVMBB->getTerminator());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Make sure the root of the DAG is up-to-date.
|
// Make sure the root of the DAG is up-to-date.
|
||||||
CurDAG->setRoot(SDB->getControlRoot());
|
CurDAG->setRoot(SDB->getControlRoot());
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue