Changed phi elimination code

llvm-svn: 1311
This commit is contained in:
Ruchira Sasanka 2001-11-15 00:27:14 +00:00
parent 3fb79e61c2
commit c5989f645b
1 changed files with 64 additions and 1 deletions

View File

@ -180,7 +180,7 @@ void InsertPhiElimInst(BasicBlock *BB, MachineInstr *CpMI) {
}
#if 0
//-------------------------------------------------------------------------
// This method inserts phi elimination code for all BBs in a method
//-------------------------------------------------------------------------
@ -224,6 +224,69 @@ void InsertCode4AllPhisInMeth(Method *method, TargetMachine &target) {
} // for all BBs in method
}
#endif
//-------------------------------------------------------------------------
// This method inserts phi elimination code for all BBs in a method
//-------------------------------------------------------------------------
void InsertCode4AllPhisInMeth(Method *method, TargetMachine &target) {
// for all basic blocks in method
//
for (Method::iterator BI = method->begin(); BI != method->end(); ++BI) {
BasicBlock *BB = *BI;
const BasicBlock::InstListType &InstList = BB->getInstList();
BasicBlock::InstListType::const_iterator IIt = InstList.begin();
// for all instructions in the basic block
//
for( ; IIt != InstList.end(); ++IIt ) {
if( (*IIt)->getOpcode() == Instruction::PHINode ) {
PHINode *PN = (PHINode *) (*IIt);
Value *PhiCpRes =
new Value(PN->getType(), PN->getValueType() );
// for each incoming value of the phi, insert phi elimination
//
for (unsigned i = 0; i < PN->getNumIncomingValues(); ++i) {
// insert the copy instruction to the predecessor BB
MachineInstr *CpMI =
target.getRegInfo().cpValue2Value(PN->getIncomingValue(i),
PhiCpRes);
InsertPhiElimInst(PN->getIncomingBlock(i), CpMI);
}
MachineInstr *CpMI2 =
target.getRegInfo().cpValue2Value(PhiCpRes, PN);
// get an iterator to machine instructions in the BB
MachineCodeForBasicBlock& bbMvec = BB->getMachineInstrVec();
bbMvec.insert( bbMvec.begin(), CpMI2);
}
else break; // since PHI nodes can only be at the top
} // for each Phi Instr in BB
} // for all BBs in method
}