Changes in directory llvm/lib/Transforms/Scalar:
LoopRotation.cpp updated: 1.4 -> 1.5 --- Log message: Simpler for() loops. --- Diffs of the changes: (+17 -23) LoopRotation.cpp | 40 +++++++++++++++++----------------------- 1 files changed, 17 insertions(+), 23 deletions(-) Index: llvm/lib/Transforms/Scalar/LoopRotation.cpp diff -u llvm/lib/Transforms/Scalar/LoopRotation.cpp:1.4 llvm/lib/Transforms/Scalar/LoopRotation.cpp:1.5 --- llvm/lib/Transforms/Scalar/LoopRotation.cpp:1.4 Mon Apr 9 11:41:46 2007 +++ llvm/lib/Transforms/Scalar/LoopRotation.cpp Mon Apr 9 12:09:13 2007 @@ -73,7 +73,7 @@ /// Find Replacement information for instruction. Return NULL if it is /// not available. - RenameData *findReplacementData(Instruction *I); + const RenameData *findReplacementData(Instruction *I); private: @@ -179,13 +179,10 @@ NewPreHeader = new BasicBlock("bb.nph", OrigHeader->getParent(), OrigHeader); BasicBlock::iterator I = OrigHeader->begin(), E = OrigHeader->end(); - for (; I != E; ++I) { + PHINode *PN = NULL; + for (; (PN = dyn_cast<PHINode>(I)); ++I) { Instruction *In = I; - PHINode *PN = dyn_cast<PHINode>(I); - if (!PN) - break; - // Create new PHI node with one value incoming from OrigPreHeader. // NewPreHeader has only one predecessor, OrigPreHeader. PHINode *NPH = new PHINode(In->getType(), In->getName()); @@ -235,10 +232,8 @@ // Update new pre-header. // Rename values that are defined in original header to reflects values // defined in new pre-header. - for (SmallVector<RenameData, MAX_HEADER_SIZE>::iterator - I = LoopHeaderInfo.begin(), E = LoopHeaderInfo.end(); I != E; ++I) { - - const RenameData &ILoopHeaderInfo = *I; + for(unsigned LHI = 0, LHI_E = LoopHeaderInfo.size(); LHI != LHI_E; ++LHI) { + const RenameData &ILoopHeaderInfo = LoopHeaderInfo[LHI]; Instruction *In = ILoopHeaderInfo.Original; Instruction *C = ILoopHeaderInfo.PreHeader; @@ -253,12 +248,12 @@ for (unsigned opi = 0, e = In->getNumOperands(); opi != e; ++opi) { if (Instruction *OpPhi = dyn_cast<PHINode>(In->getOperand(opi))) { - if (RenameData *D = findReplacementData(OpPhi)) + if (const RenameData *D = findReplacementData(OpPhi)) C->setOperand(opi, D->PreHeader); } else if (Instruction *OpInsn = dyn_cast<Instruction>(In->getOperand(opi))) { - if (RenameData *D = findReplacementData(OpInsn)) + if (const RenameData *D = findReplacementData(OpInsn)) C->setOperand(opi, D->PreHeader); } } @@ -282,10 +277,9 @@ // 2) Inside loop but not in original header // // Replace this use to reflect definition from new header. - for (SmallVector<RenameData, MAX_HEADER_SIZE>::iterator - I = LoopHeaderInfo.begin(), E = LoopHeaderInfo.end(); I != E; ++I) { + for(unsigned LHI = 0, LHI_E = LoopHeaderInfo.size(); LHI != LHI_E; ++LHI) { + const RenameData &ILoopHeaderInfo = LoopHeaderInfo[LHI]; - const RenameData &ILoopHeaderInfo = *I; if (!ILoopHeaderInfo.Header) continue; @@ -318,7 +312,7 @@ if (PU->getBasicBlockIndex(NewHeader) != -1 && PU->getIncomingValueForBlock(NewHeader) == U) continue; - + U->replaceUsesOfWith(OldPhi, NewPhi); continue; } @@ -385,7 +379,7 @@ if (PN->getBasicBlockIndex(NewPreHeader) != -1) return; - RenameData *ILoopHeaderInfo; + const RenameData *ILoopHeaderInfo; Value *V = PN->getIncomingValueForBlock(OrigHeader); if (isa<Instruction>(V) && (ILoopHeaderInfo = findReplacementData(cast<Instruction>(V)))) { @@ -427,13 +421,13 @@ /// Find Replacement information for instruction. Return NULL if it is /// not available. -RenameData *LoopRotate::findReplacementData(Instruction *In) { +const RenameData *LoopRotate::findReplacementData(Instruction *In) { // Since LoopHeaderInfo is small, linear walk is OK. - for (SmallVector<RenameData, MAX_HEADER_SIZE>::iterator - I = LoopHeaderInfo.begin(), E = LoopHeaderInfo.end(); I != E; ++I) - if (I->Original == In) - return &(*I); - + for(unsigned LHI = 0, LHI_E = LoopHeaderInfo.size(); LHI != LHI_E; ++LHI) { + const RenameData &ILoopHeaderInfo = LoopHeaderInfo[LHI]; + if (ILoopHeaderInfo.Original == In) + return &ILoopHeaderInfo; + } return NULL; } _______________________________________________ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits