LLVM API Documentation

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
LoopUnswitch.cpp
Go to the documentation of this file.
1 //===-- LoopUnswitch.cpp - Hoist loop-invariant conditionals in loop ------===//
2 //
3 // The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 //
10 // This pass transforms loops that contain branches on loop-invariant conditions
11 // to have multiple loops. For example, it turns the left into the right code:
12 //
13 // for (...) if (lic)
14 // A for (...)
15 // if (lic) A; B; C
16 // B else
17 // C for (...)
18 // A; C
19 //
20 // This can increase the size of the code exponentially (doubling it every time
21 // a loop is unswitched) so we only unswitch if the resultant code will be
22 // smaller than a threshold.
23 //
24 // This pass expects LICM to be run before it to hoist invariant conditions out
25 // of the loop, to make the unswitching opportunity obvious.
26 //
27 //===----------------------------------------------------------------------===//
28 
29 #define DEBUG_TYPE "loop-unswitch"
30 #include "llvm/Transforms/Scalar.h"
31 #include "llvm/ADT/STLExtras.h"
32 #include "llvm/ADT/SmallPtrSet.h"
33 #include "llvm/ADT/Statistic.h"
37 #include "llvm/Analysis/LoopInfo.h"
38 #include "llvm/Analysis/LoopPass.h"
41 #include "llvm/IR/Constants.h"
42 #include "llvm/IR/DerivedTypes.h"
43 #include "llvm/IR/Function.h"
44 #include "llvm/IR/Instructions.h"
46 #include "llvm/Support/Debug.h"
51 #include <algorithm>
52 #include <map>
53 #include <set>
54 using namespace llvm;
55 
56 STATISTIC(NumBranches, "Number of branches unswitched");
57 STATISTIC(NumSwitches, "Number of switches unswitched");
58 STATISTIC(NumSelects , "Number of selects unswitched");
59 STATISTIC(NumTrivial , "Number of unswitches that are trivial");
60 STATISTIC(NumSimplify, "Number of simplifications of unswitched code");
61 STATISTIC(TotalInsts, "Total number of instructions analyzed");
62 
63 // The specific value of 100 here was chosen based only on intuition and a
64 // few specific examples.
65 static cl::opt<unsigned>
66 Threshold("loop-unswitch-threshold", cl::desc("Max loop size to unswitch"),
67  cl::init(100), cl::Hidden);
68 
69 namespace {
70 
71  class LUAnalysisCache {
72 
74  UnswitchedValsMap;
75 
76  typedef UnswitchedValsMap::iterator UnswitchedValsIt;
77 
78  struct LoopProperties {
79  unsigned CanBeUnswitchedCount;
80  unsigned SizeEstimation;
81  UnswitchedValsMap UnswitchedVals;
82  };
83 
84  // Here we use std::map instead of DenseMap, since we need to keep valid
85  // LoopProperties pointer for current loop for better performance.
86  typedef std::map<const Loop*, LoopProperties> LoopPropsMap;
87  typedef LoopPropsMap::iterator LoopPropsMapIt;
88 
89  LoopPropsMap LoopsProperties;
90  UnswitchedValsMap *CurLoopInstructions;
91  LoopProperties *CurrentLoopProperties;
92 
93  // Max size of code we can produce on remained iterations.
94  unsigned MaxSize;
95 
96  public:
97 
98  LUAnalysisCache() :
99  CurLoopInstructions(0), CurrentLoopProperties(0),
100  MaxSize(Threshold)
101  {}
102 
103  // Analyze loop. Check its size, calculate is it possible to unswitch
104  // it. Returns true if we can unswitch this loop.
105  bool countLoop(const Loop *L, const TargetTransformInfo &TTI);
106 
107  // Clean all data related to given loop.
108  void forgetLoop(const Loop *L);
109 
110  // Mark case value as unswitched.
111  // Since SI instruction can be partly unswitched, in order to avoid
112  // extra unswitching in cloned loops keep track all unswitched values.
113  void setUnswitched(const SwitchInst *SI, const Value *V);
114 
115  // Check was this case value unswitched before or not.
116  bool isUnswitched(const SwitchInst *SI, const Value *V);
117 
118  // Clone all loop-unswitch related loop properties.
119  // Redistribute unswitching quotas.
120  // Note, that new loop data is stored inside the VMap.
121  void cloneData(const Loop *NewLoop, const Loop *OldLoop,
122  const ValueToValueMapTy &VMap);
123  };
124 
125  class LoopUnswitch : public LoopPass {
126  LoopInfo *LI; // Loop information
127  LPPassManager *LPM;
128 
129  // LoopProcessWorklist - Used to check if second loop needs processing
130  // after RewriteLoopBodyWithConditionConstant rewrites first loop.
131  std::vector<Loop*> LoopProcessWorklist;
132 
133  LUAnalysisCache BranchesInfo;
134 
135  bool OptimizeForSize;
136  bool redoLoop;
137 
138  Loop *currentLoop;
139  DominatorTree *DT;
140  BasicBlock *loopHeader;
141  BasicBlock *loopPreheader;
142 
143  // LoopBlocks contains all of the basic blocks of the loop, including the
144  // preheader of the loop, the body of the loop, and the exit blocks of the
145  // loop, in that order.
146  std::vector<BasicBlock*> LoopBlocks;
147  // NewBlocks contained cloned copy of basic blocks from LoopBlocks.
148  std::vector<BasicBlock*> NewBlocks;
149 
150  public:
151  static char ID; // Pass ID, replacement for typeid
152  explicit LoopUnswitch(bool Os = false) :
153  LoopPass(ID), OptimizeForSize(Os), redoLoop(false),
154  currentLoop(0), DT(0), loopHeader(0),
155  loopPreheader(0) {
157  }
158 
159  bool runOnLoop(Loop *L, LPPassManager &LPM);
160  bool processCurrentLoop();
161 
162  /// This transformation requires natural loop information & requires that
163  /// loop preheaders be inserted into the CFG.
164  ///
165  virtual void getAnalysisUsage(AnalysisUsage &AU) const {
168  AU.addRequired<LoopInfo>();
169  AU.addPreserved<LoopInfo>();
175  }
176 
177  private:
178 
179  virtual void releaseMemory() {
180  BranchesInfo.forgetLoop(currentLoop);
181  }
182 
183  /// RemoveLoopFromWorklist - If the specified loop is on the loop worklist,
184  /// remove it.
185  void RemoveLoopFromWorklist(Loop *L) {
186  std::vector<Loop*>::iterator I = std::find(LoopProcessWorklist.begin(),
187  LoopProcessWorklist.end(), L);
188  if (I != LoopProcessWorklist.end())
189  LoopProcessWorklist.erase(I);
190  }
191 
192  void initLoopData() {
193  loopHeader = currentLoop->getHeader();
194  loopPreheader = currentLoop->getLoopPreheader();
195  }
196 
197  /// Split all of the edges from inside the loop to their exit blocks.
198  /// Update the appropriate Phi nodes as we do so.
199  void SplitExitEdges(Loop *L, const SmallVectorImpl<BasicBlock *> &ExitBlocks);
200 
201  bool UnswitchIfProfitable(Value *LoopCond, Constant *Val);
202  void UnswitchTrivialCondition(Loop *L, Value *Cond, Constant *Val,
203  BasicBlock *ExitBlock);
204  void UnswitchNontrivialCondition(Value *LIC, Constant *OnVal, Loop *L);
205 
206  void RewriteLoopBodyWithConditionConstant(Loop *L, Value *LIC,
207  Constant *Val, bool isEqual);
208 
209  void EmitPreheaderBranchOnCondition(Value *LIC, Constant *Val,
210  BasicBlock *TrueDest,
211  BasicBlock *FalseDest,
212  Instruction *InsertPt);
213 
214  void SimplifyCode(std::vector<Instruction*> &Worklist, Loop *L);
215  void RemoveLoopFromHierarchy(Loop *L);
216  bool IsTrivialUnswitchCondition(Value *Cond, Constant **Val = 0,
217  BasicBlock **LoopExit = 0);
218 
219  };
220 }
221 
222 // Analyze loop. Check its size, calculate is it possible to unswitch
223 // it. Returns true if we can unswitch this loop.
224 bool LUAnalysisCache::countLoop(const Loop *L, const TargetTransformInfo &TTI) {
225 
226  LoopPropsMapIt PropsIt;
227  bool Inserted;
228  llvm::tie(PropsIt, Inserted) =
229  LoopsProperties.insert(std::make_pair(L, LoopProperties()));
230 
231  LoopProperties &Props = PropsIt->second;
232 
233  if (Inserted) {
234  // New loop.
235 
236  // Limit the number of instructions to avoid causing significant code
237  // expansion, and the number of basic blocks, to avoid loops with
238  // large numbers of branches which cause loop unswitching to go crazy.
239  // This is a very ad-hoc heuristic.
240 
241  // FIXME: This is overly conservative because it does not take into
242  // consideration code simplification opportunities and code that can
243  // be shared by the resultant unswitched loops.
245  for (Loop::block_iterator I = L->block_begin(), E = L->block_end();
246  I != E; ++I)
247  Metrics.analyzeBasicBlock(*I, TTI);
248 
249  Props.SizeEstimation = std::min(Metrics.NumInsts, Metrics.NumBlocks * 5);
250  Props.CanBeUnswitchedCount = MaxSize / (Props.SizeEstimation);
251  MaxSize -= Props.SizeEstimation * Props.CanBeUnswitchedCount;
252 
253  if (Metrics.notDuplicatable) {
254  DEBUG(dbgs() << "NOT unswitching loop %"
255  << L->getHeader()->getName() << ", contents cannot be "
256  << "duplicated!\n");
257  return false;
258  }
259  }
260 
261  if (!Props.CanBeUnswitchedCount) {
262  DEBUG(dbgs() << "NOT unswitching loop %"
263  << L->getHeader()->getName() << ", cost too high: "
264  << L->getBlocks().size() << "\n");
265  return false;
266  }
267 
268  // Be careful. This links are good only before new loop addition.
269  CurrentLoopProperties = &Props;
270  CurLoopInstructions = &Props.UnswitchedVals;
271 
272  return true;
273 }
274 
275 // Clean all data related to given loop.
276 void LUAnalysisCache::forgetLoop(const Loop *L) {
277 
278  LoopPropsMapIt LIt = LoopsProperties.find(L);
279 
280  if (LIt != LoopsProperties.end()) {
281  LoopProperties &Props = LIt->second;
282  MaxSize += Props.CanBeUnswitchedCount * Props.SizeEstimation;
283  LoopsProperties.erase(LIt);
284  }
285 
286  CurrentLoopProperties = 0;
287  CurLoopInstructions = 0;
288 }
289 
290 // Mark case value as unswitched.
291 // Since SI instruction can be partly unswitched, in order to avoid
292 // extra unswitching in cloned loops keep track all unswitched values.
293 void LUAnalysisCache::setUnswitched(const SwitchInst *SI, const Value *V) {
294  (*CurLoopInstructions)[SI].insert(V);
295 }
296 
297 // Check was this case value unswitched before or not.
298 bool LUAnalysisCache::isUnswitched(const SwitchInst *SI, const Value *V) {
299  return (*CurLoopInstructions)[SI].count(V);
300 }
301 
302 // Clone all loop-unswitch related loop properties.
303 // Redistribute unswitching quotas.
304 // Note, that new loop data is stored inside the VMap.
305 void LUAnalysisCache::cloneData(const Loop *NewLoop, const Loop *OldLoop,
306  const ValueToValueMapTy &VMap) {
307 
308  LoopProperties &NewLoopProps = LoopsProperties[NewLoop];
309  LoopProperties &OldLoopProps = *CurrentLoopProperties;
310  UnswitchedValsMap &Insts = OldLoopProps.UnswitchedVals;
311 
312  // Reallocate "can-be-unswitched quota"
313 
314  --OldLoopProps.CanBeUnswitchedCount;
315  unsigned Quota = OldLoopProps.CanBeUnswitchedCount;
316  NewLoopProps.CanBeUnswitchedCount = Quota / 2;
317  OldLoopProps.CanBeUnswitchedCount = Quota - Quota / 2;
318 
319  NewLoopProps.SizeEstimation = OldLoopProps.SizeEstimation;
320 
321  // Clone unswitched values info:
322  // for new loop switches we clone info about values that was
323  // already unswitched and has redundant successors.
324  for (UnswitchedValsIt I = Insts.begin(); I != Insts.end(); ++I) {
325  const SwitchInst *OldInst = I->first;
326  Value *NewI = VMap.lookup(OldInst);
327  const SwitchInst *NewInst = cast_or_null<SwitchInst>(NewI);
328  assert(NewInst && "All instructions that are in SrcBB must be in VMap.");
329 
330  NewLoopProps.UnswitchedVals[NewInst] = OldLoopProps.UnswitchedVals[OldInst];
331  }
332 }
333 
334 char LoopUnswitch::ID = 0;
335 INITIALIZE_PASS_BEGIN(LoopUnswitch, "loop-unswitch", "Unswitch loops",
336  false, false)
338 INITIALIZE_PASS_DEPENDENCY(LoopSimplify)
341 INITIALIZE_PASS_END(LoopUnswitch, "loop-unswitch", "Unswitch loops",
342  false, false)
343 
344 Pass *llvm::createLoopUnswitchPass(bool Os) {
345  return new LoopUnswitch(Os);
346 }
347 
348 /// FindLIVLoopCondition - Cond is a condition that occurs in L. If it is
349 /// invariant in the loop, or has an invariant piece, return the invariant.
350 /// Otherwise, return null.
351 static Value *FindLIVLoopCondition(Value *Cond, Loop *L, bool &Changed) {
352 
353  // We started analyze new instruction, increment scanned instructions counter.
354  ++TotalInsts;
355 
356  // We can never unswitch on vector conditions.
357  if (Cond->getType()->isVectorTy())
358  return 0;
359 
360  // Constants should be folded, not unswitched on!
361  if (isa<Constant>(Cond)) return 0;
362 
363  // TODO: Handle: br (VARIANT|INVARIANT).
364 
365  // Hoist simple values out.
366  if (L->makeLoopInvariant(Cond, Changed))
367  return Cond;
368 
369  if (BinaryOperator *BO = dyn_cast<BinaryOperator>(Cond))
370  if (BO->getOpcode() == Instruction::And ||
371  BO->getOpcode() == Instruction::Or) {
372  // If either the left or right side is invariant, we can unswitch on this,
373  // which will cause the branch to go away in one loop and the condition to
374  // simplify in the other one.
375  if (Value *LHS = FindLIVLoopCondition(BO->getOperand(0), L, Changed))
376  return LHS;
377  if (Value *RHS = FindLIVLoopCondition(BO->getOperand(1), L, Changed))
378  return RHS;
379  }
380 
381  return 0;
382 }
383 
384 bool LoopUnswitch::runOnLoop(Loop *L, LPPassManager &LPM_Ref) {
385  LI = &getAnalysis<LoopInfo>();
386  LPM = &LPM_Ref;
387  DT = getAnalysisIfAvailable<DominatorTree>();
388  currentLoop = L;
389  Function *F = currentLoop->getHeader()->getParent();
390  bool Changed = false;
391  do {
392  assert(currentLoop->isLCSSAForm(*DT));
393  redoLoop = false;
394  Changed |= processCurrentLoop();
395  } while(redoLoop);
396 
397  if (Changed) {
398  // FIXME: Reconstruct dom info, because it is not preserved properly.
399  if (DT)
400  DT->runOnFunction(*F);
401  }
402  return Changed;
403 }
404 
405 /// processCurrentLoop - Do actual work and unswitch loop if possible
406 /// and profitable.
407 bool LoopUnswitch::processCurrentLoop() {
408  bool Changed = false;
409 
410  initLoopData();
411 
412  // If LoopSimplify was unable to form a preheader, don't do any unswitching.
413  if (!loopPreheader)
414  return false;
415 
416  // Loops with indirectbr cannot be cloned.
417  if (!currentLoop->isSafeToClone())
418  return false;
419 
420  // Without dedicated exits, splitting the exit edge may fail.
421  if (!currentLoop->hasDedicatedExits())
422  return false;
423 
424  LLVMContext &Context = loopHeader->getContext();
425 
426  // Probably we reach the quota of branches for this loop. If so
427  // stop unswitching.
428  if (!BranchesInfo.countLoop(currentLoop, getAnalysis<TargetTransformInfo>()))
429  return false;
430 
431  // Loop over all of the basic blocks in the loop. If we find an interior
432  // block that is branching on a loop-invariant condition, we can unswitch this
433  // loop.
434  for (Loop::block_iterator I = currentLoop->block_begin(),
435  E = currentLoop->block_end(); I != E; ++I) {
436  TerminatorInst *TI = (*I)->getTerminator();
437  if (BranchInst *BI = dyn_cast<BranchInst>(TI)) {
438  // If this isn't branching on an invariant condition, we can't unswitch
439  // it.
440  if (BI->isConditional()) {
441  // See if this, or some part of it, is loop invariant. If so, we can
442  // unswitch on it if we desire.
443  Value *LoopCond = FindLIVLoopCondition(BI->getCondition(),
444  currentLoop, Changed);
445  if (LoopCond && UnswitchIfProfitable(LoopCond,
446  ConstantInt::getTrue(Context))) {
447  ++NumBranches;
448  return true;
449  }
450  }
451  } else if (SwitchInst *SI = dyn_cast<SwitchInst>(TI)) {
452  Value *LoopCond = FindLIVLoopCondition(SI->getCondition(),
453  currentLoop, Changed);
454  unsigned NumCases = SI->getNumCases();
455  if (LoopCond && NumCases) {
456  // Find a value to unswitch on:
457  // FIXME: this should chose the most expensive case!
458  // FIXME: scan for a case with a non-critical edge?
459  Constant *UnswitchVal = 0;
460 
461  // Do not process same value again and again.
462  // At this point we have some cases already unswitched and
463  // some not yet unswitched. Let's find the first not yet unswitched one.
464  for (SwitchInst::CaseIt i = SI->case_begin(), e = SI->case_end();
465  i != e; ++i) {
466  Constant *UnswitchValCandidate = i.getCaseValue();
467  if (!BranchesInfo.isUnswitched(SI, UnswitchValCandidate)) {
468  UnswitchVal = UnswitchValCandidate;
469  break;
470  }
471  }
472 
473  if (!UnswitchVal)
474  continue;
475 
476  if (UnswitchIfProfitable(LoopCond, UnswitchVal)) {
477  ++NumSwitches;
478  return true;
479  }
480  }
481  }
482 
483  // Scan the instructions to check for unswitchable values.
484  for (BasicBlock::iterator BBI = (*I)->begin(), E = (*I)->end();
485  BBI != E; ++BBI)
486  if (SelectInst *SI = dyn_cast<SelectInst>(BBI)) {
487  Value *LoopCond = FindLIVLoopCondition(SI->getCondition(),
488  currentLoop, Changed);
489  if (LoopCond && UnswitchIfProfitable(LoopCond,
490  ConstantInt::getTrue(Context))) {
491  ++NumSelects;
492  return true;
493  }
494  }
495  }
496  return Changed;
497 }
498 
499 /// isTrivialLoopExitBlock - Check to see if all paths from BB exit the
500 /// loop with no side effects (including infinite loops).
501 ///
502 /// If true, we return true and set ExitBB to the block we
503 /// exit through.
504 ///
506  BasicBlock *&ExitBB,
507  std::set<BasicBlock*> &Visited) {
508  if (!Visited.insert(BB).second) {
509  // Already visited. Without more analysis, this could indicate an infinite
510  // loop.
511  return false;
512  }
513  if (!L->contains(BB)) {
514  // Otherwise, this is a loop exit, this is fine so long as this is the
515  // first exit.
516  if (ExitBB != 0) return false;
517  ExitBB = BB;
518  return true;
519  }
520 
521  // Otherwise, this is an unvisited intra-loop node. Check all successors.
522  for (succ_iterator SI = succ_begin(BB), E = succ_end(BB); SI != E; ++SI) {
523  // Check to see if the successor is a trivial loop exit.
524  if (!isTrivialLoopExitBlockHelper(L, *SI, ExitBB, Visited))
525  return false;
526  }
527 
528  // Okay, everything after this looks good, check to make sure that this block
529  // doesn't include any side effects.
530  for (BasicBlock::iterator I = BB->begin(), E = BB->end(); I != E; ++I)
531  if (I->mayHaveSideEffects())
532  return false;
533 
534  return true;
535 }
536 
537 /// isTrivialLoopExitBlock - Return true if the specified block unconditionally
538 /// leads to an exit from the specified loop, and has no side-effects in the
539 /// process. If so, return the block that is exited to, otherwise return null.
541  std::set<BasicBlock*> Visited;
542  Visited.insert(L->getHeader()); // Branches to header make infinite loops.
543  BasicBlock *ExitBB = 0;
544  if (isTrivialLoopExitBlockHelper(L, BB, ExitBB, Visited))
545  return ExitBB;
546  return 0;
547 }
548 
549 /// IsTrivialUnswitchCondition - Check to see if this unswitch condition is
550 /// trivial: that is, that the condition controls whether or not the loop does
551 /// anything at all. If this is a trivial condition, unswitching produces no
552 /// code duplications (equivalently, it produces a simpler loop and a new empty
553 /// loop, which gets deleted).
554 ///
555 /// If this is a trivial condition, return true, otherwise return false. When
556 /// returning true, this sets Cond and Val to the condition that controls the
557 /// trivial condition: when Cond dynamically equals Val, the loop is known to
558 /// exit. Finally, this sets LoopExit to the BB that the loop exits to when
559 /// Cond == Val.
560 ///
561 bool LoopUnswitch::IsTrivialUnswitchCondition(Value *Cond, Constant **Val,
562  BasicBlock **LoopExit) {
563  BasicBlock *Header = currentLoop->getHeader();
564  TerminatorInst *HeaderTerm = Header->getTerminator();
565  LLVMContext &Context = Header->getContext();
566 
567  BasicBlock *LoopExitBB = 0;
568  if (BranchInst *BI = dyn_cast<BranchInst>(HeaderTerm)) {
569  // If the header block doesn't end with a conditional branch on Cond, we
570  // can't handle it.
571  if (!BI->isConditional() || BI->getCondition() != Cond)
572  return false;
573 
574  // Check to see if a successor of the branch is guaranteed to
575  // exit through a unique exit block without having any
576  // side-effects. If so, determine the value of Cond that causes it to do
577  // this.
578  if ((LoopExitBB = isTrivialLoopExitBlock(currentLoop,
579  BI->getSuccessor(0)))) {
580  if (Val) *Val = ConstantInt::getTrue(Context);
581  } else if ((LoopExitBB = isTrivialLoopExitBlock(currentLoop,
582  BI->getSuccessor(1)))) {
583  if (Val) *Val = ConstantInt::getFalse(Context);
584  }
585  } else if (SwitchInst *SI = dyn_cast<SwitchInst>(HeaderTerm)) {
586  // If this isn't a switch on Cond, we can't handle it.
587  if (SI->getCondition() != Cond) return false;
588 
589  // Check to see if a successor of the switch is guaranteed to go to the
590  // latch block or exit through a one exit block without having any
591  // side-effects. If so, determine the value of Cond that causes it to do
592  // this.
593  // Note that we can't trivially unswitch on the default case or
594  // on already unswitched cases.
595  for (SwitchInst::CaseIt i = SI->case_begin(), e = SI->case_end();
596  i != e; ++i) {
597  BasicBlock *LoopExitCandidate;
598  if ((LoopExitCandidate = isTrivialLoopExitBlock(currentLoop,
599  i.getCaseSuccessor()))) {
600  // Okay, we found a trivial case, remember the value that is trivial.
601  ConstantInt *CaseVal = i.getCaseValue();
602 
603  // Check that it was not unswitched before, since already unswitched
604  // trivial vals are looks trivial too.
605  if (BranchesInfo.isUnswitched(SI, CaseVal))
606  continue;
607  LoopExitBB = LoopExitCandidate;
608  if (Val) *Val = CaseVal;
609  break;
610  }
611  }
612  }
613 
614  // If we didn't find a single unique LoopExit block, or if the loop exit block
615  // contains phi nodes, this isn't trivial.
616  if (!LoopExitBB || isa<PHINode>(LoopExitBB->begin()))
617  return false; // Can't handle this.
618 
619  if (LoopExit) *LoopExit = LoopExitBB;
620 
621  // We already know that nothing uses any scalar values defined inside of this
622  // loop. As such, we just have to check to see if this loop will execute any
623  // side-effecting instructions (e.g. stores, calls, volatile loads) in the
624  // part of the loop that the code *would* execute. We already checked the
625  // tail, check the header now.
626  for (BasicBlock::iterator I = Header->begin(), E = Header->end(); I != E; ++I)
627  if (I->mayHaveSideEffects())
628  return false;
629  return true;
630 }
631 
632 /// UnswitchIfProfitable - We have found that we can unswitch currentLoop when
633 /// LoopCond == Val to simplify the loop. If we decide that this is profitable,
634 /// unswitch the loop, reprocess the pieces, then return true.
635 bool LoopUnswitch::UnswitchIfProfitable(Value *LoopCond, Constant *Val) {
636  Function *F = loopHeader->getParent();
637  Constant *CondVal = 0;
638  BasicBlock *ExitBlock = 0;
639 
640  if (IsTrivialUnswitchCondition(LoopCond, &CondVal, &ExitBlock)) {
641  // If the condition is trivial, always unswitch. There is no code growth
642  // for this case.
643  UnswitchTrivialCondition(currentLoop, LoopCond, CondVal, ExitBlock);
644  return true;
645  }
646 
647  // Check to see if it would be profitable to unswitch current loop.
648 
649  // Do not do non-trivial unswitch while optimizing for size.
650  if (OptimizeForSize ||
651  F->getAttributes().hasAttribute(AttributeSet::FunctionIndex,
653  return false;
654 
655  UnswitchNontrivialCondition(LoopCond, Val, currentLoop);
656  return true;
657 }
658 
659 /// CloneLoop - Recursively clone the specified loop and all of its children,
660 /// mapping the blocks with the specified map.
662  LoopInfo *LI, LPPassManager *LPM) {
663  Loop *New = new Loop();
664  LPM->insertLoop(New, PL);
665 
666  // Add all of the blocks in L to the new loop.
667  for (Loop::block_iterator I = L->block_begin(), E = L->block_end();
668  I != E; ++I)
669  if (LI->getLoopFor(*I) == L)
670  New->addBasicBlockToLoop(cast<BasicBlock>(VM[*I]), LI->getBase());
671 
672  // Add all of the subloops to the new loop.
673  for (Loop::iterator I = L->begin(), E = L->end(); I != E; ++I)
674  CloneLoop(*I, New, VM, LI, LPM);
675 
676  return New;
677 }
678 
679 /// EmitPreheaderBranchOnCondition - Emit a conditional branch on two values
680 /// if LIC == Val, branch to TrueDst, otherwise branch to FalseDest. Insert the
681 /// code immediately before InsertPt.
682 void LoopUnswitch::EmitPreheaderBranchOnCondition(Value *LIC, Constant *Val,
683  BasicBlock *TrueDest,
684  BasicBlock *FalseDest,
685  Instruction *InsertPt) {
686  // Insert a conditional branch on LIC to the two preheaders. The original
687  // code is the true version and the new code is the false version.
688  Value *BranchVal = LIC;
689  if (!isa<ConstantInt>(Val) ||
690  Val->getType() != Type::getInt1Ty(LIC->getContext()))
691  BranchVal = new ICmpInst(InsertPt, ICmpInst::ICMP_EQ, LIC, Val);
692  else if (Val != ConstantInt::getTrue(Val->getContext()))
693  // We want to enter the new loop when the condition is true.
694  std::swap(TrueDest, FalseDest);
695 
696  // Insert the new branch.
697  BranchInst *BI = BranchInst::Create(TrueDest, FalseDest, BranchVal, InsertPt);
698 
699  // If either edge is critical, split it. This helps preserve LoopSimplify
700  // form for enclosing loops.
701  SplitCriticalEdge(BI, 0, this, false, false, true);
702  SplitCriticalEdge(BI, 1, this, false, false, true);
703 }
704 
705 /// UnswitchTrivialCondition - Given a loop that has a trivial unswitchable
706 /// condition in it (a cond branch from its header block to its latch block,
707 /// where the path through the loop that doesn't execute its body has no
708 /// side-effects), unswitch it. This doesn't involve any code duplication, just
709 /// moving the conditional branch outside of the loop and updating loop info.
710 void LoopUnswitch::UnswitchTrivialCondition(Loop *L, Value *Cond,
711  Constant *Val,
712  BasicBlock *ExitBlock) {
713  DEBUG(dbgs() << "loop-unswitch: Trivial-Unswitch loop %"
714  << loopHeader->getName() << " [" << L->getBlocks().size()
715  << " blocks] in Function " << L->getHeader()->getParent()->getName()
716  << " on cond: " << *Val << " == " << *Cond << "\n");
717 
718  // First step, split the preheader, so that we know that there is a safe place
719  // to insert the conditional branch. We will change loopPreheader to have a
720  // conditional branch on Cond.
721  BasicBlock *NewPH = SplitEdge(loopPreheader, loopHeader, this);
722 
723  // Now that we have a place to insert the conditional branch, create a place
724  // to branch to: this is the exit block out of the loop that we should
725  // short-circuit to.
726 
727  // Split this block now, so that the loop maintains its exit block, and so
728  // that the jump from the preheader can execute the contents of the exit block
729  // without actually branching to it (the exit block should be dominated by the
730  // loop header, not the preheader).
731  assert(!L->contains(ExitBlock) && "Exit block is in the loop?");
732  BasicBlock *NewExit = SplitBlock(ExitBlock, ExitBlock->begin(), this);
733 
734  // Okay, now we have a position to branch from and a position to branch to,
735  // insert the new conditional branch.
736  EmitPreheaderBranchOnCondition(Cond, Val, NewExit, NewPH,
737  loopPreheader->getTerminator());
738  LPM->deleteSimpleAnalysisValue(loopPreheader->getTerminator(), L);
739  loopPreheader->getTerminator()->eraseFromParent();
740 
741  // We need to reprocess this loop, it could be unswitched again.
742  redoLoop = true;
743 
744  // Now that we know that the loop is never entered when this condition is a
745  // particular value, rewrite the loop with this info. We know that this will
746  // at least eliminate the old branch.
747  RewriteLoopBodyWithConditionConstant(L, Cond, Val, false);
748  ++NumTrivial;
749 }
750 
751 /// SplitExitEdges - Split all of the edges from inside the loop to their exit
752 /// blocks. Update the appropriate Phi nodes as we do so.
753 void LoopUnswitch::SplitExitEdges(Loop *L,
754  const SmallVectorImpl<BasicBlock *> &ExitBlocks){
755 
756  for (unsigned i = 0, e = ExitBlocks.size(); i != e; ++i) {
757  BasicBlock *ExitBlock = ExitBlocks[i];
758  SmallVector<BasicBlock *, 4> Preds(pred_begin(ExitBlock),
759  pred_end(ExitBlock));
760 
761  // Although SplitBlockPredecessors doesn't preserve loop-simplify in
762  // general, if we call it on all predecessors of all exits then it does.
763  if (!ExitBlock->isLandingPad()) {
764  SplitBlockPredecessors(ExitBlock, Preds, ".us-lcssa", this);
765  } else {
767  SplitLandingPadPredecessors(ExitBlock, Preds, ".us-lcssa", ".us-lcssa",
768  this, NewBBs);
769  }
770  }
771 }
772 
773 /// UnswitchNontrivialCondition - We determined that the loop is profitable
774 /// to unswitch when LIC equal Val. Split it into loop versions and test the
775 /// condition outside of either loop. Return the loops created as Out1/Out2.
776 void LoopUnswitch::UnswitchNontrivialCondition(Value *LIC, Constant *Val,
777  Loop *L) {
778  Function *F = loopHeader->getParent();
779  DEBUG(dbgs() << "loop-unswitch: Unswitching loop %"
780  << loopHeader->getName() << " [" << L->getBlocks().size()
781  << " blocks] in Function " << F->getName()
782  << " when '" << *Val << "' == " << *LIC << "\n");
783 
784  if (ScalarEvolution *SE = getAnalysisIfAvailable<ScalarEvolution>())
785  SE->forgetLoop(L);
786 
787  LoopBlocks.clear();
788  NewBlocks.clear();
789 
790  // First step, split the preheader and exit blocks, and add these blocks to
791  // the LoopBlocks list.
792  BasicBlock *NewPreheader = SplitEdge(loopPreheader, loopHeader, this);
793  LoopBlocks.push_back(NewPreheader);
794 
795  // We want the loop to come after the preheader, but before the exit blocks.
796  LoopBlocks.insert(LoopBlocks.end(), L->block_begin(), L->block_end());
797 
798  SmallVector<BasicBlock*, 8> ExitBlocks;
799  L->getUniqueExitBlocks(ExitBlocks);
800 
801  // Split all of the edges from inside the loop to their exit blocks. Update
802  // the appropriate Phi nodes as we do so.
803  SplitExitEdges(L, ExitBlocks);
804 
805  // The exit blocks may have been changed due to edge splitting, recompute.
806  ExitBlocks.clear();
807  L->getUniqueExitBlocks(ExitBlocks);
808 
809  // Add exit blocks to the loop blocks.
810  LoopBlocks.insert(LoopBlocks.end(), ExitBlocks.begin(), ExitBlocks.end());
811 
812  // Next step, clone all of the basic blocks that make up the loop (including
813  // the loop preheader and exit blocks), keeping track of the mapping between
814  // the instructions and blocks.
815  NewBlocks.reserve(LoopBlocks.size());
816  ValueToValueMapTy VMap;
817  for (unsigned i = 0, e = LoopBlocks.size(); i != e; ++i) {
818  BasicBlock *NewBB = CloneBasicBlock(LoopBlocks[i], VMap, ".us", F);
819 
820  NewBlocks.push_back(NewBB);
821  VMap[LoopBlocks[i]] = NewBB; // Keep the BB mapping.
822  LPM->cloneBasicBlockSimpleAnalysis(LoopBlocks[i], NewBB, L);
823  }
824 
825  // Splice the newly inserted blocks into the function right before the
826  // original preheader.
827  F->getBasicBlockList().splice(NewPreheader, F->getBasicBlockList(),
828  NewBlocks[0], F->end());
829 
830  // Now we create the new Loop object for the versioned loop.
831  Loop *NewLoop = CloneLoop(L, L->getParentLoop(), VMap, LI, LPM);
832 
833  // Recalculate unswitching quota, inherit simplified switches info for NewBB,
834  // Probably clone more loop-unswitch related loop properties.
835  BranchesInfo.cloneData(NewLoop, L, VMap);
836 
837  Loop *ParentLoop = L->getParentLoop();
838  if (ParentLoop) {
839  // Make sure to add the cloned preheader and exit blocks to the parent loop
840  // as well.
841  ParentLoop->addBasicBlockToLoop(NewBlocks[0], LI->getBase());
842  }
843 
844  for (unsigned i = 0, e = ExitBlocks.size(); i != e; ++i) {
845  BasicBlock *NewExit = cast<BasicBlock>(VMap[ExitBlocks[i]]);
846  // The new exit block should be in the same loop as the old one.
847  if (Loop *ExitBBLoop = LI->getLoopFor(ExitBlocks[i]))
848  ExitBBLoop->addBasicBlockToLoop(NewExit, LI->getBase());
849 
850  assert(NewExit->getTerminator()->getNumSuccessors() == 1 &&
851  "Exit block should have been split to have one successor!");
852  BasicBlock *ExitSucc = NewExit->getTerminator()->getSuccessor(0);
853 
854  // If the successor of the exit block had PHI nodes, add an entry for
855  // NewExit.
856  for (BasicBlock::iterator I = ExitSucc->begin();
857  PHINode *PN = dyn_cast<PHINode>(I); ++I) {
858  Value *V = PN->getIncomingValueForBlock(ExitBlocks[i]);
859  ValueToValueMapTy::iterator It = VMap.find(V);
860  if (It != VMap.end()) V = It->second;
861  PN->addIncoming(V, NewExit);
862  }
863 
864  if (LandingPadInst *LPad = NewExit->getLandingPadInst()) {
865  PHINode *PN = PHINode::Create(LPad->getType(), 0, "",
866  ExitSucc->getFirstInsertionPt());
867 
868  for (pred_iterator I = pred_begin(ExitSucc), E = pred_end(ExitSucc);
869  I != E; ++I) {
870  BasicBlock *BB = *I;
871  LandingPadInst *LPI = BB->getLandingPadInst();
872  LPI->replaceAllUsesWith(PN);
873  PN->addIncoming(LPI, BB);
874  }
875  }
876  }
877 
878  // Rewrite the code to refer to itself.
879  for (unsigned i = 0, e = NewBlocks.size(); i != e; ++i)
880  for (BasicBlock::iterator I = NewBlocks[i]->begin(),
881  E = NewBlocks[i]->end(); I != E; ++I)
883 
884  // Rewrite the original preheader to select between versions of the loop.
885  BranchInst *OldBR = cast<BranchInst>(loopPreheader->getTerminator());
886  assert(OldBR->isUnconditional() && OldBR->getSuccessor(0) == LoopBlocks[0] &&
887  "Preheader splitting did not work correctly!");
888 
889  // Emit the new branch that selects between the two versions of this loop.
890  EmitPreheaderBranchOnCondition(LIC, Val, NewBlocks[0], LoopBlocks[0], OldBR);
891  LPM->deleteSimpleAnalysisValue(OldBR, L);
892  OldBR->eraseFromParent();
893 
894  LoopProcessWorklist.push_back(NewLoop);
895  redoLoop = true;
896 
897  // Keep a WeakVH holding onto LIC. If the first call to RewriteLoopBody
898  // deletes the instruction (for example by simplifying a PHI that feeds into
899  // the condition that we're unswitching on), we don't rewrite the second
900  // iteration.
901  WeakVH LICHandle(LIC);
902 
903  // Now we rewrite the original code to know that the condition is true and the
904  // new code to know that the condition is false.
905  RewriteLoopBodyWithConditionConstant(L, LIC, Val, false);
906 
907  // It's possible that simplifying one loop could cause the other to be
908  // changed to another value or a constant. If its a constant, don't simplify
909  // it.
910  if (!LoopProcessWorklist.empty() && LoopProcessWorklist.back() == NewLoop &&
911  LICHandle && !isa<Constant>(LICHandle))
912  RewriteLoopBodyWithConditionConstant(NewLoop, LICHandle, Val, true);
913 }
914 
915 /// RemoveFromWorklist - Remove all instances of I from the worklist vector
916 /// specified.
918  std::vector<Instruction*> &Worklist) {
919 
920  Worklist.erase(std::remove(Worklist.begin(), Worklist.end(), I),
921  Worklist.end());
922 }
923 
924 /// ReplaceUsesOfWith - When we find that I really equals V, remove I from the
925 /// program, replacing all uses with V and update the worklist.
927  std::vector<Instruction*> &Worklist,
928  Loop *L, LPPassManager *LPM) {
929  DEBUG(dbgs() << "Replace with '" << *V << "': " << *I);
930 
931  // Add uses to the worklist, which may be dead now.
932  for (unsigned i = 0, e = I->getNumOperands(); i != e; ++i)
933  if (Instruction *Use = dyn_cast<Instruction>(I->getOperand(i)))
934  Worklist.push_back(Use);
935 
936  // Add users to the worklist which may be simplified now.
937  for (Value::use_iterator UI = I->use_begin(), E = I->use_end();
938  UI != E; ++UI)
939  Worklist.push_back(cast<Instruction>(*UI));
940  LPM->deleteSimpleAnalysisValue(I, L);
941  RemoveFromWorklist(I, Worklist);
942  I->replaceAllUsesWith(V);
943  I->eraseFromParent();
944  ++NumSimplify;
945 }
946 
947 /// RemoveLoopFromHierarchy - We have discovered that the specified loop has
948 /// become unwrapped, either because the backedge was deleted, or because the
949 /// edge into the header was removed. If the edge into the header from the
950 /// latch block was removed, the loop is unwrapped but subloops are still alive,
951 /// so they just reparent loops. If the loops are actually dead, they will be
952 /// removed later.
953 void LoopUnswitch::RemoveLoopFromHierarchy(Loop *L) {
954  LPM->deleteLoopFromQueue(L);
955  RemoveLoopFromWorklist(L);
956 }
957 
958 // RewriteLoopBodyWithConditionConstant - We know either that the value LIC has
959 // the value specified by Val in the specified loop, or we know it does NOT have
960 // that value. Rewrite any uses of LIC or of properties correlated to it.
961 void LoopUnswitch::RewriteLoopBodyWithConditionConstant(Loop *L, Value *LIC,
962  Constant *Val,
963  bool IsEqual) {
964  assert(!isa<Constant>(LIC) && "Why are we unswitching on a constant?");
965 
966  // FIXME: Support correlated properties, like:
967  // for (...)
968  // if (li1 < li2)
969  // ...
970  // if (li1 > li2)
971  // ...
972 
973  // FOLD boolean conditions (X|LIC), (X&LIC). Fold conditional branches,
974  // selects, switches.
975  std::vector<Instruction*> Worklist;
976  LLVMContext &Context = Val->getContext();
977 
978  // If we know that LIC == Val, or that LIC == NotVal, just replace uses of LIC
979  // in the loop with the appropriate one directly.
980  if (IsEqual || (isa<ConstantInt>(Val) &&
981  Val->getType()->isIntegerTy(1))) {
982  Value *Replacement;
983  if (IsEqual)
984  Replacement = Val;
985  else
986  Replacement = ConstantInt::get(Type::getInt1Ty(Val->getContext()),
987  !cast<ConstantInt>(Val)->getZExtValue());
988 
989  for (Value::use_iterator UI = LIC->use_begin(), E = LIC->use_end();
990  UI != E; ++UI) {
991  Instruction *U = dyn_cast<Instruction>(*UI);
992  if (!U || !L->contains(U))
993  continue;
994  Worklist.push_back(U);
995  }
996 
997  for (std::vector<Instruction*>::iterator UI = Worklist.begin(),
998  UE = Worklist.end(); UI != UE; ++UI)
999  (*UI)->replaceUsesOfWith(LIC, Replacement);
1000 
1001  SimplifyCode(Worklist, L);
1002  return;
1003  }
1004 
1005  // Otherwise, we don't know the precise value of LIC, but we do know that it
1006  // is certainly NOT "Val". As such, simplify any uses in the loop that we
1007  // can. This case occurs when we unswitch switch statements.
1008  for (Value::use_iterator UI = LIC->use_begin(), E = LIC->use_end();
1009  UI != E; ++UI) {
1010  Instruction *U = dyn_cast<Instruction>(*UI);
1011  if (!U || !L->contains(U))
1012  continue;
1013 
1014  Worklist.push_back(U);
1015 
1016  // TODO: We could do other simplifications, for example, turning
1017  // 'icmp eq LIC, Val' -> false.
1018 
1019  // If we know that LIC is not Val, use this info to simplify code.
1020  SwitchInst *SI = dyn_cast<SwitchInst>(U);
1021  if (SI == 0 || !isa<ConstantInt>(Val)) continue;
1022 
1023  SwitchInst::CaseIt DeadCase = SI->findCaseValue(cast<ConstantInt>(Val));
1024  // Default case is live for multiple values.
1025  if (DeadCase == SI->case_default()) continue;
1026 
1027  // Found a dead case value. Don't remove PHI nodes in the
1028  // successor if they become single-entry, those PHI nodes may
1029  // be in the Users list.
1030 
1031  BasicBlock *Switch = SI->getParent();
1032  BasicBlock *SISucc = DeadCase.getCaseSuccessor();
1033  BasicBlock *Latch = L->getLoopLatch();
1034 
1035  BranchesInfo.setUnswitched(SI, Val);
1036 
1037  if (!SI->findCaseDest(SISucc)) continue; // Edge is critical.
1038  // If the DeadCase successor dominates the loop latch, then the
1039  // transformation isn't safe since it will delete the sole predecessor edge
1040  // to the latch.
1041  if (Latch && DT->dominates(SISucc, Latch))
1042  continue;
1043 
1044  // FIXME: This is a hack. We need to keep the successor around
1045  // and hooked up so as to preserve the loop structure, because
1046  // trying to update it is complicated. So instead we preserve the
1047  // loop structure and put the block on a dead code path.
1048  SplitEdge(Switch, SISucc, this);
1049  // Compute the successors instead of relying on the return value
1050  // of SplitEdge, since it may have split the switch successor
1051  // after PHI nodes.
1052  BasicBlock *NewSISucc = DeadCase.getCaseSuccessor();
1053  BasicBlock *OldSISucc = *succ_begin(NewSISucc);
1054  // Create an "unreachable" destination.
1055  BasicBlock *Abort = BasicBlock::Create(Context, "us-unreachable",
1056  Switch->getParent(),
1057  OldSISucc);
1058  new UnreachableInst(Context, Abort);
1059  // Force the new case destination to branch to the "unreachable"
1060  // block while maintaining a (dead) CFG edge to the old block.
1061  NewSISucc->getTerminator()->eraseFromParent();
1062  BranchInst::Create(Abort, OldSISucc,
1063  ConstantInt::getTrue(Context), NewSISucc);
1064  // Release the PHI operands for this edge.
1065  for (BasicBlock::iterator II = NewSISucc->begin();
1066  PHINode *PN = dyn_cast<PHINode>(II); ++II)
1067  PN->setIncomingValue(PN->getBasicBlockIndex(Switch),
1068  UndefValue::get(PN->getType()));
1069  // Tell the domtree about the new block. We don't fully update the
1070  // domtree here -- instead we force it to do a full recomputation
1071  // after the pass is complete -- but we do need to inform it of
1072  // new blocks.
1073  if (DT)
1074  DT->addNewBlock(Abort, NewSISucc);
1075  }
1076 
1077  SimplifyCode(Worklist, L);
1078 }
1079 
1080 /// SimplifyCode - Okay, now that we have simplified some instructions in the
1081 /// loop, walk over it and constant prop, dce, and fold control flow where
1082 /// possible. Note that this is effectively a very simple loop-structure-aware
1083 /// optimizer. During processing of this loop, L could very well be deleted, so
1084 /// it must not be used.
1085 ///
1086 /// FIXME: When the loop optimizer is more mature, separate this out to a new
1087 /// pass.
1088 ///
1089 void LoopUnswitch::SimplifyCode(std::vector<Instruction*> &Worklist, Loop *L) {
1090  while (!Worklist.empty()) {
1091  Instruction *I = Worklist.back();
1092  Worklist.pop_back();
1093 
1094  // Simple DCE.
1095  if (isInstructionTriviallyDead(I)) {
1096  DEBUG(dbgs() << "Remove dead instruction '" << *I);
1097 
1098  // Add uses to the worklist, which may be dead now.
1099  for (unsigned i = 0, e = I->getNumOperands(); i != e; ++i)
1100  if (Instruction *Use = dyn_cast<Instruction>(I->getOperand(i)))
1101  Worklist.push_back(Use);
1102  LPM->deleteSimpleAnalysisValue(I, L);
1103  RemoveFromWorklist(I, Worklist);
1104  I->eraseFromParent();
1105  ++NumSimplify;
1106  continue;
1107  }
1108 
1109  // See if instruction simplification can hack this up. This is common for
1110  // things like "select false, X, Y" after unswitching made the condition be
1111  // 'false'. TODO: update the domtree properly so we can pass it here.
1112  if (Value *V = SimplifyInstruction(I))
1113  if (LI->replacementPreservesLCSSAForm(I, V)) {
1114  ReplaceUsesOfWith(I, V, Worklist, L, LPM);
1115  continue;
1116  }
1117 
1118  // Special case hacks that appear commonly in unswitched code.
1119  if (BranchInst *BI = dyn_cast<BranchInst>(I)) {
1120  if (BI->isUnconditional()) {
1121  // If BI's parent is the only pred of the successor, fold the two blocks
1122  // together.
1123  BasicBlock *Pred = BI->getParent();
1124  BasicBlock *Succ = BI->getSuccessor(0);
1125  BasicBlock *SinglePred = Succ->getSinglePredecessor();
1126  if (!SinglePred) continue; // Nothing to do.
1127  assert(SinglePred == Pred && "CFG broken");
1128 
1129  DEBUG(dbgs() << "Merging blocks: " << Pred->getName() << " <- "
1130  << Succ->getName() << "\n");
1131 
1132  // Resolve any single entry PHI nodes in Succ.
1133  while (PHINode *PN = dyn_cast<PHINode>(Succ->begin()))
1134  ReplaceUsesOfWith(PN, PN->getIncomingValue(0), Worklist, L, LPM);
1135 
1136  // If Succ has any successors with PHI nodes, update them to have
1137  // entries coming from Pred instead of Succ.
1138  Succ->replaceAllUsesWith(Pred);
1139 
1140  // Move all of the successor contents from Succ to Pred.
1141  Pred->getInstList().splice(BI, Succ->getInstList(), Succ->begin(),
1142  Succ->end());
1143  LPM->deleteSimpleAnalysisValue(BI, L);
1144  BI->eraseFromParent();
1145  RemoveFromWorklist(BI, Worklist);
1146 
1147  // Remove Succ from the loop tree.
1148  LI->removeBlock(Succ);
1149  LPM->deleteSimpleAnalysisValue(Succ, L);
1150  Succ->eraseFromParent();
1151  ++NumSimplify;
1152  continue;
1153  }
1154 
1155  continue;
1156  }
1157  }
1158 }
use_iterator use_end()
Definition: Value.h:152
void initializeLoopUnswitchPass(PassRegistry &)
static ConstantInt * getFalse(LLVMContext &Context)
Definition: Constants.cpp:445
AnalysisUsage & addPreserved()
BasicBlock * SplitEdge(BasicBlock *From, BasicBlock *To, Pass *P)
static IntegerType * getInt1Ty(LLVMContext &C)
Definition: Type.cpp:238
void addIncoming(Value *V, BasicBlock *BB)
static PassRegistry * getPassRegistry()
int remove(const char *path);
INITIALIZE_PASS_BEGIN(LoopUnswitch,"loop-unswitch","Unswitch loops", false, false) INITIALIZE_PASS_END(LoopUnswitch
iterator end()
Definition: Function.h:397
ValueT lookup(const KeyT &Val) const
Definition: ValueMap.h:125
BasicBlock * SplitCriticalEdge(TerminatorInst *TI, unsigned SuccNum, Pass *P=0, bool MergeIdenticalEdges=false, bool DontDeleteUselessPHIs=false, bool SplitLandingPads=false)
enable_if_c<!is_simple_type< Y >::value, typename cast_retty< X, const Y >::ret_type >::type dyn_cast(const Y &Val)
Definition: Casting.h:266
unsigned getNumOperands() const
Definition: User.h:108
loop Unswitch loops
const_iterator begin(StringRef path)
Get begin iterator over path.
Definition: Path.cpp:173
LoopT * getParentLoop() const
Definition: LoopInfo.h:96
const Function * getParent() const
Return the enclosing method, or null if none.
Definition: BasicBlock.h:116
F(f)
bool notDuplicatable
True if this function cannot be duplicated.
Definition: CodeMetrics.h:51
bool hasAttribute(unsigned Index, Attribute::AttrKind Kind) const
Return true if the attribute exists at the given index.
Definition: Attributes.cpp:818
const std::vector< BlockT * > & getBlocks() const
Definition: LoopInfo.h:138
void RemapInstruction(Instruction *I, ValueToValueMapTy &VM, RemapFlags Flags=RF_None, ValueMapTypeRemapper *TypeMapper=0, ValueMaterializer *Materializer=0)
BlockT * getHeader() const
Definition: LoopInfo.h:95
ConstantInt * findCaseDest(BasicBlock *BB)
LoopInfoBase< BlockT, LoopT > * LI
Definition: LoopInfoImpl.h:411
StringRef getName() const
Definition: Value.cpp:167
BlockT * getLoopLatch() const
Definition: LoopInfoImpl.h:154
iterator begin()
Definition: BasicBlock.h:193
AnalysisUsage & addRequired()
#define INITIALIZE_PASS_DEPENDENCY(depName)
Definition: PassSupport.h:167
bool isUnconditional() const
static Loop * CloneLoop(Loop *L, Loop *PL, ValueToValueMapTy &VM, LoopInfo *LI, LPPassManager *LPM)
unsigned NumBlocks
Number of analyzed blocks.
Definition: CodeMetrics.h:60
void analyzeBasicBlock(const BasicBlock *BB, const TargetTransformInfo &TTI)
Add information about a block to the current state.
Definition: CodeMetrics.cpp:25
loop Unswitch false
Definition: Use.h:60
#define INITIALIZE_PASS_END(passName, arg, name, cfg, analysis)
Definition: PassSupport.h:172
static BranchInst * Create(BasicBlock *IfTrue, Instruction *InsertBefore=0)
ID
LLVM Calling Convention Representation.
Definition: CallingConv.h:26
Interval::succ_iterator succ_begin(Interval *I)
Definition: Interval.h:107
BasicBlock * SplitBlockPredecessors(BasicBlock *BB, ArrayRef< BasicBlock * > Preds, const char *Suffix, Pass *P=0)
void addBasicBlockToLoop(BlockT *NewBB, LoopInfoBase< BlockT, LoopT > &LI)
Definition: LoopInfoImpl.h:185
static Value * FindLIVLoopCondition(Value *Cond, Loop *L, bool &Changed)
Pass * createLoopUnswitchPass(bool OptimizeForSize=false)
BasicBlock * getSuccessor(unsigned i) const
iterator find(const KeyT &Val)
Definition: ValueMap.h:116
AnalysisUsage & addPreservedID(const void *ID)
Loop * getLoopFor(const BasicBlock *BB) const
Definition: LoopInfo.h:618
void replaceAllUsesWith(Value *V)
Definition: Value.cpp:303
Interval::succ_iterator succ_end(Interval *I)
Definition: Interval.h:110
void replaceUsesOfWith(Value *From, Value *To)
Definition: User.cpp:26
unsigned getNumSuccessors() const
Definition: InstrTypes.h:59
static void RemoveFromWorklist(Instruction *I, std::vector< Instruction * > &Worklist)
initializer< Ty > init(const Ty &Val)
Definition: CommandLine.h:314
iterator begin() const
Definition: LoopInfo.h:130
void insertLoop(Loop *L, Loop *ParentLoop)
Definition: LoopPass.cpp:94
LLVM Basic Block Representation.
Definition: BasicBlock.h:72
BasicBlock * getSuccessor(unsigned idx) const
Definition: InstrTypes.h:65
bool isVectorTy() const
Definition: Type.h:229
LLVM Constant Representation.
Definition: Constant.h:41
Instr is a loop (backwards branch).
Definition: GCMetadata.h:51
APInt Or(const APInt &LHS, const APInt &RHS)
Bitwise OR function for APInt.
Definition: APInt.h:1845
bool isInstructionTriviallyDead(Instruction *I, const TargetLibraryInfo *TLI=0)
Definition: Local.cpp:266
LandingPadInst * getLandingPadInst()
Return the landingpad instruction associated with the landing pad.
Definition: BasicBlock.cpp:366
char & LCSSAID
Definition: LCSSA.cpp:94
Interval::pred_iterator pred_begin(Interval *I)
Definition: Interval.h:117
iterator end() const
Definition: LoopInfo.h:131
static PHINode * Create(Type *Ty, unsigned NumReservedValues, const Twine &NameStr="", Instruction *InsertBefore=0)
bool contains(const LoopT *L) const
Definition: LoopInfo.h:104
const InstListType & getInstList() const
Return the underlying instruction list container.
Definition: BasicBlock.h:214
Represent an integer comparison operator.
Definition: Instructions.h:911
bool makeLoopInvariant(Value *V, bool &Changed, Instruction *InsertPt=0) const
Definition: LoopInfo.cpp:87
Value * getOperand(unsigned i) const
Definition: User.h:88
Interval::pred_iterator pred_end(Interval *I)
Definition: Interval.h:120
#define INITIALIZE_AG_DEPENDENCY(depName)
Definition: PassSupport.h:169
static UndefValue * get(Type *T)
Definition: Constants.cpp:1334
Value * SimplifyInstruction(Instruction *I, const DataLayout *TD=0, const TargetLibraryInfo *TLI=0, const DominatorTree *DT=0)
void getUniqueExitBlocks(SmallVectorImpl< BasicBlock * > &ExitBlocks) const
Definition: LoopInfo.cpp:354
LLVMContext & getContext() const
All values hold a context through their type.
Definition: Value.cpp:517
loop unswitch
char & LoopSimplifyID
iterator end()
Definition: ValueMap.h:99
void deleteSimpleAnalysisValue(Value *V, Loop *L)
deleteSimpleAnalysisValue - Invoke deleteAnalysisValue hook for all passes.
Definition: LoopPass.cpp:147
machine trace Machine Trace Metrics
const BasicBlockListType & getBasicBlockList() const
Definition: Function.h:374
See the file comment.
Definition: ValueMap.h:75
Class for constant integers.
Definition: Constants.h:51
Value * getIncomingValue(unsigned i) const
iterator end()
Definition: BasicBlock.h:195
AnalysisUsage & addRequiredID(const void *ID)
Definition: Pass.cpp:262
Type * getType() const
Definition: Value.h:111
void eraseFromParent()
Unlink 'this' from the containing function and delete it.
Definition: BasicBlock.cpp:100
STATISTIC(NumBranches,"Number of branches unswitched")
Utility to calculate the size and a few similar metrics for a set of basic blocks.
Definition: CodeMetrics.h:39
BasicBlockTy * getCaseSuccessor()
Resolves successor for current case.
static Constant * get(Type *Ty, uint64_t V, bool isSigned=false)
Definition: Constants.cpp:492
CaseIt findCaseValue(const ConstantInt *C)
static ConstantInt * getTrue(LLVMContext &Context)
Definition: Constants.cpp:438
void splice(iterator where, iplist &L2)
Definition: ilist.h:570
raw_ostream & dbgs()
dbgs - Return a circular-buffered debug stream.
Definition: Debug.cpp:101
void swap(llvm::BitVector &LHS, llvm::BitVector &RHS)
Implement std::swap in terms of BitVector swap.
Definition: BitVector.h:591
AttributeSet getAttributes() const
Return the attribute list for this Function.
Definition: Function.h:170
BasicBlock * SplitBlock(BasicBlock *Old, Instruction *SplitPt, Pass *P)
Value * getIncomingValueForBlock(const BasicBlock *BB) const
bool isIntegerTy() const
Definition: Type.h:196
BasicBlock * getSinglePredecessor()
Return this block if it has a single predecessor block. Otherwise return a null pointer.
Definition: BasicBlock.cpp:183
static cl::opt< unsigned > Threshold("loop-unswitch-threshold", cl::desc("Max loop size to unswitch"), cl::init(100), cl::Hidden)
std::vector< BlockT * >::const_iterator block_iterator
Definition: LoopInfo.h:139
Value * getCondition() const
APInt And(const APInt &LHS, const APInt &RHS)
Bitwise AND function for APInt.
Definition: APInt.h:1840
static bool isTrivialLoopExitBlockHelper(Loop *L, BasicBlock *BB, BasicBlock *&ExitBB, std::set< BasicBlock * > &Visited)
block_iterator block_end() const
Definition: LoopInfo.h:141
use_iterator use_begin()
Definition: Value.h:150
BasicBlock * CloneBasicBlock(const BasicBlock *BB, ValueToValueMapTy &VMap, const Twine &NameSuffix="", Function *F=0, ClonedCodeInfo *CodeInfo=0)
#define I(x, y, z)
Definition: MD5.cpp:54
TerminatorInst * getTerminator()
Returns the terminator instruction if the block is well formed or null if the block is not well forme...
Definition: BasicBlock.cpp:120
bool isLandingPad() const
Return true if this basic block is a landing pad.
Definition: BasicBlock.cpp:360
static BasicBlock * Create(LLVMContext &Context, const Twine &Name="", Function *Parent=0, BasicBlock *InsertBefore=0)
Creates a new BasicBlock.
Definition: BasicBlock.h:109
CaseIt case_default()
unsigned getNumCases() const
LLVMContext & getContext() const
Get the context in which this basic block lives.
Definition: BasicBlock.cpp:33
Module * getParent()
Definition: GlobalValue.h:286
LLVM Value Representation.
Definition: Value.h:66
iterator end() const
Definition: StringRef.h:99
static void ReplaceUsesOfWith(Instruction *I, Value *V, std::vector< Instruction * > &Worklist, Loop *L, LPPassManager *LPM)
#define DEBUG(X)
Definition: Debug.h:97
block_iterator block_begin() const
Definition: LoopInfo.h:140
std::vector< LoopT * >::const_iterator iterator
Definition: LoopInfo.h:127
void SplitLandingPadPredecessors(BasicBlock *OrigBB, ArrayRef< BasicBlock * > Preds, const char *Suffix, const char *Suffix2, Pass *P, SmallVectorImpl< BasicBlock * > &NewBBs)
void setIncomingValue(unsigned i, Value *V)
unsigned NumInsts
Number of instructions in the analyzed blocks.
Definition: CodeMetrics.h:57
static BasicBlock * isTrivialLoopExitBlock(Loop *L, BasicBlock *BB)
tier< T1, T2 > tie(T1 &f, T2 &s)
Definition: STLExtras.h:216
int getBasicBlockIndex(const BasicBlock *BB) const
LoopInfoBase< BasicBlock, Loop > & getBase()
Definition: LoopInfo.h:602
const BasicBlock * getParent() const
Definition: Instruction.h:52