MEGAPATCH checkin.
For details, See: docs/2002-06-25-MegaPatchInfo.txt
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@2778 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/CodeGen/InstrSelection/InstrForest.cpp b/lib/CodeGen/InstrSelection/InstrForest.cpp
index 4a08c24..a95f1e3 100644
--- a/lib/CodeGen/InstrSelection/InstrForest.cpp
+++ b/lib/CodeGen/InstrSelection/InstrForest.cpp
@@ -25,7 +25,6 @@
#include "llvm/iTerminators.h"
#include "llvm/iMemory.h"
#include "llvm/Constant.h"
-#include "llvm/BasicBlock.h"
#include "llvm/Type.h"
#include "llvm/CodeGen/MachineInstr.h"
#include "Support/STLExtras.h"
@@ -188,10 +187,9 @@
InstrForest::InstrForest(Function *F)
{
- for (Function::iterator FI = F->begin(), FE = F->end(); FI != FE; ++FI) {
- BasicBlock *BB = *FI;
- for_each(BB->begin(), BB->end(),
- bind_obj(this, &InstrForest::buildTreeForInstruction));
+ for (Function::iterator BB = F->begin(), FE = F->end(); BB != FE; ++BB) {
+ for(BasicBlock::iterator I = BB->begin(), E = BB->end(); I != E; ++I)
+ buildTreeForInstruction(I);
}
}
diff --git a/lib/CodeGen/InstrSelection/InstrSelection.cpp b/lib/CodeGen/InstrSelection/InstrSelection.cpp
index 614c5f6..b27f902 100644
--- a/lib/CodeGen/InstrSelection/InstrSelection.cpp
+++ b/lib/CodeGen/InstrSelection/InstrSelection.cpp
@@ -123,14 +123,10 @@
// Record instructions in the vector for each basic block
//
for (Function::iterator BI = F->begin(), BE = F->end(); BI != BE; ++BI)
- {
- MachineCodeForBasicBlock& bbMvec = (*BI)->getMachineInstrVec();
- for (BasicBlock::iterator II = (*BI)->begin(); II != (*BI)->end(); ++II)
- {
- MachineCodeForInstruction &mvec =MachineCodeForInstruction::get(*II);
- for (unsigned i=0; i < mvec.size(); i++)
- bbMvec.push_back(mvec[i]);
- }
+ for (BasicBlock::iterator II = BI->begin(); II != BI->end(); ++II) {
+ MachineCodeForInstruction &mvec =MachineCodeForInstruction::get(II);
+ for (unsigned i=0; i < mvec.size(); i++)
+ BI->getMachineInstrVec().push_back(mvec[i]);
}
// Insert phi elimination code -- added by Ruchira
@@ -191,49 +187,38 @@
{
// for all basic blocks in function
//
- for (Function::iterator BI = F->begin(); BI != F->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 (PHINode *PN = dyn_cast<PHINode>(*IIt)) {
- // FIXME: This is probably wrong...
- Value *PhiCpRes = new PHINode(PN->getType(), "PhiCp:");
+ for (Function::iterator BB = F->begin(); BB != F->end(); ++BB) {
+ BasicBlock::InstListType &InstList = BB->getInstList();
+ for (BasicBlock::iterator IIt = InstList.begin();
+ PHINode *PN = dyn_cast<PHINode>(&*IIt); ++IIt) {
+ // FIXME: This is probably wrong...
+ Value *PhiCpRes = new PHINode(PN->getType(), "PhiCp:");
- // 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
- vector<MachineInstr*> mvec, CpVec;
- target.getRegInfo().cpValue2Value(PN->getIncomingValue(i), PhiCpRes,
- mvec);
- for (vector<MachineInstr*>::iterator MI=mvec.begin();
- MI != mvec.end(); ++MI)
- {
- vector<MachineInstr*> CpVec2 =
- FixConstantOperandsForInstr(PN, *MI, target);
- CpVec2.push_back(*MI);
- CpVec.insert(CpVec.end(), CpVec2.begin(), CpVec2.end());
- }
-
- InsertPhiElimInstructions(PN->getIncomingBlock(i), CpVec);
- }
+ // 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
+ vector<MachineInstr*> mvec, CpVec;
+ target.getRegInfo().cpValue2Value(PN->getIncomingValue(i), PhiCpRes,
+ mvec);
+ for (vector<MachineInstr*>::iterator MI=mvec.begin();
+ MI != mvec.end(); ++MI) {
+ vector<MachineInstr*> CpVec2 =
+ FixConstantOperandsForInstr(PN, *MI, target);
+ CpVec2.push_back(*MI);
+ CpVec.insert(CpVec.end(), CpVec2.begin(), CpVec2.end());
+ }
- vector<MachineInstr*> mvec;
- target.getRegInfo().cpValue2Value(PhiCpRes, PN, mvec);
-
- // get an iterator to machine instructions in the BB
- MachineCodeForBasicBlock& bbMvec = BB->getMachineInstrVec();
-
- bbMvec.insert( bbMvec.begin(), mvec.begin(), mvec.end());
+ InsertPhiElimInstructions(PN->getIncomingBlock(i), CpVec);
}
- else break; // since PHI nodes can only be at the top
+ vector<MachineInstr*> mvec;
+ target.getRegInfo().cpValue2Value(PhiCpRes, PN, mvec);
+
+ // get an iterator to machine instructions in the BB
+ MachineCodeForBasicBlock& bbMvec = BB->getMachineInstrVec();
+
+ bbMvec.insert(bbMvec.begin(), mvec.begin(), mvec.end());
} // for each Phi Instr in BB
} // for all BBs in function
}
diff --git a/lib/CodeGen/MachineFunction.cpp b/lib/CodeGen/MachineFunction.cpp
index 06e0666..4d50f89 100644
--- a/lib/CodeGen/MachineFunction.cpp
+++ b/lib/CodeGen/MachineFunction.cpp
@@ -60,43 +60,40 @@
{
const MachineFrameInfo& frameInfo = target.getFrameInfo();
- unsigned int maxSize = 0;
+ unsigned maxSize = 0;
- for (Function::const_iterator MI = F->begin(), ME = F->end(); MI != ME; ++MI)
- {
- const BasicBlock *BB = *MI;
- for (BasicBlock::const_iterator I = BB->begin(), E = BB->end(); I!=E; ++I)
- if (CallInst *callInst = dyn_cast<CallInst>(*I))
- {
- unsigned int numOperands = callInst->getNumOperands() - 1;
- int numExtra =(int)numOperands-frameInfo.getNumFixedOutgoingArgs();
- if (numExtra <= 0)
- continue;
-
- unsigned int sizeForThisCall;
- if (frameInfo.argsOnStackHaveFixedSize())
- {
- int argSize = frameInfo.getSizeOfEachArgOnStack();
- sizeForThisCall = numExtra * (unsigned) argSize;
- }
- else
- {
- assert(0 && "UNTESTED CODE: Size per stack argument is not "
- "fixed on this architecture: use actual arg sizes to "
- "compute MaxOptionalArgsSize");
- sizeForThisCall = 0;
- for (unsigned i=0; i < numOperands; ++i)
- sizeForThisCall += target.findOptimalStorageSize(callInst->
- getOperand(i)->getType());
- }
-
- if (maxSize < sizeForThisCall)
- maxSize = sizeForThisCall;
-
- if (((int) maxOptionalNumArgs) < numExtra)
- maxOptionalNumArgs = (unsigned) numExtra;
- }
- }
+ for (Function::const_iterator BB = F->begin(), BBE = F->end(); BB !=BBE; ++BB)
+ for (BasicBlock::const_iterator I = BB->begin(), E = BB->end(); I != E; ++I)
+ if (const CallInst *callInst = dyn_cast<CallInst>(&*I))
+ {
+ unsigned numOperands = callInst->getNumOperands() - 1;
+ int numExtra = (int)numOperands-frameInfo.getNumFixedOutgoingArgs();
+ if (numExtra <= 0)
+ continue;
+
+ unsigned int sizeForThisCall;
+ if (frameInfo.argsOnStackHaveFixedSize())
+ {
+ int argSize = frameInfo.getSizeOfEachArgOnStack();
+ sizeForThisCall = numExtra * (unsigned) argSize;
+ }
+ else
+ {
+ assert(0 && "UNTESTED CODE: Size per stack argument is not "
+ "fixed on this architecture: use actual arg sizes to "
+ "compute MaxOptionalArgsSize");
+ sizeForThisCall = 0;
+ for (unsigned i = 0; i < numOperands; ++i)
+ sizeForThisCall += target.findOptimalStorageSize(callInst->
+ getOperand(i)->getType());
+ }
+
+ if (maxSize < sizeForThisCall)
+ maxSize = sizeForThisCall;
+
+ if ((int)maxOptionalNumArgs < numExtra)
+ maxOptionalNumArgs = (unsigned) numExtra;
+ }
return maxSize;
}
@@ -278,12 +275,11 @@
std::cerr << "\n" << method->getReturnType()
<< " \"" << method->getName() << "\"\n";
- for (Function::const_iterator BI = method->begin(); BI != method->end(); ++BI)
+ for (Function::const_iterator BB = method->begin(); BB != method->end(); ++BB)
{
- BasicBlock* bb = *BI;
- std::cerr << "\n" << bb->getName() << " (" << bb << ")" << ":\n";
+ std::cerr << "\n" << BB->getName() << " (" << *BB << ")" << ":\n";
- MachineCodeForBasicBlock& mvec = bb->getMachineInstrVec();
+ MachineCodeForBasicBlock& mvec = BB->getMachineInstrVec();
for (unsigned i=0; i < mvec.size(); i++)
std::cerr << "\t" << *mvec[i];
}