1 //===- LoopSimplify.cpp - Loop Canonicalization Pass ----------------------===//
3 // The LLVM Compiler Infrastructure
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
10 // This pass performs several transformations to transform natural loops into a
11 // simpler form, which makes subsequent analyses and transformations simpler and
14 // Loop pre-header insertion guarantees that there is a single, non-critical
15 // entry edge from outside of the loop to the loop header. This simplifies a
16 // number of analyses and transformations, such as LICM.
18 // Loop exit-block insertion guarantees that all exit blocks from the loop
19 // (blocks which are outside of the loop that have predecessors inside of the
20 // loop) only have predecessors from inside of the loop (and are thus dominated
21 // by the loop header). This simplifies transformations such as store-sinking
22 // that are built into LICM.
24 // This pass also guarantees that loops will have exactly one backedge.
26 // Note that the simplifycfg pass will clean up blocks which are split out but
27 // end up being unnecessary, so usage of this pass should not pessimize
30 // This pass obviously modifies the CFG, but updates loop information and
31 // dominator information.
33 //===----------------------------------------------------------------------===//
35 #define DEBUG_TYPE "loopsimplify"
36 #include "llvm/Transforms/Scalar.h"
37 #include "llvm/Constants.h"
38 #include "llvm/Instructions.h"
39 #include "llvm/Function.h"
40 #include "llvm/LLVMContext.h"
41 #include "llvm/Type.h"
42 #include "llvm/Analysis/AliasAnalysis.h"
43 #include "llvm/Analysis/Dominators.h"
44 #include "llvm/Analysis/LoopInfo.h"
45 #include "llvm/Transforms/Utils/BasicBlockUtils.h"
46 #include "llvm/Transforms/Utils/Local.h"
47 #include "llvm/Support/CFG.h"
48 #include "llvm/Support/Compiler.h"
49 #include "llvm/ADT/SetOperations.h"
50 #include "llvm/ADT/SetVector.h"
51 #include "llvm/ADT/Statistic.h"
52 #include "llvm/ADT/DepthFirstIterator.h"
55 STATISTIC(NumInserted
, "Number of pre-header or exit blocks inserted");
56 STATISTIC(NumNested
, "Number of nested loops split out");
59 struct VISIBILITY_HIDDEN LoopSimplify
: public FunctionPass
{
60 static char ID
; // Pass identification, replacement for typeid
61 LoopSimplify() : FunctionPass(&ID
) {}
63 // AA - If we have an alias analysis object to update, this is it, otherwise
68 virtual bool runOnFunction(Function
&F
);
70 virtual void getAnalysisUsage(AnalysisUsage
&AU
) const {
71 // We need loop information to identify the loops...
72 AU
.addRequiredTransitive
<LoopInfo
>();
73 AU
.addRequiredTransitive
<DominatorTree
>();
75 AU
.addPreserved
<LoopInfo
>();
76 AU
.addPreserved
<DominatorTree
>();
77 AU
.addPreserved
<DominanceFrontier
>();
78 AU
.addPreserved
<AliasAnalysis
>();
79 AU
.addPreservedID(BreakCriticalEdgesID
); // No critical edges added.
82 /// verifyAnalysis() - Verify loop nest.
83 void verifyAnalysis() const {
85 LoopInfo
*NLI
= &getAnalysis
<LoopInfo
>();
86 for (LoopInfo::iterator I
= NLI
->begin(), E
= NLI
->end(); I
!= E
; ++I
) {
87 // Sanity check: Check basic loop invariants.
89 // Check the special guarantees that LoopSimplify makes.
90 assert((*I
)->isLoopSimplifyForm());
96 bool ProcessLoop(Loop
*L
);
97 BasicBlock
*RewriteLoopExitBlock(Loop
*L
, BasicBlock
*Exit
);
98 BasicBlock
*InsertPreheaderForLoop(Loop
*L
);
99 Loop
*SeparateNestedLoop(Loop
*L
);
100 void InsertUniqueBackedgeBlock(Loop
*L
, BasicBlock
*Preheader
);
101 void PlaceSplitBlockCarefully(BasicBlock
*NewBB
,
102 SmallVectorImpl
<BasicBlock
*> &SplitPreds
,
107 char LoopSimplify::ID
= 0;
108 static RegisterPass
<LoopSimplify
>
109 X("loopsimplify", "Canonicalize natural loops", true);
111 // Publically exposed interface to pass...
112 const PassInfo
*const llvm::LoopSimplifyID
= &X
;
113 FunctionPass
*llvm::createLoopSimplifyPass() { return new LoopSimplify(); }
115 /// runOnFunction - Run down all loops in the CFG (recursively, but we could do
116 /// it in any convenient order) inserting preheaders...
118 bool LoopSimplify::runOnFunction(Function
&F
) {
119 bool Changed
= false;
120 LI
= &getAnalysis
<LoopInfo
>();
121 AA
= getAnalysisIfAvailable
<AliasAnalysis
>();
122 DT
= &getAnalysis
<DominatorTree
>();
124 // Check to see that no blocks (other than the header) in loops have
125 // predecessors that are not in loops. This is not valid for natural loops,
126 // but can occur if the blocks are unreachable. Since they are unreachable we
127 // can just shamelessly destroy their terminators to make them not branch into
129 for (Function::iterator BB
= F
.begin(), E
= F
.end(); BB
!= E
; ++BB
) {
130 // This case can only occur for unreachable blocks. Blocks that are
131 // unreachable can't be in loops, so filter those blocks out.
132 if (LI
->getLoopFor(BB
)) continue;
134 bool BlockUnreachable
= false;
135 TerminatorInst
*TI
= BB
->getTerminator();
137 // Check to see if any successors of this block are non-loop-header loops
138 // that are not the header.
139 for (unsigned i
= 0, e
= TI
->getNumSuccessors(); i
!= e
; ++i
) {
140 // If this successor is not in a loop, BB is clearly ok.
141 Loop
*L
= LI
->getLoopFor(TI
->getSuccessor(i
));
144 // If the succ is the loop header, and if L is a top-level loop, then this
145 // is an entrance into a loop through the header, which is also ok.
146 if (L
->getHeader() == TI
->getSuccessor(i
) && L
->getParentLoop() == 0)
149 // Otherwise, this is an entrance into a loop from some place invalid.
150 // Either the loop structure is invalid and this is not a natural loop (in
151 // which case the compiler is buggy somewhere else) or BB is unreachable.
152 BlockUnreachable
= true;
156 // If this block is ok, check the next one.
157 if (!BlockUnreachable
) continue;
159 // Otherwise, this block is dead. To clean up the CFG and to allow later
160 // loop transformations to ignore this case, we delete the edges into the
161 // loop by replacing the terminator.
163 // Remove PHI entries from the successors.
164 for (unsigned i
= 0, e
= TI
->getNumSuccessors(); i
!= e
; ++i
)
165 TI
->getSuccessor(i
)->removePredecessor(BB
);
167 // Add a new unreachable instruction before the old terminator.
168 new UnreachableInst(TI
->getContext(), TI
);
170 // Delete the dead terminator.
171 if (AA
) AA
->deleteValue(TI
);
172 if (!TI
->use_empty())
173 TI
->replaceAllUsesWith(UndefValue::get(TI
->getType()));
174 TI
->eraseFromParent();
178 for (LoopInfo::iterator I
= LI
->begin(), E
= LI
->end(); I
!= E
; ++I
)
179 Changed
|= ProcessLoop(*I
);
184 /// ProcessLoop - Walk the loop structure in depth first order, ensuring that
185 /// all loops have preheaders.
187 bool LoopSimplify::ProcessLoop(Loop
*L
) {
188 bool Changed
= false;
191 // Canonicalize inner loops before outer loops. Inner loop canonicalization
192 // can provide work for the outer loop to canonicalize.
193 for (Loop::iterator I
= L
->begin(), E
= L
->end(); I
!= E
; ++I
)
194 Changed
|= ProcessLoop(*I
);
196 assert(L
->getBlocks()[0] == L
->getHeader() &&
197 "Header isn't first block in loop?");
199 // Does the loop already have a preheader? If so, don't insert one.
200 BasicBlock
*Preheader
= L
->getLoopPreheader();
202 Preheader
= InsertPreheaderForLoop(L
);
207 // Next, check to make sure that all exit nodes of the loop only have
208 // predecessors that are inside of the loop. This check guarantees that the
209 // loop preheader/header will dominate the exit blocks. If the exit block has
210 // predecessors from outside of the loop, split the edge now.
211 SmallVector
<BasicBlock
*, 8> ExitBlocks
;
212 L
->getExitBlocks(ExitBlocks
);
214 SetVector
<BasicBlock
*> ExitBlockSet(ExitBlocks
.begin(), ExitBlocks
.end());
215 for (SetVector
<BasicBlock
*>::iterator I
= ExitBlockSet
.begin(),
216 E
= ExitBlockSet
.end(); I
!= E
; ++I
) {
217 BasicBlock
*ExitBlock
= *I
;
218 for (pred_iterator PI
= pred_begin(ExitBlock
), PE
= pred_end(ExitBlock
);
220 // Must be exactly this loop: no subloops, parent loops, or non-loop preds
222 if (!L
->contains(*PI
)) {
223 RewriteLoopExitBlock(L
, ExitBlock
);
230 // If the header has more than two predecessors at this point (from the
231 // preheader and from multiple backedges), we must adjust the loop.
232 unsigned NumBackedges
= L
->getNumBackEdges();
233 if (NumBackedges
!= 1) {
234 // If this is really a nested loop, rip it out into a child loop. Don't do
235 // this for loops with a giant number of backedges, just factor them into a
236 // common backedge instead.
237 if (NumBackedges
< 8) {
238 if (Loop
*NL
= SeparateNestedLoop(L
)) {
240 // This is a big restructuring change, reprocess the whole loop.
243 // GCC doesn't tail recursion eliminate this.
248 // If we either couldn't, or didn't want to, identify nesting of the loops,
249 // insert a new block that all backedges target, then make it jump to the
251 InsertUniqueBackedgeBlock(L
, Preheader
);
256 // Scan over the PHI nodes in the loop header. Since they now have only two
257 // incoming values (the loop is canonicalized), we may have simplified the PHI
258 // down to 'X = phi [X, Y]', which should be replaced with 'Y'.
260 for (BasicBlock::iterator I
= L
->getHeader()->begin();
261 (PN
= dyn_cast
<PHINode
>(I
++)); )
262 if (Value
*V
= PN
->hasConstantValue(DT
)) {
263 if (AA
) AA
->deleteValue(PN
);
264 PN
->replaceAllUsesWith(V
);
265 PN
->eraseFromParent();
268 // If this loop has muliple exits and the exits all go to the same
269 // block, attempt to merge the exits. This helps several passes, such
270 // as LoopRotation, which do not support loops with multiple exits.
271 // SimplifyCFG also does this (and this code uses the same utility
272 // function), however this code is loop-aware, where SimplifyCFG is
273 // not. That gives it the advantage of being able to hoist
274 // loop-invariant instructions out of the way to open up more
275 // opportunities, and the disadvantage of having the responsibility
276 // to preserve dominator information.
277 if (ExitBlocks
.size() > 1 && L
->getUniqueExitBlock()) {
278 SmallVector
<BasicBlock
*, 8> ExitingBlocks
;
279 L
->getExitingBlocks(ExitingBlocks
);
280 for (unsigned i
= 0, e
= ExitingBlocks
.size(); i
!= e
; ++i
) {
281 BasicBlock
*ExitingBlock
= ExitingBlocks
[i
];
282 if (!ExitingBlock
->getSinglePredecessor()) continue;
283 BranchInst
*BI
= dyn_cast
<BranchInst
>(ExitingBlock
->getTerminator());
284 if (!BI
|| !BI
->isConditional()) continue;
285 CmpInst
*CI
= dyn_cast
<CmpInst
>(BI
->getCondition());
286 if (!CI
|| CI
->getParent() != ExitingBlock
) continue;
288 // Attempt to hoist out all instructions except for the
289 // comparison and the branch.
290 bool AllInvariant
= true;
291 for (BasicBlock::iterator I
= ExitingBlock
->begin(); &*I
!= BI
; ) {
292 Instruction
*Inst
= I
++;
295 if (!L
->makeLoopInvariant(Inst
, Changed
, Preheader
->getTerminator())) {
296 AllInvariant
= false;
300 if (!AllInvariant
) continue;
302 // The block has now been cleared of all instructions except for
303 // a comparison and a conditional branch. SimplifyCFG may be able
305 if (!FoldBranchToCommonDest(BI
)) continue;
307 // Success. The block is now dead, so remove it from the loop,
308 // update the dominator tree and dominance frontier, and delete it.
309 assert(pred_begin(ExitingBlock
) == pred_end(ExitingBlock
));
311 LI
->removeBlock(ExitingBlock
);
313 DominanceFrontier
*DF
= getAnalysisIfAvailable
<DominanceFrontier
>();
314 DomTreeNode
*Node
= DT
->getNode(ExitingBlock
);
315 const std::vector
<DomTreeNodeBase
<BasicBlock
> *> &Children
=
317 for (unsigned k
= 0, g
= Children
.size(); k
!= g
; ++k
) {
318 DT
->changeImmediateDominator(Children
[k
], Node
->getIDom());
319 if (DF
) DF
->changeImmediateDominator(Children
[k
]->getBlock(),
320 Node
->getIDom()->getBlock(),
323 DT
->eraseNode(ExitingBlock
);
324 if (DF
) DF
->removeBlock(ExitingBlock
);
326 BI
->getSuccessor(0)->removePredecessor(ExitingBlock
);
327 BI
->getSuccessor(1)->removePredecessor(ExitingBlock
);
328 ExitingBlock
->eraseFromParent();
335 /// InsertPreheaderForLoop - Once we discover that a loop doesn't have a
336 /// preheader, this method is called to insert one. This method has two phases:
337 /// preheader insertion and analysis updating.
339 BasicBlock
*LoopSimplify::InsertPreheaderForLoop(Loop
*L
) {
340 BasicBlock
*Header
= L
->getHeader();
342 // Compute the set of predecessors of the loop that are not in the loop.
343 SmallVector
<BasicBlock
*, 8> OutsideBlocks
;
344 for (pred_iterator PI
= pred_begin(Header
), PE
= pred_end(Header
);
346 if (!L
->contains(*PI
)) // Coming in from outside the loop?
347 OutsideBlocks
.push_back(*PI
); // Keep track of it...
349 // Split out the loop pre-header.
351 SplitBlockPredecessors(Header
, &OutsideBlocks
[0], OutsideBlocks
.size(),
354 // Make sure that NewBB is put someplace intelligent, which doesn't mess up
355 // code layout too horribly.
356 PlaceSplitBlockCarefully(NewBB
, OutsideBlocks
, L
);
361 /// RewriteLoopExitBlock - Ensure that the loop preheader dominates all exit
362 /// blocks. This method is used to split exit blocks that have predecessors
363 /// outside of the loop.
364 BasicBlock
*LoopSimplify::RewriteLoopExitBlock(Loop
*L
, BasicBlock
*Exit
) {
365 SmallVector
<BasicBlock
*, 8> LoopBlocks
;
366 for (pred_iterator I
= pred_begin(Exit
), E
= pred_end(Exit
); I
!= E
; ++I
)
368 LoopBlocks
.push_back(*I
);
370 assert(!LoopBlocks
.empty() && "No edges coming in from outside the loop?");
371 BasicBlock
*NewBB
= SplitBlockPredecessors(Exit
, &LoopBlocks
[0],
372 LoopBlocks
.size(), ".loopexit",
378 /// AddBlockAndPredsToSet - Add the specified block, and all of its
379 /// predecessors, to the specified set, if it's not already in there. Stop
380 /// predecessor traversal when we reach StopBlock.
381 static void AddBlockAndPredsToSet(BasicBlock
*InputBB
, BasicBlock
*StopBlock
,
382 std::set
<BasicBlock
*> &Blocks
) {
383 std::vector
<BasicBlock
*> WorkList
;
384 WorkList
.push_back(InputBB
);
386 BasicBlock
*BB
= WorkList
.back(); WorkList
.pop_back();
387 if (Blocks
.insert(BB
).second
&& BB
!= StopBlock
)
388 // If BB is not already processed and it is not a stop block then
389 // insert its predecessor in the work list
390 for (pred_iterator I
= pred_begin(BB
), E
= pred_end(BB
); I
!= E
; ++I
) {
391 BasicBlock
*WBB
= *I
;
392 WorkList
.push_back(WBB
);
394 } while(!WorkList
.empty());
397 /// FindPHIToPartitionLoops - The first part of loop-nestification is to find a
398 /// PHI node that tells us how to partition the loops.
399 static PHINode
*FindPHIToPartitionLoops(Loop
*L
, DominatorTree
*DT
,
401 for (BasicBlock::iterator I
= L
->getHeader()->begin(); isa
<PHINode
>(I
); ) {
402 PHINode
*PN
= cast
<PHINode
>(I
);
404 if (Value
*V
= PN
->hasConstantValue(DT
)) {
405 // This is a degenerate PHI already, don't modify it!
406 PN
->replaceAllUsesWith(V
);
407 if (AA
) AA
->deleteValue(PN
);
408 PN
->eraseFromParent();
412 // Scan this PHI node looking for a use of the PHI node by itself.
413 for (unsigned i
= 0, e
= PN
->getNumIncomingValues(); i
!= e
; ++i
)
414 if (PN
->getIncomingValue(i
) == PN
&&
415 L
->contains(PN
->getIncomingBlock(i
)))
416 // We found something tasty to remove.
422 // PlaceSplitBlockCarefully - If the block isn't already, move the new block to
423 // right after some 'outside block' block. This prevents the preheader from
424 // being placed inside the loop body, e.g. when the loop hasn't been rotated.
425 void LoopSimplify::PlaceSplitBlockCarefully(BasicBlock
*NewBB
,
426 SmallVectorImpl
<BasicBlock
*> &SplitPreds
,
428 // Check to see if NewBB is already well placed.
429 Function::iterator BBI
= NewBB
; --BBI
;
430 for (unsigned i
= 0, e
= SplitPreds
.size(); i
!= e
; ++i
) {
431 if (&*BBI
== SplitPreds
[i
])
435 // If it isn't already after an outside block, move it after one. This is
436 // always good as it makes the uncond branch from the outside block into a
439 // Figure out *which* outside block to put this after. Prefer an outside
440 // block that neighbors a BB actually in the loop.
441 BasicBlock
*FoundBB
= 0;
442 for (unsigned i
= 0, e
= SplitPreds
.size(); i
!= e
; ++i
) {
443 Function::iterator BBI
= SplitPreds
[i
];
444 if (++BBI
!= NewBB
->getParent()->end() &&
446 FoundBB
= SplitPreds
[i
];
451 // If our heuristic for a *good* bb to place this after doesn't find
452 // anything, just pick something. It's likely better than leaving it within
455 FoundBB
= SplitPreds
[0];
456 NewBB
->moveAfter(FoundBB
);
460 /// SeparateNestedLoop - If this loop has multiple backedges, try to pull one of
461 /// them out into a nested loop. This is important for code that looks like
466 /// br cond, Loop, Next
468 /// br cond2, Loop, Out
470 /// To identify this common case, we look at the PHI nodes in the header of the
471 /// loop. PHI nodes with unchanging values on one backedge correspond to values
472 /// that change in the "outer" loop, but not in the "inner" loop.
474 /// If we are able to separate out a loop, return the new outer loop that was
477 Loop
*LoopSimplify::SeparateNestedLoop(Loop
*L
) {
478 PHINode
*PN
= FindPHIToPartitionLoops(L
, DT
, AA
);
479 if (PN
== 0) return 0; // No known way to partition.
481 // Pull out all predecessors that have varying values in the loop. This
482 // handles the case when a PHI node has multiple instances of itself as
484 SmallVector
<BasicBlock
*, 8> OuterLoopPreds
;
485 for (unsigned i
= 0, e
= PN
->getNumIncomingValues(); i
!= e
; ++i
)
486 if (PN
->getIncomingValue(i
) != PN
||
487 !L
->contains(PN
->getIncomingBlock(i
)))
488 OuterLoopPreds
.push_back(PN
->getIncomingBlock(i
));
490 BasicBlock
*Header
= L
->getHeader();
491 BasicBlock
*NewBB
= SplitBlockPredecessors(Header
, &OuterLoopPreds
[0],
492 OuterLoopPreds
.size(),
495 // Make sure that NewBB is put someplace intelligent, which doesn't mess up
496 // code layout too horribly.
497 PlaceSplitBlockCarefully(NewBB
, OuterLoopPreds
, L
);
499 // Create the new outer loop.
500 Loop
*NewOuter
= new Loop();
502 // Change the parent loop to use the outer loop as its child now.
503 if (Loop
*Parent
= L
->getParentLoop())
504 Parent
->replaceChildLoopWith(L
, NewOuter
);
506 LI
->changeTopLevelLoop(L
, NewOuter
);
508 // L is now a subloop of our outer loop.
509 NewOuter
->addChildLoop(L
);
511 for (Loop::block_iterator I
= L
->block_begin(), E
= L
->block_end();
513 NewOuter
->addBlockEntry(*I
);
515 // Now reset the header in L, which had been moved by
516 // SplitBlockPredecessors for the outer loop.
517 L
->moveToHeader(Header
);
519 // Determine which blocks should stay in L and which should be moved out to
520 // the Outer loop now.
521 std::set
<BasicBlock
*> BlocksInL
;
522 for (pred_iterator PI
= pred_begin(Header
), E
= pred_end(Header
); PI
!=E
; ++PI
)
523 if (DT
->dominates(Header
, *PI
))
524 AddBlockAndPredsToSet(*PI
, Header
, BlocksInL
);
527 // Scan all of the loop children of L, moving them to OuterLoop if they are
528 // not part of the inner loop.
529 const std::vector
<Loop
*> &SubLoops
= L
->getSubLoops();
530 for (size_t I
= 0; I
!= SubLoops
.size(); )
531 if (BlocksInL
.count(SubLoops
[I
]->getHeader()))
532 ++I
; // Loop remains in L
534 NewOuter
->addChildLoop(L
->removeChildLoop(SubLoops
.begin() + I
));
536 // Now that we know which blocks are in L and which need to be moved to
537 // OuterLoop, move any blocks that need it.
538 for (unsigned i
= 0; i
!= L
->getBlocks().size(); ++i
) {
539 BasicBlock
*BB
= L
->getBlocks()[i
];
540 if (!BlocksInL
.count(BB
)) {
541 // Move this block to the parent, updating the exit blocks sets
542 L
->removeBlockFromLoop(BB
);
544 LI
->changeLoopFor(BB
, NewOuter
);
554 /// InsertUniqueBackedgeBlock - This method is called when the specified loop
555 /// has more than one backedge in it. If this occurs, revector all of these
556 /// backedges to target a new basic block and have that block branch to the loop
557 /// header. This ensures that loops have exactly one backedge.
559 void LoopSimplify::InsertUniqueBackedgeBlock(Loop
*L
, BasicBlock
*Preheader
) {
560 assert(L
->getNumBackEdges() > 1 && "Must have > 1 backedge!");
562 // Get information about the loop
563 BasicBlock
*Header
= L
->getHeader();
564 Function
*F
= Header
->getParent();
566 // Figure out which basic blocks contain back-edges to the loop header.
567 std::vector
<BasicBlock
*> BackedgeBlocks
;
568 for (pred_iterator I
= pred_begin(Header
), E
= pred_end(Header
); I
!= E
; ++I
)
569 if (*I
!= Preheader
) BackedgeBlocks
.push_back(*I
);
571 // Create and insert the new backedge block...
572 BasicBlock
*BEBlock
= BasicBlock::Create(Header
->getContext(),
573 Header
->getName()+".backedge", F
);
574 BranchInst
*BETerminator
= BranchInst::Create(Header
, BEBlock
);
576 // Move the new backedge block to right after the last backedge block.
577 Function::iterator InsertPos
= BackedgeBlocks
.back(); ++InsertPos
;
578 F
->getBasicBlockList().splice(InsertPos
, F
->getBasicBlockList(), BEBlock
);
580 // Now that the block has been inserted into the function, create PHI nodes in
581 // the backedge block which correspond to any PHI nodes in the header block.
582 for (BasicBlock::iterator I
= Header
->begin(); isa
<PHINode
>(I
); ++I
) {
583 PHINode
*PN
= cast
<PHINode
>(I
);
584 PHINode
*NewPN
= PHINode::Create(PN
->getType(), PN
->getName()+".be",
586 NewPN
->reserveOperandSpace(BackedgeBlocks
.size());
587 if (AA
) AA
->copyValue(PN
, NewPN
);
589 // Loop over the PHI node, moving all entries except the one for the
590 // preheader over to the new PHI node.
591 unsigned PreheaderIdx
= ~0U;
592 bool HasUniqueIncomingValue
= true;
593 Value
*UniqueValue
= 0;
594 for (unsigned i
= 0, e
= PN
->getNumIncomingValues(); i
!= e
; ++i
) {
595 BasicBlock
*IBB
= PN
->getIncomingBlock(i
);
596 Value
*IV
= PN
->getIncomingValue(i
);
597 if (IBB
== Preheader
) {
600 NewPN
->addIncoming(IV
, IBB
);
601 if (HasUniqueIncomingValue
) {
602 if (UniqueValue
== 0)
604 else if (UniqueValue
!= IV
)
605 HasUniqueIncomingValue
= false;
610 // Delete all of the incoming values from the old PN except the preheader's
611 assert(PreheaderIdx
!= ~0U && "PHI has no preheader entry??");
612 if (PreheaderIdx
!= 0) {
613 PN
->setIncomingValue(0, PN
->getIncomingValue(PreheaderIdx
));
614 PN
->setIncomingBlock(0, PN
->getIncomingBlock(PreheaderIdx
));
616 // Nuke all entries except the zero'th.
617 for (unsigned i
= 0, e
= PN
->getNumIncomingValues()-1; i
!= e
; ++i
)
618 PN
->removeIncomingValue(e
-i
, false);
620 // Finally, add the newly constructed PHI node as the entry for the BEBlock.
621 PN
->addIncoming(NewPN
, BEBlock
);
623 // As an optimization, if all incoming values in the new PhiNode (which is a
624 // subset of the incoming values of the old PHI node) have the same value,
625 // eliminate the PHI Node.
626 if (HasUniqueIncomingValue
) {
627 NewPN
->replaceAllUsesWith(UniqueValue
);
628 if (AA
) AA
->deleteValue(NewPN
);
629 BEBlock
->getInstList().erase(NewPN
);
633 // Now that all of the PHI nodes have been inserted and adjusted, modify the
634 // backedge blocks to just to the BEBlock instead of the header.
635 for (unsigned i
= 0, e
= BackedgeBlocks
.size(); i
!= e
; ++i
) {
636 TerminatorInst
*TI
= BackedgeBlocks
[i
]->getTerminator();
637 for (unsigned Op
= 0, e
= TI
->getNumSuccessors(); Op
!= e
; ++Op
)
638 if (TI
->getSuccessor(Op
) == Header
)
639 TI
->setSuccessor(Op
, BEBlock
);
642 //===--- Update all analyses which we must preserve now -----------------===//
644 // Update Loop Information - we know that this block is now in the current
645 // loop and all parent loops.
646 L
->addBasicBlockToLoop(BEBlock
, LI
->getBase());
648 // Update dominator information
649 DT
->splitBlock(BEBlock
);
650 if (DominanceFrontier
*DF
= getAnalysisIfAvailable
<DominanceFrontier
>())
651 DF
->splitBlock(BEBlock
);