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/Type.h"
41 #include "llvm/Analysis/AliasAnalysis.h"
42 #include "llvm/Analysis/Dominators.h"
43 #include "llvm/Analysis/LoopInfo.h"
44 #include "llvm/Transforms/Utils/BasicBlockUtils.h"
45 #include "llvm/Support/CFG.h"
46 #include "llvm/Support/Compiler.h"
47 #include "llvm/ADT/SetOperations.h"
48 #include "llvm/ADT/SetVector.h"
49 #include "llvm/ADT/Statistic.h"
50 #include "llvm/ADT/DepthFirstIterator.h"
53 STATISTIC(NumInserted
, "Number of pre-header or exit blocks inserted");
54 STATISTIC(NumNested
, "Number of nested loops split out");
57 struct VISIBILITY_HIDDEN LoopSimplify
: public FunctionPass
{
58 static char ID
; // Pass identification, replacement for typeid
59 LoopSimplify() : FunctionPass(&ID
) {}
61 // AA - If we have an alias analysis object to update, this is it, otherwise
66 virtual bool runOnFunction(Function
&F
);
68 virtual void getAnalysisUsage(AnalysisUsage
&AU
) const {
69 // We need loop information to identify the loops...
70 AU
.addRequired
<LoopInfo
>();
71 AU
.addRequired
<DominatorTree
>();
73 AU
.addPreserved
<LoopInfo
>();
74 AU
.addPreserved
<DominatorTree
>();
75 AU
.addPreserved
<DominanceFrontier
>();
76 AU
.addPreserved
<AliasAnalysis
>();
77 AU
.addPreservedID(BreakCriticalEdgesID
); // No critical edges added.
80 /// verifyAnalysis() - Verify loop nest.
81 void verifyAnalysis() const {
83 LoopInfo
*NLI
= &getAnalysis
<LoopInfo
>();
84 for (LoopInfo::iterator I
= NLI
->begin(), E
= NLI
->end(); I
!= E
; ++I
)
90 bool ProcessLoop(Loop
*L
);
91 BasicBlock
*RewriteLoopExitBlock(Loop
*L
, BasicBlock
*Exit
);
92 void InsertPreheaderForLoop(Loop
*L
);
93 Loop
*SeparateNestedLoop(Loop
*L
);
94 void InsertUniqueBackedgeBlock(Loop
*L
);
95 void PlaceSplitBlockCarefully(BasicBlock
*NewBB
,
96 SmallVectorImpl
<BasicBlock
*> &SplitPreds
,
101 char LoopSimplify::ID
= 0;
102 static RegisterPass
<LoopSimplify
>
103 X("loopsimplify", "Canonicalize natural loops", true);
105 // Publically exposed interface to pass...
106 const PassInfo
*const llvm::LoopSimplifyID
= &X
;
107 FunctionPass
*llvm::createLoopSimplifyPass() { return new LoopSimplify(); }
109 /// runOnFunction - Run down all loops in the CFG (recursively, but we could do
110 /// it in any convenient order) inserting preheaders...
112 bool LoopSimplify::runOnFunction(Function
&F
) {
113 bool Changed
= false;
114 LI
= &getAnalysis
<LoopInfo
>();
115 AA
= getAnalysisIfAvailable
<AliasAnalysis
>();
116 DT
= &getAnalysis
<DominatorTree
>();
118 // Check to see that no blocks (other than the header) in loops have
119 // predecessors that are not in loops. This is not valid for natural loops,
120 // but can occur if the blocks are unreachable. Since they are unreachable we
121 // can just shamelessly destroy their terminators to make them not branch into
123 for (Function::iterator BB
= F
.begin(), E
= F
.end(); BB
!= E
; ++BB
) {
124 // This case can only occur for unreachable blocks. Blocks that are
125 // unreachable can't be in loops, so filter those blocks out.
126 if (LI
->getLoopFor(BB
)) continue;
128 bool BlockUnreachable
= false;
129 TerminatorInst
*TI
= BB
->getTerminator();
131 // Check to see if any successors of this block are non-loop-header loops
132 // that are not the header.
133 for (unsigned i
= 0, e
= TI
->getNumSuccessors(); i
!= e
; ++i
) {
134 // If this successor is not in a loop, BB is clearly ok.
135 Loop
*L
= LI
->getLoopFor(TI
->getSuccessor(i
));
138 // If the succ is the loop header, and if L is a top-level loop, then this
139 // is an entrance into a loop through the header, which is also ok.
140 if (L
->getHeader() == TI
->getSuccessor(i
) && L
->getParentLoop() == 0)
143 // Otherwise, this is an entrance into a loop from some place invalid.
144 // Either the loop structure is invalid and this is not a natural loop (in
145 // which case the compiler is buggy somewhere else) or BB is unreachable.
146 BlockUnreachable
= true;
150 // If this block is ok, check the next one.
151 if (!BlockUnreachable
) continue;
153 // Otherwise, this block is dead. To clean up the CFG and to allow later
154 // loop transformations to ignore this case, we delete the edges into the
155 // loop by replacing the terminator.
157 // Remove PHI entries from the successors.
158 for (unsigned i
= 0, e
= TI
->getNumSuccessors(); i
!= e
; ++i
)
159 TI
->getSuccessor(i
)->removePredecessor(BB
);
161 // Add a new unreachable instruction before the old terminator.
162 new UnreachableInst(TI
);
164 // Delete the dead terminator.
165 if (AA
) AA
->deleteValue(TI
);
166 if (!TI
->use_empty())
167 TI
->replaceAllUsesWith(UndefValue::get(TI
->getType()));
168 TI
->eraseFromParent();
172 for (LoopInfo::iterator I
= LI
->begin(), E
= LI
->end(); I
!= E
; ++I
)
173 Changed
|= ProcessLoop(*I
);
178 /// ProcessLoop - Walk the loop structure in depth first order, ensuring that
179 /// all loops have preheaders.
181 bool LoopSimplify::ProcessLoop(Loop
*L
) {
182 bool Changed
= false;
185 // Canonicalize inner loops before outer loops. Inner loop canonicalization
186 // can provide work for the outer loop to canonicalize.
187 for (Loop::iterator I
= L
->begin(), E
= L
->end(); I
!= E
; ++I
)
188 Changed
|= ProcessLoop(*I
);
190 assert(L
->getBlocks()[0] == L
->getHeader() &&
191 "Header isn't first block in loop?");
193 // Does the loop already have a preheader? If so, don't insert one.
194 if (L
->getLoopPreheader() == 0) {
195 InsertPreheaderForLoop(L
);
200 // Next, check to make sure that all exit nodes of the loop only have
201 // predecessors that are inside of the loop. This check guarantees that the
202 // loop preheader/header will dominate the exit blocks. If the exit block has
203 // predecessors from outside of the loop, split the edge now.
204 SmallVector
<BasicBlock
*, 8> ExitBlocks
;
205 L
->getExitBlocks(ExitBlocks
);
207 SetVector
<BasicBlock
*> ExitBlockSet(ExitBlocks
.begin(), ExitBlocks
.end());
208 for (SetVector
<BasicBlock
*>::iterator I
= ExitBlockSet
.begin(),
209 E
= ExitBlockSet
.end(); I
!= E
; ++I
) {
210 BasicBlock
*ExitBlock
= *I
;
211 for (pred_iterator PI
= pred_begin(ExitBlock
), PE
= pred_end(ExitBlock
);
213 // Must be exactly this loop: no subloops, parent loops, or non-loop preds
215 if (!L
->contains(*PI
)) {
216 RewriteLoopExitBlock(L
, ExitBlock
);
223 // If the header has more than two predecessors at this point (from the
224 // preheader and from multiple backedges), we must adjust the loop.
225 unsigned NumBackedges
= L
->getNumBackEdges();
226 if (NumBackedges
!= 1) {
227 // If this is really a nested loop, rip it out into a child loop. Don't do
228 // this for loops with a giant number of backedges, just factor them into a
229 // common backedge instead.
230 if (NumBackedges
< 8) {
231 if (Loop
*NL
= SeparateNestedLoop(L
)) {
233 // This is a big restructuring change, reprocess the whole loop.
236 // GCC doesn't tail recursion eliminate this.
241 // If we either couldn't, or didn't want to, identify nesting of the loops,
242 // insert a new block that all backedges target, then make it jump to the
244 InsertUniqueBackedgeBlock(L
);
249 // Scan over the PHI nodes in the loop header. Since they now have only two
250 // incoming values (the loop is canonicalized), we may have simplified the PHI
251 // down to 'X = phi [X, Y]', which should be replaced with 'Y'.
253 for (BasicBlock::iterator I
= L
->getHeader()->begin();
254 (PN
= dyn_cast
<PHINode
>(I
++)); )
255 if (Value
*V
= PN
->hasConstantValue()) {
256 if (AA
) AA
->deleteValue(PN
);
257 PN
->replaceAllUsesWith(V
);
258 PN
->eraseFromParent();
264 /// InsertPreheaderForLoop - Once we discover that a loop doesn't have a
265 /// preheader, this method is called to insert one. This method has two phases:
266 /// preheader insertion and analysis updating.
268 void LoopSimplify::InsertPreheaderForLoop(Loop
*L
) {
269 BasicBlock
*Header
= L
->getHeader();
271 // Compute the set of predecessors of the loop that are not in the loop.
272 SmallVector
<BasicBlock
*, 8> OutsideBlocks
;
273 for (pred_iterator PI
= pred_begin(Header
), PE
= pred_end(Header
);
275 if (!L
->contains(*PI
)) // Coming in from outside the loop?
276 OutsideBlocks
.push_back(*PI
); // Keep track of it...
278 // Split out the loop pre-header.
280 SplitBlockPredecessors(Header
, &OutsideBlocks
[0], OutsideBlocks
.size(),
284 //===--------------------------------------------------------------------===//
285 // Update analysis results now that we have performed the transformation
288 // We know that we have loop information to update... update it now.
289 if (Loop
*Parent
= L
->getParentLoop())
290 Parent
->addBasicBlockToLoop(NewBB
, LI
->getBase());
292 // Make sure that NewBB is put someplace intelligent, which doesn't mess up
293 // code layout too horribly.
294 PlaceSplitBlockCarefully(NewBB
, OutsideBlocks
, L
);
297 /// RewriteLoopExitBlock - Ensure that the loop preheader dominates all exit
298 /// blocks. This method is used to split exit blocks that have predecessors
299 /// outside of the loop.
300 BasicBlock
*LoopSimplify::RewriteLoopExitBlock(Loop
*L
, BasicBlock
*Exit
) {
301 SmallVector
<BasicBlock
*, 8> LoopBlocks
;
302 for (pred_iterator I
= pred_begin(Exit
), E
= pred_end(Exit
); I
!= E
; ++I
)
304 LoopBlocks
.push_back(*I
);
306 assert(!LoopBlocks
.empty() && "No edges coming in from outside the loop?");
307 BasicBlock
*NewBB
= SplitBlockPredecessors(Exit
, &LoopBlocks
[0],
308 LoopBlocks
.size(), ".loopexit",
311 // Update Loop Information - we know that the new block will be in whichever
312 // loop the Exit block is in. Note that it may not be in that immediate loop,
313 // if the successor is some other loop header. In that case, we continue
314 // walking up the loop tree to find a loop that contains both the successor
315 // block and the predecessor block.
316 Loop
*SuccLoop
= LI
->getLoopFor(Exit
);
317 while (SuccLoop
&& !SuccLoop
->contains(L
->getHeader()))
318 SuccLoop
= SuccLoop
->getParentLoop();
320 SuccLoop
->addBasicBlockToLoop(NewBB
, LI
->getBase());
325 /// AddBlockAndPredsToSet - Add the specified block, and all of its
326 /// predecessors, to the specified set, if it's not already in there. Stop
327 /// predecessor traversal when we reach StopBlock.
328 static void AddBlockAndPredsToSet(BasicBlock
*InputBB
, BasicBlock
*StopBlock
,
329 std::set
<BasicBlock
*> &Blocks
) {
330 std::vector
<BasicBlock
*> WorkList
;
331 WorkList
.push_back(InputBB
);
333 BasicBlock
*BB
= WorkList
.back(); WorkList
.pop_back();
334 if (Blocks
.insert(BB
).second
&& BB
!= StopBlock
)
335 // If BB is not already processed and it is not a stop block then
336 // insert its predecessor in the work list
337 for (pred_iterator I
= pred_begin(BB
), E
= pred_end(BB
); I
!= E
; ++I
) {
338 BasicBlock
*WBB
= *I
;
339 WorkList
.push_back(WBB
);
341 } while(!WorkList
.empty());
344 /// FindPHIToPartitionLoops - The first part of loop-nestification is to find a
345 /// PHI node that tells us how to partition the loops.
346 static PHINode
*FindPHIToPartitionLoops(Loop
*L
, DominatorTree
*DT
,
348 for (BasicBlock::iterator I
= L
->getHeader()->begin(); isa
<PHINode
>(I
); ) {
349 PHINode
*PN
= cast
<PHINode
>(I
);
351 if (Value
*V
= PN
->hasConstantValue())
352 if (!isa
<Instruction
>(V
) || DT
->dominates(cast
<Instruction
>(V
), PN
)) {
353 // This is a degenerate PHI already, don't modify it!
354 PN
->replaceAllUsesWith(V
);
355 if (AA
) AA
->deleteValue(PN
);
356 PN
->eraseFromParent();
360 // Scan this PHI node looking for a use of the PHI node by itself.
361 for (unsigned i
= 0, e
= PN
->getNumIncomingValues(); i
!= e
; ++i
)
362 if (PN
->getIncomingValue(i
) == PN
&&
363 L
->contains(PN
->getIncomingBlock(i
)))
364 // We found something tasty to remove.
370 // PlaceSplitBlockCarefully - If the block isn't already, move the new block to
371 // right after some 'outside block' block. This prevents the preheader from
372 // being placed inside the loop body, e.g. when the loop hasn't been rotated.
373 void LoopSimplify::PlaceSplitBlockCarefully(BasicBlock
*NewBB
,
374 SmallVectorImpl
<BasicBlock
*> &SplitPreds
,
376 // Check to see if NewBB is already well placed.
377 Function::iterator BBI
= NewBB
; --BBI
;
378 for (unsigned i
= 0, e
= SplitPreds
.size(); i
!= e
; ++i
) {
379 if (&*BBI
== SplitPreds
[i
])
383 // If it isn't already after an outside block, move it after one. This is
384 // always good as it makes the uncond branch from the outside block into a
387 // Figure out *which* outside block to put this after. Prefer an outside
388 // block that neighbors a BB actually in the loop.
389 BasicBlock
*FoundBB
= 0;
390 for (unsigned i
= 0, e
= SplitPreds
.size(); i
!= e
; ++i
) {
391 Function::iterator BBI
= SplitPreds
[i
];
392 if (++BBI
!= NewBB
->getParent()->end() &&
394 FoundBB
= SplitPreds
[i
];
399 // If our heuristic for a *good* bb to place this after doesn't find
400 // anything, just pick something. It's likely better than leaving it within
403 FoundBB
= SplitPreds
[0];
404 NewBB
->moveAfter(FoundBB
);
408 /// SeparateNestedLoop - If this loop has multiple backedges, try to pull one of
409 /// them out into a nested loop. This is important for code that looks like
414 /// br cond, Loop, Next
416 /// br cond2, Loop, Out
418 /// To identify this common case, we look at the PHI nodes in the header of the
419 /// loop. PHI nodes with unchanging values on one backedge correspond to values
420 /// that change in the "outer" loop, but not in the "inner" loop.
422 /// If we are able to separate out a loop, return the new outer loop that was
425 Loop
*LoopSimplify::SeparateNestedLoop(Loop
*L
) {
426 PHINode
*PN
= FindPHIToPartitionLoops(L
, DT
, AA
);
427 if (PN
== 0) return 0; // No known way to partition.
429 // Pull out all predecessors that have varying values in the loop. This
430 // handles the case when a PHI node has multiple instances of itself as
432 SmallVector
<BasicBlock
*, 8> OuterLoopPreds
;
433 for (unsigned i
= 0, e
= PN
->getNumIncomingValues(); i
!= e
; ++i
)
434 if (PN
->getIncomingValue(i
) != PN
||
435 !L
->contains(PN
->getIncomingBlock(i
)))
436 OuterLoopPreds
.push_back(PN
->getIncomingBlock(i
));
438 BasicBlock
*Header
= L
->getHeader();
439 BasicBlock
*NewBB
= SplitBlockPredecessors(Header
, &OuterLoopPreds
[0],
440 OuterLoopPreds
.size(),
443 // Make sure that NewBB is put someplace intelligent, which doesn't mess up
444 // code layout too horribly.
445 PlaceSplitBlockCarefully(NewBB
, OuterLoopPreds
, L
);
447 // Create the new outer loop.
448 Loop
*NewOuter
= new Loop();
450 // Change the parent loop to use the outer loop as its child now.
451 if (Loop
*Parent
= L
->getParentLoop())
452 Parent
->replaceChildLoopWith(L
, NewOuter
);
454 LI
->changeTopLevelLoop(L
, NewOuter
);
456 // This block is going to be our new header block: add it to this loop and all
458 NewOuter
->addBasicBlockToLoop(NewBB
, LI
->getBase());
460 // L is now a subloop of our outer loop.
461 NewOuter
->addChildLoop(L
);
463 for (Loop::block_iterator I
= L
->block_begin(), E
= L
->block_end();
465 NewOuter
->addBlockEntry(*I
);
467 // Determine which blocks should stay in L and which should be moved out to
468 // the Outer loop now.
469 std::set
<BasicBlock
*> BlocksInL
;
470 for (pred_iterator PI
= pred_begin(Header
), E
= pred_end(Header
); PI
!=E
; ++PI
)
471 if (DT
->dominates(Header
, *PI
))
472 AddBlockAndPredsToSet(*PI
, Header
, BlocksInL
);
475 // Scan all of the loop children of L, moving them to OuterLoop if they are
476 // not part of the inner loop.
477 const std::vector
<Loop
*> &SubLoops
= L
->getSubLoops();
478 for (size_t I
= 0; I
!= SubLoops
.size(); )
479 if (BlocksInL
.count(SubLoops
[I
]->getHeader()))
480 ++I
; // Loop remains in L
482 NewOuter
->addChildLoop(L
->removeChildLoop(SubLoops
.begin() + I
));
484 // Now that we know which blocks are in L and which need to be moved to
485 // OuterLoop, move any blocks that need it.
486 for (unsigned i
= 0; i
!= L
->getBlocks().size(); ++i
) {
487 BasicBlock
*BB
= L
->getBlocks()[i
];
488 if (!BlocksInL
.count(BB
)) {
489 // Move this block to the parent, updating the exit blocks sets
490 L
->removeBlockFromLoop(BB
);
492 LI
->changeLoopFor(BB
, NewOuter
);
502 /// InsertUniqueBackedgeBlock - This method is called when the specified loop
503 /// has more than one backedge in it. If this occurs, revector all of these
504 /// backedges to target a new basic block and have that block branch to the loop
505 /// header. This ensures that loops have exactly one backedge.
507 void LoopSimplify::InsertUniqueBackedgeBlock(Loop
*L
) {
508 assert(L
->getNumBackEdges() > 1 && "Must have > 1 backedge!");
510 // Get information about the loop
511 BasicBlock
*Preheader
= L
->getLoopPreheader();
512 BasicBlock
*Header
= L
->getHeader();
513 Function
*F
= Header
->getParent();
515 // Figure out which basic blocks contain back-edges to the loop header.
516 std::vector
<BasicBlock
*> BackedgeBlocks
;
517 for (pred_iterator I
= pred_begin(Header
), E
= pred_end(Header
); I
!= E
; ++I
)
518 if (*I
!= Preheader
) BackedgeBlocks
.push_back(*I
);
520 // Create and insert the new backedge block...
521 BasicBlock
*BEBlock
= BasicBlock::Create(Header
->getName()+".backedge", F
);
522 BranchInst
*BETerminator
= BranchInst::Create(Header
, BEBlock
);
524 // Move the new backedge block to right after the last backedge block.
525 Function::iterator InsertPos
= BackedgeBlocks
.back(); ++InsertPos
;
526 F
->getBasicBlockList().splice(InsertPos
, F
->getBasicBlockList(), BEBlock
);
528 // Now that the block has been inserted into the function, create PHI nodes in
529 // the backedge block which correspond to any PHI nodes in the header block.
530 for (BasicBlock::iterator I
= Header
->begin(); isa
<PHINode
>(I
); ++I
) {
531 PHINode
*PN
= cast
<PHINode
>(I
);
532 PHINode
*NewPN
= PHINode::Create(PN
->getType(), PN
->getName()+".be",
534 NewPN
->reserveOperandSpace(BackedgeBlocks
.size());
535 if (AA
) AA
->copyValue(PN
, NewPN
);
537 // Loop over the PHI node, moving all entries except the one for the
538 // preheader over to the new PHI node.
539 unsigned PreheaderIdx
= ~0U;
540 bool HasUniqueIncomingValue
= true;
541 Value
*UniqueValue
= 0;
542 for (unsigned i
= 0, e
= PN
->getNumIncomingValues(); i
!= e
; ++i
) {
543 BasicBlock
*IBB
= PN
->getIncomingBlock(i
);
544 Value
*IV
= PN
->getIncomingValue(i
);
545 if (IBB
== Preheader
) {
548 NewPN
->addIncoming(IV
, IBB
);
549 if (HasUniqueIncomingValue
) {
550 if (UniqueValue
== 0)
552 else if (UniqueValue
!= IV
)
553 HasUniqueIncomingValue
= false;
558 // Delete all of the incoming values from the old PN except the preheader's
559 assert(PreheaderIdx
!= ~0U && "PHI has no preheader entry??");
560 if (PreheaderIdx
!= 0) {
561 PN
->setIncomingValue(0, PN
->getIncomingValue(PreheaderIdx
));
562 PN
->setIncomingBlock(0, PN
->getIncomingBlock(PreheaderIdx
));
564 // Nuke all entries except the zero'th.
565 for (unsigned i
= 0, e
= PN
->getNumIncomingValues()-1; i
!= e
; ++i
)
566 PN
->removeIncomingValue(e
-i
, false);
568 // Finally, add the newly constructed PHI node as the entry for the BEBlock.
569 PN
->addIncoming(NewPN
, BEBlock
);
571 // As an optimization, if all incoming values in the new PhiNode (which is a
572 // subset of the incoming values of the old PHI node) have the same value,
573 // eliminate the PHI Node.
574 if (HasUniqueIncomingValue
) {
575 NewPN
->replaceAllUsesWith(UniqueValue
);
576 if (AA
) AA
->deleteValue(NewPN
);
577 BEBlock
->getInstList().erase(NewPN
);
581 // Now that all of the PHI nodes have been inserted and adjusted, modify the
582 // backedge blocks to just to the BEBlock instead of the header.
583 for (unsigned i
= 0, e
= BackedgeBlocks
.size(); i
!= e
; ++i
) {
584 TerminatorInst
*TI
= BackedgeBlocks
[i
]->getTerminator();
585 for (unsigned Op
= 0, e
= TI
->getNumSuccessors(); Op
!= e
; ++Op
)
586 if (TI
->getSuccessor(Op
) == Header
)
587 TI
->setSuccessor(Op
, BEBlock
);
590 //===--- Update all analyses which we must preserve now -----------------===//
592 // Update Loop Information - we know that this block is now in the current
593 // loop and all parent loops.
594 L
->addBasicBlockToLoop(BEBlock
, LI
->getBase());
596 // Update dominator information
597 DT
->splitBlock(BEBlock
);
598 if (DominanceFrontier
*DF
= getAnalysisIfAvailable
<DominanceFrontier
>())
599 DF
->splitBlock(BEBlock
);