Changes in directory llvm/lib/Transforms/Scalar:
LoopRotation.cpp updated: 1.3 -> 1.4 --- Log message: Fix future bug. Of course, Chris spotted this. Handle Argument or Undef as an incoming PHI value. --- Diffs of the changes: (+12 -11) LoopRotation.cpp | 23 ++++++++++++----------- 1 files changed, 12 insertions(+), 11 deletions(-) Index: llvm/lib/Transforms/Scalar/LoopRotation.cpp diff -u llvm/lib/Transforms/Scalar/LoopRotation.cpp:1.3 llvm/lib/Transforms/Scalar/LoopRotation.cpp:1.4 --- llvm/lib/Transforms/Scalar/LoopRotation.cpp:1.3 Mon Apr 9 11:21:29 2007 +++ llvm/lib/Transforms/Scalar/LoopRotation.cpp Mon Apr 9 11:41:46 2007 @@ -369,7 +369,6 @@ return true; } - /// Make sure all Exit block PHINodes have required incoming values. /// If incoming value is constant or defined outside the loop then /// PHINode may not have an entry for new pre-header. @@ -382,20 +381,22 @@ if (!PN) break; - if (PN->getBasicBlockIndex(NewPreHeader) == -1) { - Value *V = PN->getIncomingValueForBlock(OrigHeader); - if (isa<Constant>(V)) - PN->addIncoming(V, NewPreHeader); - else { - RenameData *ILoopHeaderInfo = findReplacementData(cast<Instruction>(V)); - assert (ILoopHeaderInfo && ILoopHeaderInfo->PreHeader && "Missing New Preheader Instruction"); - PN->addIncoming(ILoopHeaderInfo->PreHeader, NewPreHeader); - } + // There is already one incoming value from new pre-header block. + if (PN->getBasicBlockIndex(NewPreHeader) != -1) + return; + + RenameData *ILoopHeaderInfo; + Value *V = PN->getIncomingValueForBlock(OrigHeader); + if (isa<Instruction>(V) && + (ILoopHeaderInfo = findReplacementData(cast<Instruction>(V)))) { + assert (ILoopHeaderInfo->PreHeader && "Missing New Preheader Instruction"); + PN->addIncoming(ILoopHeaderInfo->PreHeader, NewPreHeader); + } else { + PN->addIncoming(V, NewPreHeader); } } } - /// Initialize local data void LoopRotate::initialize() { L = NULL; _______________________________________________ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits