LLVM  8.0.1
SimplifyCFG.cpp
Go to the documentation of this file.
1 //===- SimplifyCFG.cpp - Code to perform CFG simplification ---------------===//
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 // Peephole optimize the CFG.
11 //
12 //===----------------------------------------------------------------------===//
13 
14 #include "llvm/ADT/APInt.h"
15 #include "llvm/ADT/ArrayRef.h"
16 #include "llvm/ADT/DenseMap.h"
17 #include "llvm/ADT/Optional.h"
18 #include "llvm/ADT/STLExtras.h"
19 #include "llvm/ADT/SetOperations.h"
20 #include "llvm/ADT/SetVector.h"
21 #include "llvm/ADT/SmallPtrSet.h"
22 #include "llvm/ADT/SmallVector.h"
23 #include "llvm/ADT/Statistic.h"
24 #include "llvm/ADT/StringRef.h"
32 #include "llvm/IR/Attributes.h"
33 #include "llvm/IR/BasicBlock.h"
34 #include "llvm/IR/CFG.h"
35 #include "llvm/IR/CallSite.h"
36 #include "llvm/IR/Constant.h"
37 #include "llvm/IR/ConstantRange.h"
38 #include "llvm/IR/Constants.h"
39 #include "llvm/IR/DataLayout.h"
40 #include "llvm/IR/DerivedTypes.h"
41 #include "llvm/IR/Function.h"
42 #include "llvm/IR/GlobalValue.h"
43 #include "llvm/IR/GlobalVariable.h"
44 #include "llvm/IR/IRBuilder.h"
45 #include "llvm/IR/InstrTypes.h"
46 #include "llvm/IR/Instruction.h"
47 #include "llvm/IR/Instructions.h"
48 #include "llvm/IR/IntrinsicInst.h"
49 #include "llvm/IR/Intrinsics.h"
50 #include "llvm/IR/LLVMContext.h"
51 #include "llvm/IR/MDBuilder.h"
52 #include "llvm/IR/Metadata.h"
53 #include "llvm/IR/Module.h"
54 #include "llvm/IR/NoFolder.h"
55 #include "llvm/IR/Operator.h"
56 #include "llvm/IR/PatternMatch.h"
57 #include "llvm/IR/Type.h"
58 #include "llvm/IR/Use.h"
59 #include "llvm/IR/User.h"
60 #include "llvm/IR/Value.h"
61 #include "llvm/Support/Casting.h"
63 #include "llvm/Support/Debug.h"
65 #include "llvm/Support/KnownBits.h"
70 #include <algorithm>
71 #include <cassert>
72 #include <climits>
73 #include <cstddef>
74 #include <cstdint>
75 #include <iterator>
76 #include <map>
77 #include <set>
78 #include <tuple>
79 #include <utility>
80 #include <vector>
81 
82 using namespace llvm;
83 using namespace PatternMatch;
84 
85 #define DEBUG_TYPE "simplifycfg"
86 
87 // Chosen as 2 so as to be cheap, but still to have enough power to fold
88 // a select, so the "clamp" idiom (of a min followed by a max) will be caught.
89 // To catch this, we need to fold a compare and a select, hence '2' being the
90 // minimum reasonable default.
92  "phi-node-folding-threshold", cl::Hidden, cl::init(2),
93  cl::desc(
94  "Control the amount of phi node folding to perform (default = 2)"));
95 
96 static cl::opt<bool> DupRet(
97  "simplifycfg-dup-ret", cl::Hidden, cl::init(false),
98  cl::desc("Duplicate return instructions into unconditional branches"));
99 
100 static cl::opt<bool>
101  SinkCommon("simplifycfg-sink-common", cl::Hidden, cl::init(true),
102  cl::desc("Sink common instructions down to the end block"));
103 
105  "simplifycfg-hoist-cond-stores", cl::Hidden, cl::init(true),
106  cl::desc("Hoist conditional stores if an unconditional store precedes"));
107 
109  "simplifycfg-merge-cond-stores", cl::Hidden, cl::init(true),
110  cl::desc("Hoist conditional stores even if an unconditional store does not "
111  "precede - hoist multiple conditional stores into a single "
112  "predicated store"));
113 
115  "simplifycfg-merge-cond-stores-aggressively", cl::Hidden, cl::init(false),
116  cl::desc("When merging conditional stores, do so even if the resultant "
117  "basic blocks are unlikely to be if-converted as a result"));
118 
120  "speculate-one-expensive-inst", cl::Hidden, cl::init(true),
121  cl::desc("Allow exactly one expensive instruction to be speculatively "
122  "executed"));
123 
125  "max-speculation-depth", cl::Hidden, cl::init(10),
126  cl::desc("Limit maximum recursion depth when calculating costs of "
127  "speculatively executed instructions"));
128 
129 STATISTIC(NumBitMaps, "Number of switch instructions turned into bitmaps");
130 STATISTIC(NumLinearMaps,
131  "Number of switch instructions turned into linear mapping");
132 STATISTIC(NumLookupTables,
133  "Number of switch instructions turned into lookup tables");
134 STATISTIC(
135  NumLookupTablesHoles,
136  "Number of switch instructions turned into lookup tables (holes checked)");
137 STATISTIC(NumTableCmpReuses, "Number of reused switch table lookup compares");
138 STATISTIC(NumSinkCommons,
139  "Number of common instructions sunk down to the end block");
140 STATISTIC(NumSpeculations, "Number of speculative executed instructions");
141 
142 namespace {
143 
144 // The first field contains the value that the switch produces when a certain
145 // case group is selected, and the second field is a vector containing the
146 // cases composing the case group.
147 using SwitchCaseResultVectorTy =
149 
150 // The first field contains the phi node that generates a result of the switch
151 // and the second field contains the value generated for a certain case in the
152 // switch for that PHI.
153 using SwitchCaseResultsTy = SmallVector<std::pair<PHINode *, Constant *>, 4>;
154 
155 /// ValueEqualityComparisonCase - Represents a case of a switch.
156 struct ValueEqualityComparisonCase {
158  BasicBlock *Dest;
159 
160  ValueEqualityComparisonCase(ConstantInt *Value, BasicBlock *Dest)
161  : Value(Value), Dest(Dest) {}
162 
163  bool operator<(ValueEqualityComparisonCase RHS) const {
164  // Comparing pointers is ok as we only rely on the order for uniquing.
165  return Value < RHS.Value;
166  }
167 
168  bool operator==(BasicBlock *RHSDest) const { return Dest == RHSDest; }
169 };
170 
171 class SimplifyCFGOpt {
172  const TargetTransformInfo &TTI;
173  const DataLayout &DL;
174  SmallPtrSetImpl<BasicBlock *> *LoopHeaders;
175  const SimplifyCFGOptions &Options;
176  bool Resimplify;
177 
178  Value *isValueEqualityComparison(Instruction *TI);
179  BasicBlock *GetValueEqualityComparisonCases(
180  Instruction *TI, std::vector<ValueEqualityComparisonCase> &Cases);
181  bool SimplifyEqualityComparisonWithOnlyPredecessor(Instruction *TI,
182  BasicBlock *Pred,
183  IRBuilder<> &Builder);
184  bool FoldValueComparisonIntoPredecessors(Instruction *TI,
185  IRBuilder<> &Builder);
186 
187  bool SimplifyReturn(ReturnInst *RI, IRBuilder<> &Builder);
188  bool SimplifyResume(ResumeInst *RI, IRBuilder<> &Builder);
189  bool SimplifySingleResume(ResumeInst *RI);
190  bool SimplifyCommonResume(ResumeInst *RI);
191  bool SimplifyCleanupReturn(CleanupReturnInst *RI);
192  bool SimplifyUnreachable(UnreachableInst *UI);
193  bool SimplifySwitch(SwitchInst *SI, IRBuilder<> &Builder);
194  bool SimplifyIndirectBr(IndirectBrInst *IBI);
195  bool SimplifyUncondBranch(BranchInst *BI, IRBuilder<> &Builder);
196  bool SimplifyCondBranch(BranchInst *BI, IRBuilder<> &Builder);
197 
198  bool tryToSimplifyUncondBranchWithICmpInIt(ICmpInst *ICI,
199  IRBuilder<> &Builder);
200 
201 public:
202  SimplifyCFGOpt(const TargetTransformInfo &TTI, const DataLayout &DL,
203  SmallPtrSetImpl<BasicBlock *> *LoopHeaders,
204  const SimplifyCFGOptions &Opts)
205  : TTI(TTI), DL(DL), LoopHeaders(LoopHeaders), Options(Opts) {}
206 
207  bool run(BasicBlock *BB);
208  bool simplifyOnce(BasicBlock *BB);
209 
210  // Helper to set Resimplify and return change indication.
211  bool requestResimplify() {
212  Resimplify = true;
213  return true;
214  }
215 };
216 
217 } // end anonymous namespace
218 
219 /// Return true if it is safe to merge these two
220 /// terminator instructions together.
221 static bool
223  SmallSetVector<BasicBlock *, 4> *FailBlocks = nullptr) {
224  if (SI1 == SI2)
225  return false; // Can't merge with self!
226 
227  // It is not safe to merge these two switch instructions if they have a common
228  // successor, and if that successor has a PHI node, and if *that* PHI node has
229  // conflicting incoming values from the two switch blocks.
230  BasicBlock *SI1BB = SI1->getParent();
231  BasicBlock *SI2BB = SI2->getParent();
232 
233  SmallPtrSet<BasicBlock *, 16> SI1Succs(succ_begin(SI1BB), succ_end(SI1BB));
234  bool Fail = false;
235  for (BasicBlock *Succ : successors(SI2BB))
236  if (SI1Succs.count(Succ))
237  for (BasicBlock::iterator BBI = Succ->begin(); isa<PHINode>(BBI); ++BBI) {
238  PHINode *PN = cast<PHINode>(BBI);
239  if (PN->getIncomingValueForBlock(SI1BB) !=
240  PN->getIncomingValueForBlock(SI2BB)) {
241  if (FailBlocks)
242  FailBlocks->insert(Succ);
243  Fail = true;
244  }
245  }
246 
247  return !Fail;
248 }
249 
250 /// Return true if it is safe and profitable to merge these two terminator
251 /// instructions together, where SI1 is an unconditional branch. PhiNodes will
252 /// store all PHI nodes in common successors.
253 static bool
255  Instruction *Cond,
256  SmallVectorImpl<PHINode *> &PhiNodes) {
257  if (SI1 == SI2)
258  return false; // Can't merge with self!
259  assert(SI1->isUnconditional() && SI2->isConditional());
260 
261  // We fold the unconditional branch if we can easily update all PHI nodes in
262  // common successors:
263  // 1> We have a constant incoming value for the conditional branch;
264  // 2> We have "Cond" as the incoming value for the unconditional branch;
265  // 3> SI2->getCondition() and Cond have same operands.
266  CmpInst *Ci2 = dyn_cast<CmpInst>(SI2->getCondition());
267  if (!Ci2)
268  return false;
269  if (!(Cond->getOperand(0) == Ci2->getOperand(0) &&
270  Cond->getOperand(1) == Ci2->getOperand(1)) &&
271  !(Cond->getOperand(0) == Ci2->getOperand(1) &&
272  Cond->getOperand(1) == Ci2->getOperand(0)))
273  return false;
274 
275  BasicBlock *SI1BB = SI1->getParent();
276  BasicBlock *SI2BB = SI2->getParent();
277  SmallPtrSet<BasicBlock *, 16> SI1Succs(succ_begin(SI1BB), succ_end(SI1BB));
278  for (BasicBlock *Succ : successors(SI2BB))
279  if (SI1Succs.count(Succ))
280  for (BasicBlock::iterator BBI = Succ->begin(); isa<PHINode>(BBI); ++BBI) {
281  PHINode *PN = cast<PHINode>(BBI);
282  if (PN->getIncomingValueForBlock(SI1BB) != Cond ||
283  !isa<ConstantInt>(PN->getIncomingValueForBlock(SI2BB)))
284  return false;
285  PhiNodes.push_back(PN);
286  }
287  return true;
288 }
289 
290 /// Update PHI nodes in Succ to indicate that there will now be entries in it
291 /// from the 'NewPred' block. The values that will be flowing into the PHI nodes
292 /// will be the same as those coming in from ExistPred, an existing predecessor
293 /// of Succ.
294 static void AddPredecessorToBlock(BasicBlock *Succ, BasicBlock *NewPred,
295  BasicBlock *ExistPred) {
296  for (PHINode &PN : Succ->phis())
297  PN.addIncoming(PN.getIncomingValueForBlock(ExistPred), NewPred);
298 }
299 
300 /// Compute an abstract "cost" of speculating the given instruction,
301 /// which is assumed to be safe to speculate. TCC_Free means cheap,
302 /// TCC_Basic means less cheap, and TCC_Expensive means prohibitively
303 /// expensive.
304 static unsigned ComputeSpeculationCost(const User *I,
305  const TargetTransformInfo &TTI) {
307  "Instruction is not safe to speculatively execute!");
308  return TTI.getUserCost(I);
309 }
310 
311 /// If we have a merge point of an "if condition" as accepted above,
312 /// return true if the specified value dominates the block. We
313 /// don't handle the true generality of domination here, just a special case
314 /// which works well enough for us.
315 ///
316 /// If AggressiveInsts is non-null, and if V does not dominate BB, we check to
317 /// see if V (which must be an instruction) and its recursive operands
318 /// that do not dominate BB have a combined cost lower than CostRemaining and
319 /// are non-trapping. If both are true, the instruction is inserted into the
320 /// set and true is returned.
321 ///
322 /// The cost for most non-trapping instructions is defined as 1 except for
323 /// Select whose cost is 2.
324 ///
325 /// After this function returns, CostRemaining is decreased by the cost of
326 /// V plus its non-dominating operands. If that cost is greater than
327 /// CostRemaining, false is returned and CostRemaining is undefined.
329  SmallPtrSetImpl<Instruction *> &AggressiveInsts,
330  unsigned &CostRemaining,
331  const TargetTransformInfo &TTI,
332  unsigned Depth = 0) {
333  // It is possible to hit a zero-cost cycle (phi/gep instructions for example),
334  // so limit the recursion depth.
335  // TODO: While this recursion limit does prevent pathological behavior, it
336  // would be better to track visited instructions to avoid cycles.
337  if (Depth == MaxSpeculationDepth)
338  return false;
339 
341  if (!I) {
342  // Non-instructions all dominate instructions, but not all constantexprs
343  // can be executed unconditionally.
344  if (ConstantExpr *C = dyn_cast<ConstantExpr>(V))
345  if (C->canTrap())
346  return false;
347  return true;
348  }
349  BasicBlock *PBB = I->getParent();
350 
351  // We don't want to allow weird loops that might have the "if condition" in
352  // the bottom of this block.
353  if (PBB == BB)
354  return false;
355 
356  // If this instruction is defined in a block that contains an unconditional
357  // branch to BB, then it must be in the 'conditional' part of the "if
358  // statement". If not, it definitely dominates the region.
360  if (!BI || BI->isConditional() || BI->getSuccessor(0) != BB)
361  return true;
362 
363  // If we have seen this instruction before, don't count it again.
364  if (AggressiveInsts.count(I))
365  return true;
366 
367  // Okay, it looks like the instruction IS in the "condition". Check to
368  // see if it's a cheap instruction to unconditionally compute, and if it
369  // only uses stuff defined outside of the condition. If so, hoist it out.
371  return false;
372 
373  unsigned Cost = ComputeSpeculationCost(I, TTI);
374 
375  // Allow exactly one instruction to be speculated regardless of its cost
376  // (as long as it is safe to do so).
377  // This is intended to flatten the CFG even if the instruction is a division
378  // or other expensive operation. The speculation of an expensive instruction
379  // is expected to be undone in CodeGenPrepare if the speculation has not
380  // enabled further IR optimizations.
381  if (Cost > CostRemaining &&
382  (!SpeculateOneExpensiveInst || !AggressiveInsts.empty() || Depth > 0))
383  return false;
384 
385  // Avoid unsigned wrap.
386  CostRemaining = (Cost > CostRemaining) ? 0 : CostRemaining - Cost;
387 
388  // Okay, we can only really hoist these out if their operands do
389  // not take us over the cost threshold.
390  for (User::op_iterator i = I->op_begin(), e = I->op_end(); i != e; ++i)
391  if (!DominatesMergePoint(*i, BB, AggressiveInsts, CostRemaining, TTI,
392  Depth + 1))
393  return false;
394  // Okay, it's safe to do this! Remember this instruction.
395  AggressiveInsts.insert(I);
396  return true;
397 }
398 
399 /// Extract ConstantInt from value, looking through IntToPtr
400 /// and PointerNullValue. Return NULL if value is not a constant int.
401 static ConstantInt *GetConstantInt(Value *V, const DataLayout &DL) {
402  // Normal constant int.
403  ConstantInt *CI = dyn_cast<ConstantInt>(V);
404  if (CI || !isa<Constant>(V) || !V->getType()->isPointerTy())
405  return CI;
406 
407  // This is some kind of pointer constant. Turn it into a pointer-sized
408  // ConstantInt if possible.
409  IntegerType *PtrTy = cast<IntegerType>(DL.getIntPtrType(V->getType()));
410 
411  // Null pointer means 0, see SelectionDAGBuilder::getValue(const Value*).
412  if (isa<ConstantPointerNull>(V))
413  return ConstantInt::get(PtrTy, 0);
414 
415  // IntToPtr const int.
416  if (ConstantExpr *CE = dyn_cast<ConstantExpr>(V))
417  if (CE->getOpcode() == Instruction::IntToPtr)
418  if (ConstantInt *CI = dyn_cast<ConstantInt>(CE->getOperand(0))) {
419  // The constant is very likely to have the right type already.
420  if (CI->getType() == PtrTy)
421  return CI;
422  else
423  return cast<ConstantInt>(
424  ConstantExpr::getIntegerCast(CI, PtrTy, /*isSigned=*/false));
425  }
426  return nullptr;
427 }
428 
429 namespace {
430 
431 /// Given a chain of or (||) or and (&&) comparison of a value against a
432 /// constant, this will try to recover the information required for a switch
433 /// structure.
434 /// It will depth-first traverse the chain of comparison, seeking for patterns
435 /// like %a == 12 or %a < 4 and combine them to produce a set of integer
436 /// representing the different cases for the switch.
437 /// Note that if the chain is composed of '||' it will build the set of elements
438 /// that matches the comparisons (i.e. any of this value validate the chain)
439 /// while for a chain of '&&' it will build the set elements that make the test
440 /// fail.
441 struct ConstantComparesGatherer {
442  const DataLayout &DL;
443 
444  /// Value found for the switch comparison
445  Value *CompValue = nullptr;
446 
447  /// Extra clause to be checked before the switch
448  Value *Extra = nullptr;
449 
450  /// Set of integers to match in switch
452 
453  /// Number of comparisons matched in the and/or chain
454  unsigned UsedICmps = 0;
455 
456  /// Construct and compute the result for the comparison instruction Cond
457  ConstantComparesGatherer(Instruction *Cond, const DataLayout &DL) : DL(DL) {
458  gather(Cond);
459  }
460 
461  ConstantComparesGatherer(const ConstantComparesGatherer &) = delete;
462  ConstantComparesGatherer &
463  operator=(const ConstantComparesGatherer &) = delete;
464 
465 private:
466  /// Try to set the current value used for the comparison, it succeeds only if
467  /// it wasn't set before or if the new value is the same as the old one
468  bool setValueOnce(Value *NewVal) {
469  if (CompValue && CompValue != NewVal)
470  return false;
471  CompValue = NewVal;
472  return (CompValue != nullptr);
473  }
474 
475  /// Try to match Instruction "I" as a comparison against a constant and
476  /// populates the array Vals with the set of values that match (or do not
477  /// match depending on isEQ).
478  /// Return false on failure. On success, the Value the comparison matched
479  /// against is placed in CompValue.
480  /// If CompValue is already set, the function is expected to fail if a match
481  /// is found but the value compared to is different.
482  bool matchInstruction(Instruction *I, bool isEQ) {
483  // If this is an icmp against a constant, handle this as one of the cases.
484  ICmpInst *ICI;
485  ConstantInt *C;
486  if (!((ICI = dyn_cast<ICmpInst>(I)) &&
487  (C = GetConstantInt(I->getOperand(1), DL)))) {
488  return false;
489  }
490 
491  Value *RHSVal;
492  const APInt *RHSC;
493 
494  // Pattern match a special case
495  // (x & ~2^z) == y --> x == y || x == y|2^z
496  // This undoes a transformation done by instcombine to fuse 2 compares.
497  if (ICI->getPredicate() == (isEQ ? ICmpInst::ICMP_EQ : ICmpInst::ICMP_NE)) {
498  // It's a little bit hard to see why the following transformations are
499  // correct. Here is a CVC3 program to verify them for 64-bit values:
500 
501  /*
502  ONE : BITVECTOR(64) = BVZEROEXTEND(0bin1, 63);
503  x : BITVECTOR(64);
504  y : BITVECTOR(64);
505  z : BITVECTOR(64);
506  mask : BITVECTOR(64) = BVSHL(ONE, z);
507  QUERY( (y & ~mask = y) =>
508  ((x & ~mask = y) <=> (x = y OR x = (y | mask)))
509  );
510  QUERY( (y | mask = y) =>
511  ((x | mask = y) <=> (x = y OR x = (y & ~mask)))
512  );
513  */
514 
515  // Please note that each pattern must be a dual implication (<--> or
516  // iff). One directional implication can create spurious matches. If the
517  // implication is only one-way, an unsatisfiable condition on the left
518  // side can imply a satisfiable condition on the right side. Dual
519  // implication ensures that satisfiable conditions are transformed to
520  // other satisfiable conditions and unsatisfiable conditions are
521  // transformed to other unsatisfiable conditions.
522 
523  // Here is a concrete example of a unsatisfiable condition on the left
524  // implying a satisfiable condition on the right:
525  //
526  // mask = (1 << z)
527  // (x & ~mask) == y --> (x == y || x == (y | mask))
528  //
529  // Substituting y = 3, z = 0 yields:
530  // (x & -2) == 3 --> (x == 3 || x == 2)
531 
532  // Pattern match a special case:
533  /*
534  QUERY( (y & ~mask = y) =>
535  ((x & ~mask = y) <=> (x = y OR x = (y | mask)))
536  );
537  */
538  if (match(ICI->getOperand(0),
539  m_And(m_Value(RHSVal), m_APInt(RHSC)))) {
540  APInt Mask = ~*RHSC;
541  if (Mask.isPowerOf2() && (C->getValue() & ~Mask) == C->getValue()) {
542  // If we already have a value for the switch, it has to match!
543  if (!setValueOnce(RHSVal))
544  return false;
545 
546  Vals.push_back(C);
547  Vals.push_back(
549  C->getValue() | Mask));
550  UsedICmps++;
551  return true;
552  }
553  }
554 
555  // Pattern match a special case:
556  /*
557  QUERY( (y | mask = y) =>
558  ((x | mask = y) <=> (x = y OR x = (y & ~mask)))
559  );
560  */
561  if (match(ICI->getOperand(0),
562  m_Or(m_Value(RHSVal), m_APInt(RHSC)))) {
563  APInt Mask = *RHSC;
564  if (Mask.isPowerOf2() && (C->getValue() | Mask) == C->getValue()) {
565  // If we already have a value for the switch, it has to match!
566  if (!setValueOnce(RHSVal))
567  return false;
568 
569  Vals.push_back(C);
571  C->getValue() & ~Mask));
572  UsedICmps++;
573  return true;
574  }
575  }
576 
577  // If we already have a value for the switch, it has to match!
578  if (!setValueOnce(ICI->getOperand(0)))
579  return false;
580 
581  UsedICmps++;
582  Vals.push_back(C);
583  return ICI->getOperand(0);
584  }
585 
586  // If we have "x ult 3", for example, then we can add 0,1,2 to the set.
588  ICI->getPredicate(), C->getValue());
589 
590  // Shift the range if the compare is fed by an add. This is the range
591  // compare idiom as emitted by instcombine.
592  Value *CandidateVal = I->getOperand(0);
593  if (match(I->getOperand(0), m_Add(m_Value(RHSVal), m_APInt(RHSC)))) {
594  Span = Span.subtract(*RHSC);
595  CandidateVal = RHSVal;
596  }
597 
598  // If this is an and/!= check, then we are looking to build the set of
599  // value that *don't* pass the and chain. I.e. to turn "x ugt 2" into
600  // x != 0 && x != 1.
601  if (!isEQ)
602  Span = Span.inverse();
603 
604  // If there are a ton of values, we don't want to make a ginormous switch.
605  if (Span.isSizeLargerThan(8) || Span.isEmptySet()) {
606  return false;
607  }
608 
609  // If we already have a value for the switch, it has to match!
610  if (!setValueOnce(CandidateVal))
611  return false;
612 
613  // Add all values from the range to the set
614  for (APInt Tmp = Span.getLower(); Tmp != Span.getUpper(); ++Tmp)
615  Vals.push_back(ConstantInt::get(I->getContext(), Tmp));
616 
617  UsedICmps++;
618  return true;
619  }
620 
621  /// Given a potentially 'or'd or 'and'd together collection of icmp
622  /// eq/ne/lt/gt instructions that compare a value against a constant, extract
623  /// the value being compared, and stick the list constants into the Vals
624  /// vector.
625  /// One "Extra" case is allowed to differ from the other.
626  void gather(Value *V) {
628  bool isEQ = (I->getOpcode() == Instruction::Or);
629 
630  // Keep a stack (SmallVector for efficiency) for depth-first traversal
632  SmallPtrSet<Value *, 8> Visited;
633 
634  // Initialize
635  Visited.insert(V);
636  DFT.push_back(V);
637 
638  while (!DFT.empty()) {
639  V = DFT.pop_back_val();
640 
641  if (Instruction *I = dyn_cast<Instruction>(V)) {
642  // If it is a || (or && depending on isEQ), process the operands.
643  if (I->getOpcode() == (isEQ ? Instruction::Or : Instruction::And)) {
644  if (Visited.insert(I->getOperand(1)).second)
645  DFT.push_back(I->getOperand(1));
646  if (Visited.insert(I->getOperand(0)).second)
647  DFT.push_back(I->getOperand(0));
648  continue;
649  }
650 
651  // Try to match the current instruction
652  if (matchInstruction(I, isEQ))
653  // Match succeed, continue the loop
654  continue;
655  }
656 
657  // One element of the sequence of || (or &&) could not be match as a
658  // comparison against the same value as the others.
659  // We allow only one "Extra" case to be checked before the switch
660  if (!Extra) {
661  Extra = V;
662  continue;
663  }
664  // Failed to parse a proper sequence, abort now
665  CompValue = nullptr;
666  break;
667  }
668  }
669 };
670 
671 } // end anonymous namespace
672 
674  Instruction *Cond = nullptr;
675  if (SwitchInst *SI = dyn_cast<SwitchInst>(TI)) {
676  Cond = dyn_cast<Instruction>(SI->getCondition());
677  } else if (BranchInst *BI = dyn_cast<BranchInst>(TI)) {
678  if (BI->isConditional())
679  Cond = dyn_cast<Instruction>(BI->getCondition());
680  } else if (IndirectBrInst *IBI = dyn_cast<IndirectBrInst>(TI)) {
681  Cond = dyn_cast<Instruction>(IBI->getAddress());
682  }
683 
684  TI->eraseFromParent();
685  if (Cond)
687 }
688 
689 /// Return true if the specified terminator checks
690 /// to see if a value is equal to constant integer value.
691 Value *SimplifyCFGOpt::isValueEqualityComparison(Instruction *TI) {
692  Value *CV = nullptr;
693  if (SwitchInst *SI = dyn_cast<SwitchInst>(TI)) {
694  // Do not permit merging of large switch instructions into their
695  // predecessors unless there is only one predecessor.
696  if (!SI->getParent()->hasNPredecessorsOrMore(128 / SI->getNumSuccessors()))
697  CV = SI->getCondition();
698  } else if (BranchInst *BI = dyn_cast<BranchInst>(TI))
699  if (BI->isConditional() && BI->getCondition()->hasOneUse())
700  if (ICmpInst *ICI = dyn_cast<ICmpInst>(BI->getCondition())) {
701  if (ICI->isEquality() && GetConstantInt(ICI->getOperand(1), DL))
702  CV = ICI->getOperand(0);
703  }
704 
705  // Unwrap any lossless ptrtoint cast.
706  if (CV) {
707  if (PtrToIntInst *PTII = dyn_cast<PtrToIntInst>(CV)) {
708  Value *Ptr = PTII->getPointerOperand();
709  if (PTII->getType() == DL.getIntPtrType(Ptr->getType()))
710  CV = Ptr;
711  }
712  }
713  return CV;
714 }
715 
716 /// Given a value comparison instruction,
717 /// decode all of the 'cases' that it represents and return the 'default' block.
718 BasicBlock *SimplifyCFGOpt::GetValueEqualityComparisonCases(
719  Instruction *TI, std::vector<ValueEqualityComparisonCase> &Cases) {
720  if (SwitchInst *SI = dyn_cast<SwitchInst>(TI)) {
721  Cases.reserve(SI->getNumCases());
722  for (auto Case : SI->cases())
723  Cases.push_back(ValueEqualityComparisonCase(Case.getCaseValue(),
724  Case.getCaseSuccessor()));
725  return SI->getDefaultDest();
726  }
727 
728  BranchInst *BI = cast<BranchInst>(TI);
729  ICmpInst *ICI = cast<ICmpInst>(BI->getCondition());
730  BasicBlock *Succ = BI->getSuccessor(ICI->getPredicate() == ICmpInst::ICMP_NE);
731  Cases.push_back(ValueEqualityComparisonCase(
732  GetConstantInt(ICI->getOperand(1), DL), Succ));
733  return BI->getSuccessor(ICI->getPredicate() == ICmpInst::ICMP_EQ);
734 }
735 
736 /// Given a vector of bb/value pairs, remove any entries
737 /// in the list that match the specified block.
738 static void
740  std::vector<ValueEqualityComparisonCase> &Cases) {
741  Cases.erase(std::remove(Cases.begin(), Cases.end(), BB), Cases.end());
742 }
743 
744 /// Return true if there are any keys in C1 that exist in C2 as well.
745 static bool ValuesOverlap(std::vector<ValueEqualityComparisonCase> &C1,
746  std::vector<ValueEqualityComparisonCase> &C2) {
747  std::vector<ValueEqualityComparisonCase> *V1 = &C1, *V2 = &C2;
748 
749  // Make V1 be smaller than V2.
750  if (V1->size() > V2->size())
751  std::swap(V1, V2);
752 
753  if (V1->empty())
754  return false;
755  if (V1->size() == 1) {
756  // Just scan V2.
757  ConstantInt *TheVal = (*V1)[0].Value;
758  for (unsigned i = 0, e = V2->size(); i != e; ++i)
759  if (TheVal == (*V2)[i].Value)
760  return true;
761  }
762 
763  // Otherwise, just sort both lists and compare element by element.
764  array_pod_sort(V1->begin(), V1->end());
765  array_pod_sort(V2->begin(), V2->end());
766  unsigned i1 = 0, i2 = 0, e1 = V1->size(), e2 = V2->size();
767  while (i1 != e1 && i2 != e2) {
768  if ((*V1)[i1].Value == (*V2)[i2].Value)
769  return true;
770  if ((*V1)[i1].Value < (*V2)[i2].Value)
771  ++i1;
772  else
773  ++i2;
774  }
775  return false;
776 }
777 
778 // Set branch weights on SwitchInst. This sets the metadata if there is at
779 // least one non-zero weight.
781  // Check that there is at least one non-zero weight. Otherwise, pass
782  // nullptr to setMetadata which will erase the existing metadata.
783  MDNode *N = nullptr;
784  if (llvm::any_of(Weights, [](uint32_t W) { return W != 0; }))
785  N = MDBuilder(SI->getParent()->getContext()).createBranchWeights(Weights);
787 }
788 
789 // Similar to the above, but for branch and select instructions that take
790 // exactly 2 weights.
791 static void setBranchWeights(Instruction *I, uint32_t TrueWeight,
792  uint32_t FalseWeight) {
793  assert(isa<BranchInst>(I) || isa<SelectInst>(I));
794  // Check that there is at least one non-zero weight. Otherwise, pass
795  // nullptr to setMetadata which will erase the existing metadata.
796  MDNode *N = nullptr;
797  if (TrueWeight || FalseWeight)
798  N = MDBuilder(I->getParent()->getContext())
799  .createBranchWeights(TrueWeight, FalseWeight);
801 }
802 
803 /// If TI is known to be a terminator instruction and its block is known to
804 /// only have a single predecessor block, check to see if that predecessor is
805 /// also a value comparison with the same value, and if that comparison
806 /// determines the outcome of this comparison. If so, simplify TI. This does a
807 /// very limited form of jump threading.
808 bool SimplifyCFGOpt::SimplifyEqualityComparisonWithOnlyPredecessor(
809  Instruction *TI, BasicBlock *Pred, IRBuilder<> &Builder) {
810  Value *PredVal = isValueEqualityComparison(Pred->getTerminator());
811  if (!PredVal)
812  return false; // Not a value comparison in predecessor.
813 
814  Value *ThisVal = isValueEqualityComparison(TI);
815  assert(ThisVal && "This isn't a value comparison!!");
816  if (ThisVal != PredVal)
817  return false; // Different predicates.
818 
819  // TODO: Preserve branch weight metadata, similarly to how
820  // FoldValueComparisonIntoPredecessors preserves it.
821 
822  // Find out information about when control will move from Pred to TI's block.
823  std::vector<ValueEqualityComparisonCase> PredCases;
824  BasicBlock *PredDef =
825  GetValueEqualityComparisonCases(Pred->getTerminator(), PredCases);
826  EliminateBlockCases(PredDef, PredCases); // Remove default from cases.
827 
828  // Find information about how control leaves this block.
829  std::vector<ValueEqualityComparisonCase> ThisCases;
830  BasicBlock *ThisDef = GetValueEqualityComparisonCases(TI, ThisCases);
831  EliminateBlockCases(ThisDef, ThisCases); // Remove default from cases.
832 
833  // If TI's block is the default block from Pred's comparison, potentially
834  // simplify TI based on this knowledge.
835  if (PredDef == TI->getParent()) {
836  // If we are here, we know that the value is none of those cases listed in
837  // PredCases. If there are any cases in ThisCases that are in PredCases, we
838  // can simplify TI.
839  if (!ValuesOverlap(PredCases, ThisCases))
840  return false;
841 
842  if (isa<BranchInst>(TI)) {
843  // Okay, one of the successors of this condbr is dead. Convert it to a
844  // uncond br.
845  assert(ThisCases.size() == 1 && "Branch can only have one case!");
846  // Insert the new branch.
847  Instruction *NI = Builder.CreateBr(ThisDef);
848  (void)NI;
849 
850  // Remove PHI node entries for the dead edge.
851  ThisCases[0].Dest->removePredecessor(TI->getParent());
852 
853  LLVM_DEBUG(dbgs() << "Threading pred instr: " << *Pred->getTerminator()
854  << "Through successor TI: " << *TI << "Leaving: " << *NI
855  << "\n");
856 
858  return true;
859  }
860 
861  SwitchInst *SI = cast<SwitchInst>(TI);
862  // Okay, TI has cases that are statically dead, prune them away.
863  SmallPtrSet<Constant *, 16> DeadCases;
864  for (unsigned i = 0, e = PredCases.size(); i != e; ++i)
865  DeadCases.insert(PredCases[i].Value);
866 
867  LLVM_DEBUG(dbgs() << "Threading pred instr: " << *Pred->getTerminator()
868  << "Through successor TI: " << *TI);
869 
870  // Collect branch weights into a vector.
871  SmallVector<uint32_t, 8> Weights;
873  bool HasWeight = MD && (MD->getNumOperands() == 2 + SI->getNumCases());
874  if (HasWeight)
875  for (unsigned MD_i = 1, MD_e = MD->getNumOperands(); MD_i < MD_e;
876  ++MD_i) {
877  ConstantInt *CI = mdconst::extract<ConstantInt>(MD->getOperand(MD_i));
878  Weights.push_back(CI->getValue().getZExtValue());
879  }
880  for (SwitchInst::CaseIt i = SI->case_end(), e = SI->case_begin(); i != e;) {
881  --i;
882  if (DeadCases.count(i->getCaseValue())) {
883  if (HasWeight) {
884  std::swap(Weights[i->getCaseIndex() + 1], Weights.back());
885  Weights.pop_back();
886  }
887  i->getCaseSuccessor()->removePredecessor(TI->getParent());
888  SI->removeCase(i);
889  }
890  }
891  if (HasWeight && Weights.size() >= 2)
892  setBranchWeights(SI, Weights);
893 
894  LLVM_DEBUG(dbgs() << "Leaving: " << *TI << "\n");
895  return true;
896  }
897 
898  // Otherwise, TI's block must correspond to some matched value. Find out
899  // which value (or set of values) this is.
900  ConstantInt *TIV = nullptr;
901  BasicBlock *TIBB = TI->getParent();
902  for (unsigned i = 0, e = PredCases.size(); i != e; ++i)
903  if (PredCases[i].Dest == TIBB) {
904  if (TIV)
905  return false; // Cannot handle multiple values coming to this block.
906  TIV = PredCases[i].Value;
907  }
908  assert(TIV && "No edge from pred to succ?");
909 
910  // Okay, we found the one constant that our value can be if we get into TI's
911  // BB. Find out which successor will unconditionally be branched to.
912  BasicBlock *TheRealDest = nullptr;
913  for (unsigned i = 0, e = ThisCases.size(); i != e; ++i)
914  if (ThisCases[i].Value == TIV) {
915  TheRealDest = ThisCases[i].Dest;
916  break;
917  }
918 
919  // If not handled by any explicit cases, it is handled by the default case.
920  if (!TheRealDest)
921  TheRealDest = ThisDef;
922 
923  // Remove PHI node entries for dead edges.
924  BasicBlock *CheckEdge = TheRealDest;
925  for (BasicBlock *Succ : successors(TIBB))
926  if (Succ != CheckEdge)
927  Succ->removePredecessor(TIBB);
928  else
929  CheckEdge = nullptr;
930 
931  // Insert the new branch.
932  Instruction *NI = Builder.CreateBr(TheRealDest);
933  (void)NI;
934 
935  LLVM_DEBUG(dbgs() << "Threading pred instr: " << *Pred->getTerminator()
936  << "Through successor TI: " << *TI << "Leaving: " << *NI
937  << "\n");
938 
940  return true;
941 }
942 
943 namespace {
944 
945 /// This class implements a stable ordering of constant
946 /// integers that does not depend on their address. This is important for
947 /// applications that sort ConstantInt's to ensure uniqueness.
948 struct ConstantIntOrdering {
949  bool operator()(const ConstantInt *LHS, const ConstantInt *RHS) const {
950  return LHS->getValue().ult(RHS->getValue());
951  }
952 };
953 
954 } // end anonymous namespace
955 
956 static int ConstantIntSortPredicate(ConstantInt *const *P1,
957  ConstantInt *const *P2) {
958  const ConstantInt *LHS = *P1;
959  const ConstantInt *RHS = *P2;
960  if (LHS == RHS)
961  return 0;
962  return LHS->getValue().ult(RHS->getValue()) ? 1 : -1;
963 }
964 
965 static inline bool HasBranchWeights(const Instruction *I) {
967  if (ProfMD && ProfMD->getOperand(0))
968  if (MDString *MDS = dyn_cast<MDString>(ProfMD->getOperand(0)))
969  return MDS->getString().equals("branch_weights");
970 
971  return false;
972 }
973 
974 /// Get Weights of a given terminator, the default weight is at the front
975 /// of the vector. If TI is a conditional eq, we need to swap the branch-weight
976 /// metadata.
978  SmallVectorImpl<uint64_t> &Weights) {
980  assert(MD);
981  for (unsigned i = 1, e = MD->getNumOperands(); i < e; ++i) {
982  ConstantInt *CI = mdconst::extract<ConstantInt>(MD->getOperand(i));
983  Weights.push_back(CI->getValue().getZExtValue());
984  }
985 
986  // If TI is a conditional eq, the default case is the false case,
987  // and the corresponding branch-weight data is at index 2. We swap the
988  // default weight to be the first entry.
989  if (BranchInst *BI = dyn_cast<BranchInst>(TI)) {
990  assert(Weights.size() == 2);
991  ICmpInst *ICI = cast<ICmpInst>(BI->getCondition());
992  if (ICI->getPredicate() == ICmpInst::ICMP_EQ)
993  std::swap(Weights.front(), Weights.back());
994  }
995 }
996 
997 /// Keep halving the weights until all can fit in uint32_t.
998 static void FitWeights(MutableArrayRef<uint64_t> Weights) {
999  uint64_t Max = *std::max_element(Weights.begin(), Weights.end());
1000  if (Max > UINT_MAX) {
1001  unsigned Offset = 32 - countLeadingZeros(Max);
1002  for (uint64_t &I : Weights)
1003  I >>= Offset;
1004  }
1005 }
1006 
1007 /// The specified terminator is a value equality comparison instruction
1008 /// (either a switch or a branch on "X == c").
1009 /// See if any of the predecessors of the terminator block are value comparisons
1010 /// on the same value. If so, and if safe to do so, fold them together.
1011 bool SimplifyCFGOpt::FoldValueComparisonIntoPredecessors(Instruction *TI,
1012  IRBuilder<> &Builder) {
1013  BasicBlock *BB = TI->getParent();
1014  Value *CV = isValueEqualityComparison(TI); // CondVal
1015  assert(CV && "Not a comparison?");
1016  bool Changed = false;
1017 
1019  while (!Preds.empty()) {
1020  BasicBlock *Pred = Preds.pop_back_val();
1021 
1022  // See if the predecessor is a comparison with the same value.
1023  Instruction *PTI = Pred->getTerminator();
1024  Value *PCV = isValueEqualityComparison(PTI); // PredCondVal
1025 
1026  if (PCV == CV && TI != PTI) {
1027  SmallSetVector<BasicBlock*, 4> FailBlocks;
1028  if (!SafeToMergeTerminators(TI, PTI, &FailBlocks)) {
1029  for (auto *Succ : FailBlocks) {
1030  if (!SplitBlockPredecessors(Succ, TI->getParent(), ".fold.split"))
1031  return false;
1032  }
1033  }
1034 
1035  // Figure out which 'cases' to copy from SI to PSI.
1036  std::vector<ValueEqualityComparisonCase> BBCases;
1037  BasicBlock *BBDefault = GetValueEqualityComparisonCases(TI, BBCases);
1038 
1039  std::vector<ValueEqualityComparisonCase> PredCases;
1040  BasicBlock *PredDefault = GetValueEqualityComparisonCases(PTI, PredCases);
1041 
1042  // Based on whether the default edge from PTI goes to BB or not, fill in
1043  // PredCases and PredDefault with the new switch cases we would like to
1044  // build.
1045  SmallVector<BasicBlock *, 8> NewSuccessors;
1046 
1047  // Update the branch weight metadata along the way
1048  SmallVector<uint64_t, 8> Weights;
1049  bool PredHasWeights = HasBranchWeights(PTI);
1050  bool SuccHasWeights = HasBranchWeights(TI);
1051 
1052  if (PredHasWeights) {
1053  GetBranchWeights(PTI, Weights);
1054  // branch-weight metadata is inconsistent here.
1055  if (Weights.size() != 1 + PredCases.size())
1056  PredHasWeights = SuccHasWeights = false;
1057  } else if (SuccHasWeights)
1058  // If there are no predecessor weights but there are successor weights,
1059  // populate Weights with 1, which will later be scaled to the sum of
1060  // successor's weights
1061  Weights.assign(1 + PredCases.size(), 1);
1062 
1063  SmallVector<uint64_t, 8> SuccWeights;
1064  if (SuccHasWeights) {
1065  GetBranchWeights(TI, SuccWeights);
1066  // branch-weight metadata is inconsistent here.
1067  if (SuccWeights.size() != 1 + BBCases.size())
1068  PredHasWeights = SuccHasWeights = false;
1069  } else if (PredHasWeights)
1070  SuccWeights.assign(1 + BBCases.size(), 1);
1071 
1072  if (PredDefault == BB) {
1073  // If this is the default destination from PTI, only the edges in TI
1074  // that don't occur in PTI, or that branch to BB will be activated.
1075  std::set<ConstantInt *, ConstantIntOrdering> PTIHandled;
1076  for (unsigned i = 0, e = PredCases.size(); i != e; ++i)
1077  if (PredCases[i].Dest != BB)
1078  PTIHandled.insert(PredCases[i].Value);
1079  else {
1080  // The default destination is BB, we don't need explicit targets.
1081  std::swap(PredCases[i], PredCases.back());
1082 
1083  if (PredHasWeights || SuccHasWeights) {
1084  // Increase weight for the default case.
1085  Weights[0] += Weights[i + 1];
1086  std::swap(Weights[i + 1], Weights.back());
1087  Weights.pop_back();
1088  }
1089 
1090  PredCases.pop_back();
1091  --i;
1092  --e;
1093  }
1094 
1095  // Reconstruct the new switch statement we will be building.
1096  if (PredDefault != BBDefault) {
1097  PredDefault->removePredecessor(Pred);
1098  PredDefault = BBDefault;
1099  NewSuccessors.push_back(BBDefault);
1100  }
1101 
1102  unsigned CasesFromPred = Weights.size();
1103  uint64_t ValidTotalSuccWeight = 0;
1104  for (unsigned i = 0, e = BBCases.size(); i != e; ++i)
1105  if (!PTIHandled.count(BBCases[i].Value) &&
1106  BBCases[i].Dest != BBDefault) {
1107  PredCases.push_back(BBCases[i]);
1108  NewSuccessors.push_back(BBCases[i].Dest);
1109  if (SuccHasWeights || PredHasWeights) {
1110  // The default weight is at index 0, so weight for the ith case
1111  // should be at index i+1. Scale the cases from successor by
1112  // PredDefaultWeight (Weights[0]).
1113  Weights.push_back(Weights[0] * SuccWeights[i + 1]);
1114  ValidTotalSuccWeight += SuccWeights[i + 1];
1115  }
1116  }
1117 
1118  if (SuccHasWeights || PredHasWeights) {
1119  ValidTotalSuccWeight += SuccWeights[0];
1120  // Scale the cases from predecessor by ValidTotalSuccWeight.
1121  for (unsigned i = 1; i < CasesFromPred; ++i)
1122  Weights[i] *= ValidTotalSuccWeight;
1123  // Scale the default weight by SuccDefaultWeight (SuccWeights[0]).
1124  Weights[0] *= SuccWeights[0];
1125  }
1126  } else {
1127  // If this is not the default destination from PSI, only the edges
1128  // in SI that occur in PSI with a destination of BB will be
1129  // activated.
1130  std::set<ConstantInt *, ConstantIntOrdering> PTIHandled;
1131  std::map<ConstantInt *, uint64_t> WeightsForHandled;
1132  for (unsigned i = 0, e = PredCases.size(); i != e; ++i)
1133  if (PredCases[i].Dest == BB) {
1134  PTIHandled.insert(PredCases[i].Value);
1135 
1136  if (PredHasWeights || SuccHasWeights) {
1137  WeightsForHandled[PredCases[i].Value] = Weights[i + 1];
1138  std::swap(Weights[i + 1], Weights.back());
1139  Weights.pop_back();
1140  }
1141 
1142  std::swap(PredCases[i], PredCases.back());
1143  PredCases.pop_back();
1144  --i;
1145  --e;
1146  }
1147 
1148  // Okay, now we know which constants were sent to BB from the
1149  // predecessor. Figure out where they will all go now.
1150  for (unsigned i = 0, e = BBCases.size(); i != e; ++i)
1151  if (PTIHandled.count(BBCases[i].Value)) {
1152  // If this is one we are capable of getting...
1153  if (PredHasWeights || SuccHasWeights)
1154  Weights.push_back(WeightsForHandled[BBCases[i].Value]);
1155  PredCases.push_back(BBCases[i]);
1156  NewSuccessors.push_back(BBCases[i].Dest);
1157  PTIHandled.erase(
1158  BBCases[i].Value); // This constant is taken care of
1159  }
1160 
1161  // If there are any constants vectored to BB that TI doesn't handle,
1162  // they must go to the default destination of TI.
1163  for (ConstantInt *I : PTIHandled) {
1164  if (PredHasWeights || SuccHasWeights)
1165  Weights.push_back(WeightsForHandled[I]);
1166  PredCases.push_back(ValueEqualityComparisonCase(I, BBDefault));
1167  NewSuccessors.push_back(BBDefault);
1168  }
1169  }
1170 
1171  // Okay, at this point, we know which new successor Pred will get. Make
1172  // sure we update the number of entries in the PHI nodes for these
1173  // successors.
1174  for (BasicBlock *NewSuccessor : NewSuccessors)
1175  AddPredecessorToBlock(NewSuccessor, Pred, BB);
1176 
1177  Builder.SetInsertPoint(PTI);
1178  // Convert pointer to int before we switch.
1179  if (CV->getType()->isPointerTy()) {
1180  CV = Builder.CreatePtrToInt(CV, DL.getIntPtrType(CV->getType()),
1181  "magicptr");
1182  }
1183 
1184  // Now that the successors are updated, create the new Switch instruction.
1185  SwitchInst *NewSI =
1186  Builder.CreateSwitch(CV, PredDefault, PredCases.size());
1187  NewSI->setDebugLoc(PTI->getDebugLoc());
1188  for (ValueEqualityComparisonCase &V : PredCases)
1189  NewSI->addCase(V.Value, V.Dest);
1190 
1191  if (PredHasWeights || SuccHasWeights) {
1192  // Halve the weights if any of them cannot fit in an uint32_t
1193  FitWeights(Weights);
1194 
1195  SmallVector<uint32_t, 8> MDWeights(Weights.begin(), Weights.end());
1196 
1197  setBranchWeights(NewSI, MDWeights);
1198  }
1199 
1201 
1202  // Okay, last check. If BB is still a successor of PSI, then we must
1203  // have an infinite loop case. If so, add an infinitely looping block
1204  // to handle the case to preserve the behavior of the code.
1205  BasicBlock *InfLoopBlock = nullptr;
1206  for (unsigned i = 0, e = NewSI->getNumSuccessors(); i != e; ++i)
1207  if (NewSI->getSuccessor(i) == BB) {
1208  if (!InfLoopBlock) {
1209  // Insert it at the end of the function, because it's either code,
1210  // or it won't matter if it's hot. :)
1211  InfLoopBlock = BasicBlock::Create(BB->getContext(), "infloop",
1212  BB->getParent());
1213  BranchInst::Create(InfLoopBlock, InfLoopBlock);
1214  }
1215  NewSI->setSuccessor(i, InfLoopBlock);
1216  }
1217 
1218  Changed = true;
1219  }
1220  }
1221  return Changed;
1222 }
1223 
1224 // If we would need to insert a select that uses the value of this invoke
1225 // (comments in HoistThenElseCodeToIf explain why we would need to do this), we
1226 // can't hoist the invoke, as there is nowhere to put the select in this case.
1228  Instruction *I1, Instruction *I2) {
1229  for (BasicBlock *Succ : successors(BB1)) {
1230  for (const PHINode &PN : Succ->phis()) {
1231  Value *BB1V = PN.getIncomingValueForBlock(BB1);
1232  Value *BB2V = PN.getIncomingValueForBlock(BB2);
1233  if (BB1V != BB2V && (BB1V == I1 || BB2V == I2)) {
1234  return false;
1235  }
1236  }
1237  }
1238  return true;
1239 }
1240 
1242 
1243 /// Given a conditional branch that goes to BB1 and BB2, hoist any common code
1244 /// in the two blocks up into the branch block. The caller of this function
1245 /// guarantees that BI's block dominates BB1 and BB2.
1247  const TargetTransformInfo &TTI) {
1248  // This does very trivial matching, with limited scanning, to find identical
1249  // instructions in the two blocks. In particular, we don't want to get into
1250  // O(M*N) situations here where M and N are the sizes of BB1 and BB2. As
1251  // such, we currently just scan for obviously identical instructions in an
1252  // identical order.
1253  BasicBlock *BB1 = BI->getSuccessor(0); // The true destination.
1254  BasicBlock *BB2 = BI->getSuccessor(1); // The false destination
1255 
1256  BasicBlock::iterator BB1_Itr = BB1->begin();
1257  BasicBlock::iterator BB2_Itr = BB2->begin();
1258 
1259  Instruction *I1 = &*BB1_Itr++, *I2 = &*BB2_Itr++;
1260  // Skip debug info if it is not identical.
1263  if (!DBI1 || !DBI2 || !DBI1->isIdenticalToWhenDefined(DBI2)) {
1264  while (isa<DbgInfoIntrinsic>(I1))
1265  I1 = &*BB1_Itr++;
1266  while (isa<DbgInfoIntrinsic>(I2))
1267  I2 = &*BB2_Itr++;
1268  }
1269  if (isa<PHINode>(I1) || !I1->isIdenticalToWhenDefined(I2) ||
1270  (isa<InvokeInst>(I1) && !isSafeToHoistInvoke(BB1, BB2, I1, I2)))
1271  return false;
1272 
1273  BasicBlock *BIParent = BI->getParent();
1274 
1275  bool Changed = false;
1276  do {
1277  // If we are hoisting the terminator instruction, don't move one (making a
1278  // broken BB), instead clone it, and remove BI.
1279  if (I1->isTerminator())
1280  goto HoistTerminator;
1281 
1282  // If we're going to hoist a call, make sure that the two instructions we're
1283  // commoning/hoisting are both marked with musttail, or neither of them is
1284  // marked as such. Otherwise, we might end up in a situation where we hoist
1285  // from a block where the terminator is a `ret` to a block where the terminator
1286  // is a `br`, and `musttail` calls expect to be followed by a return.
1287  auto *C1 = dyn_cast<CallInst>(I1);
1288  auto *C2 = dyn_cast<CallInst>(I2);
1289  if (C1 && C2)
1290  if (C1->isMustTailCall() != C2->isMustTailCall())
1291  return Changed;
1292 
1293  if (!TTI.isProfitableToHoist(I1) || !TTI.isProfitableToHoist(I2))
1294  return Changed;
1295 
1296  if (isa<DbgInfoIntrinsic>(I1) || isa<DbgInfoIntrinsic>(I2)) {
1297  assert (isa<DbgInfoIntrinsic>(I1) && isa<DbgInfoIntrinsic>(I2));
1298  // The debug location is an integral part of a debug info intrinsic
1299  // and can't be separated from it or replaced. Instead of attempting
1300  // to merge locations, simply hoist both copies of the intrinsic.
1301  BIParent->getInstList().splice(BI->getIterator(),
1302  BB1->getInstList(), I1);
1303  BIParent->getInstList().splice(BI->getIterator(),
1304  BB2->getInstList(), I2);
1305  Changed = true;
1306  } else {
1307  // For a normal instruction, we just move one to right before the branch,
1308  // then replace all uses of the other with the first. Finally, we remove
1309  // the now redundant second instruction.
1310  BIParent->getInstList().splice(BI->getIterator(),
1311  BB1->getInstList(), I1);
1312  if (!I2->use_empty())
1313  I2->replaceAllUsesWith(I1);
1314  I1->andIRFlags(I2);
1315  unsigned KnownIDs[] = {LLVMContext::MD_tbaa,
1326  combineMetadata(I1, I2, KnownIDs, true);
1327 
1328  // I1 and I2 are being combined into a single instruction. Its debug
1329  // location is the merged locations of the original instructions.
1330  I1->applyMergedLocation(I1->getDebugLoc(), I2->getDebugLoc());
1331 
1332  I2->eraseFromParent();
1333  Changed = true;
1334  }
1335 
1336  I1 = &*BB1_Itr++;
1337  I2 = &*BB2_Itr++;
1338  // Skip debug info if it is not identical.
1341  if (!DBI1 || !DBI2 || !DBI1->isIdenticalToWhenDefined(DBI2)) {
1342  while (isa<DbgInfoIntrinsic>(I1))
1343  I1 = &*BB1_Itr++;
1344  while (isa<DbgInfoIntrinsic>(I2))
1345  I2 = &*BB2_Itr++;
1346  }
1347  } while (I1->isIdenticalToWhenDefined(I2));
1348 
1349  return true;
1350 
1351 HoistTerminator:
1352  // It may not be possible to hoist an invoke.
1353  if (isa<InvokeInst>(I1) && !isSafeToHoistInvoke(BB1, BB2, I1, I2))
1354  return Changed;
1355 
1356  for (BasicBlock *Succ : successors(BB1)) {
1357  for (PHINode &PN : Succ->phis()) {
1358  Value *BB1V = PN.getIncomingValueForBlock(BB1);
1359  Value *BB2V = PN.getIncomingValueForBlock(BB2);
1360  if (BB1V == BB2V)
1361  continue;
1362 
1363  // Check for passingValueIsAlwaysUndefined here because we would rather
1364  // eliminate undefined control flow then converting it to a select.
1365  if (passingValueIsAlwaysUndefined(BB1V, &PN) ||
1366  passingValueIsAlwaysUndefined(BB2V, &PN))
1367  return Changed;
1368 
1369  if (isa<ConstantExpr>(BB1V) && !isSafeToSpeculativelyExecute(BB1V))
1370  return Changed;
1371  if (isa<ConstantExpr>(BB2V) && !isSafeToSpeculativelyExecute(BB2V))
1372  return Changed;
1373  }
1374  }
1375 
1376  // Okay, it is safe to hoist the terminator.
1377  Instruction *NT = I1->clone();
1378  BIParent->getInstList().insert(BI->getIterator(), NT);
1379  if (!NT->getType()->isVoidTy()) {
1380  I1->replaceAllUsesWith(NT);
1381  I2->replaceAllUsesWith(NT);
1382  NT->takeName(I1);
1383  }
1384 
1385  // Ensure terminator gets a debug location, even an unknown one, in case
1386  // it involves inlinable calls.
1387  NT->applyMergedLocation(I1->getDebugLoc(), I2->getDebugLoc());
1388 
1389  // PHIs created below will adopt NT's merged DebugLoc.
1390  IRBuilder<NoFolder> Builder(NT);
1391 
1392  // Hoisting one of the terminators from our successor is a great thing.
1393  // Unfortunately, the successors of the if/else blocks may have PHI nodes in
1394  // them. If they do, all PHI entries for BB1/BB2 must agree for all PHI
1395  // nodes, so we insert select instruction to compute the final result.
1396  std::map<std::pair<Value *, Value *>, SelectInst *> InsertedSelects;
1397  for (BasicBlock *Succ : successors(BB1)) {
1398  for (PHINode &PN : Succ->phis()) {
1399  Value *BB1V = PN.getIncomingValueForBlock(BB1);
1400  Value *BB2V = PN.getIncomingValueForBlock(BB2);
1401  if (BB1V == BB2V)
1402  continue;
1403 
1404  // These values do not agree. Insert a select instruction before NT
1405  // that determines the right value.
1406  SelectInst *&SI = InsertedSelects[std::make_pair(BB1V, BB2V)];
1407  if (!SI)
1408  SI = cast<SelectInst>(
1409  Builder.CreateSelect(BI->getCondition(), BB1V, BB2V,
1410  BB1V->getName() + "." + BB2V->getName(), BI));
1411 
1412  // Make the PHI node use the select for all incoming values for BB1/BB2
1413  for (unsigned i = 0, e = PN.getNumIncomingValues(); i != e; ++i)
1414  if (PN.getIncomingBlock(i) == BB1 || PN.getIncomingBlock(i) == BB2)
1415  PN.setIncomingValue(i, SI);
1416  }
1417  }
1418 
1419  // Update any PHI nodes in our new successors.
1420  for (BasicBlock *Succ : successors(BB1))
1421  AddPredecessorToBlock(Succ, BIParent, BB1);
1422 
1424  return true;
1425 }
1426 
1427 // All instructions in Insts belong to different blocks that all unconditionally
1428 // branch to a common successor. Analyze each instruction and return true if it
1429 // would be possible to sink them into their successor, creating one common
1430 // instruction instead. For every value that would be required to be provided by
1431 // PHI node (because an operand varies in each input block), add to PHIOperands.
1434  DenseMap<Instruction *, SmallVector<Value *, 4>> &PHIOperands) {
1435  // Prune out obviously bad instructions to move. Any non-store instruction
1436  // must have exactly one use, and we check later that use is by a single,
1437  // common PHI instruction in the successor.
1438  for (auto *I : Insts) {
1439  // These instructions may change or break semantics if moved.
1440  if (isa<PHINode>(I) || I->isEHPad() || isa<AllocaInst>(I) ||
1441  I->getType()->isTokenTy())
1442  return false;
1443 
1444  // Conservatively return false if I is an inline-asm instruction. Sinking
1445  // and merging inline-asm instructions can potentially create arguments
1446  // that cannot satisfy the inline-asm constraints.
1447  if (const auto *C = dyn_cast<CallInst>(I))
1448  if (C->isInlineAsm())
1449  return false;
1450 
1451  // Everything must have only one use too, apart from stores which
1452  // have no uses.
1453  if (!isa<StoreInst>(I) && !I->hasOneUse())
1454  return false;
1455  }
1456 
1457  const Instruction *I0 = Insts.front();
1458  for (auto *I : Insts)
1459  if (!I->isSameOperationAs(I0))
1460  return false;
1461 
1462  // All instructions in Insts are known to be the same opcode. If they aren't
1463  // stores, check the only user of each is a PHI or in the same block as the
1464  // instruction, because if a user is in the same block as an instruction
1465  // we're contemplating sinking, it must already be determined to be sinkable.
1466  if (!isa<StoreInst>(I0)) {
1467  auto *PNUse = dyn_cast<PHINode>(*I0->user_begin());
1468  auto *Succ = I0->getParent()->getTerminator()->getSuccessor(0);
1469  if (!all_of(Insts, [&PNUse,&Succ](const Instruction *I) -> bool {
1470  auto *U = cast<Instruction>(*I->user_begin());
1471  return (PNUse &&
1472  PNUse->getParent() == Succ &&
1473  PNUse->getIncomingValueForBlock(I->getParent()) == I) ||
1474  U->getParent() == I->getParent();
1475  }))
1476  return false;
1477  }
1478 
1479  // Because SROA can't handle speculating stores of selects, try not
1480  // to sink loads or stores of allocas when we'd have to create a PHI for
1481  // the address operand. Also, because it is likely that loads or stores
1482  // of allocas will disappear when Mem2Reg/SROA is run, don't sink them.
1483  // This can cause code churn which can have unintended consequences down
1484  // the line - see https://llvm.org/bugs/show_bug.cgi?id=30244.
1485  // FIXME: This is a workaround for a deficiency in SROA - see
1486  // https://llvm.org/bugs/show_bug.cgi?id=30188
1487  if (isa<StoreInst>(I0) && any_of(Insts, [](const Instruction *I) {
1488  return isa<AllocaInst>(I->getOperand(1));
1489  }))
1490  return false;
1491  if (isa<LoadInst>(I0) && any_of(Insts, [](const Instruction *I) {
1492  return isa<AllocaInst>(I->getOperand(0));
1493  }))
1494  return false;
1495 
1496  for (unsigned OI = 0, OE = I0->getNumOperands(); OI != OE; ++OI) {
1497  if (I0->getOperand(OI)->getType()->isTokenTy())
1498  // Don't touch any operand of token type.
1499  return false;
1500 
1501  auto SameAsI0 = [&I0, OI](const Instruction *I) {
1502  assert(I->getNumOperands() == I0->getNumOperands());
1503  return I->getOperand(OI) == I0->getOperand(OI);
1504  };
1505  if (!all_of(Insts, SameAsI0)) {
1506  if (!canReplaceOperandWithVariable(I0, OI))
1507  // We can't create a PHI from this GEP.
1508  return false;
1509  // Don't create indirect calls! The called value is the final operand.
1510  if ((isa<CallInst>(I0) || isa<InvokeInst>(I0)) && OI == OE - 1) {
1511  // FIXME: if the call was *already* indirect, we should do this.
1512  return false;
1513  }
1514  for (auto *I : Insts)
1515  PHIOperands[I].push_back(I->getOperand(OI));
1516  }
1517  }
1518  return true;
1519 }
1520 
1521 // Assuming canSinkLastInstruction(Blocks) has returned true, sink the last
1522 // instruction of every block in Blocks to their common successor, commoning
1523 // into one instruction.
1525  auto *BBEnd = Blocks[0]->getTerminator()->getSuccessor(0);
1526 
1527  // canSinkLastInstruction returning true guarantees that every block has at
1528  // least one non-terminator instruction.
1530  for (auto *BB : Blocks) {
1531  Instruction *I = BB->getTerminator();
1532  do {
1533  I = I->getPrevNode();
1534  } while (isa<DbgInfoIntrinsic>(I) && I != &BB->front());
1535  if (!isa<DbgInfoIntrinsic>(I))
1536  Insts.push_back(I);
1537  }
1538 
1539  // The only checking we need to do now is that all users of all instructions
1540  // are the same PHI node. canSinkLastInstruction should have checked this but
1541  // it is slightly over-aggressive - it gets confused by commutative instructions
1542  // so double-check it here.
1543  Instruction *I0 = Insts.front();
1544  if (!isa<StoreInst>(I0)) {
1545  auto *PNUse = dyn_cast<PHINode>(*I0->user_begin());
1546  if (!all_of(Insts, [&PNUse](const Instruction *I) -> bool {
1547  auto *U = cast<Instruction>(*I->user_begin());
1548  return U == PNUse;
1549  }))
1550  return false;
1551  }
1552 
1553  // We don't need to do any more checking here; canSinkLastInstruction should
1554  // have done it all for us.
1555  SmallVector<Value*, 4> NewOperands;
1556  for (unsigned O = 0, E = I0->getNumOperands(); O != E; ++O) {
1557  // This check is different to that in canSinkLastInstruction. There, we
1558  // cared about the global view once simplifycfg (and instcombine) have
1559  // completed - it takes into account PHIs that become trivially
1560  // simplifiable. However here we need a more local view; if an operand
1561  // differs we create a PHI and rely on instcombine to clean up the very
1562  // small mess we may make.
1563  bool NeedPHI = any_of(Insts, [&I0, O](const Instruction *I) {
1564  return I->getOperand(O) != I0->getOperand(O);
1565  });
1566  if (!NeedPHI) {
1567  NewOperands.push_back(I0->getOperand(O));
1568  continue;
1569  }
1570 
1571  // Create a new PHI in the successor block and populate it.
1572  auto *Op = I0->getOperand(O);
1573  assert(!Op->getType()->isTokenTy() && "Can't PHI tokens!");
1574  auto *PN = PHINode::Create(Op->getType(), Insts.size(),
1575  Op->getName() + ".sink", &BBEnd->front());
1576  for (auto *I : Insts)
1577  PN->addIncoming(I->getOperand(O), I->getParent());
1578  NewOperands.push_back(PN);
1579  }
1580 
1581  // Arbitrarily use I0 as the new "common" instruction; remap its operands
1582  // and move it to the start of the successor block.
1583  for (unsigned O = 0, E = I0->getNumOperands(); O != E; ++O)
1584  I0->getOperandUse(O).set(NewOperands[O]);
1585  I0->moveBefore(&*BBEnd->getFirstInsertionPt());
1586 
1587  // Update metadata and IR flags, and merge debug locations.
1588  for (auto *I : Insts)
1589  if (I != I0) {
1590  // The debug location for the "common" instruction is the merged locations
1591  // of all the commoned instructions. We start with the original location
1592  // of the "common" instruction and iteratively merge each location in the
1593  // loop below.
1594  // This is an N-way merge, which will be inefficient if I0 is a CallInst.
1595  // However, as N-way merge for CallInst is rare, so we use simplified API
1596  // instead of using complex API for N-way merge.
1597  I0->applyMergedLocation(I0->getDebugLoc(), I->getDebugLoc());
1598  combineMetadataForCSE(I0, I, true);
1599  I0->andIRFlags(I);
1600  }
1601 
1602  if (!isa<StoreInst>(I0)) {
1603  // canSinkLastInstruction checked that all instructions were used by
1604  // one and only one PHI node. Find that now, RAUW it to our common
1605  // instruction and nuke it.
1606  assert(I0->hasOneUse());
1607  auto *PN = cast<PHINode>(*I0->user_begin());
1608  PN->replaceAllUsesWith(I0);
1609  PN->eraseFromParent();
1610  }
1611 
1612  // Finally nuke all instructions apart from the common instruction.
1613  for (auto *I : Insts)
1614  if (I != I0)
1615  I->eraseFromParent();
1616 
1617  return true;
1618 }
1619 
1620 namespace {
1621 
1622  // LockstepReverseIterator - Iterates through instructions
1623  // in a set of blocks in reverse order from the first non-terminator.
1624  // For example (assume all blocks have size n):
1625  // LockstepReverseIterator I([B1, B2, B3]);
1626  // *I-- = [B1[n], B2[n], B3[n]];
1627  // *I-- = [B1[n-1], B2[n-1], B3[n-1]];
1628  // *I-- = [B1[n-2], B2[n-2], B3[n-2]];
1629  // ...
1630  class LockstepReverseIterator {
1631  ArrayRef<BasicBlock*> Blocks;
1633  bool Fail;
1634 
1635  public:
1636  LockstepReverseIterator(ArrayRef<BasicBlock*> Blocks) : Blocks(Blocks) {
1637  reset();
1638  }
1639 
1640  void reset() {
1641  Fail = false;
1642  Insts.clear();
1643  for (auto *BB : Blocks) {
1644  Instruction *Inst = BB->getTerminator();
1645  for (Inst = Inst->getPrevNode(); Inst && isa<DbgInfoIntrinsic>(Inst);)
1646  Inst = Inst->getPrevNode();
1647  if (!Inst) {
1648  // Block wasn't big enough.
1649  Fail = true;
1650  return;
1651  }
1652  Insts.push_back(Inst);
1653  }
1654  }
1655 
1656  bool isValid() const {
1657  return !Fail;
1658  }
1659 
1660  void operator--() {
1661  if (Fail)
1662  return;
1663  for (auto *&Inst : Insts) {
1664  for (Inst = Inst->getPrevNode(); Inst && isa<DbgInfoIntrinsic>(Inst);)
1665  Inst = Inst->getPrevNode();
1666  // Already at beginning of block.
1667  if (!Inst) {
1668  Fail = true;
1669  return;
1670  }
1671  }
1672  }
1673 
1675  return Insts;
1676  }
1677  };
1678 
1679 } // end anonymous namespace
1680 
1681 /// Check whether BB's predecessors end with unconditional branches. If it is
1682 /// true, sink any common code from the predecessors to BB.
1683 /// We also allow one predecessor to end with conditional branch (but no more
1684 /// than one).
1686  // We support two situations:
1687  // (1) all incoming arcs are unconditional
1688  // (2) one incoming arc is conditional
1689  //
1690  // (2) is very common in switch defaults and
1691  // else-if patterns;
1692  //
1693  // if (a) f(1);
1694  // else if (b) f(2);
1695  //
1696  // produces:
1697  //
1698  // [if]
1699  // / \
1700  // [f(1)] [if]
1701  // | | \
1702  // | | |
1703  // | [f(2)]|
1704  // \ | /
1705  // [ end ]
1706  //
1707  // [end] has two unconditional predecessor arcs and one conditional. The
1708  // conditional refers to the implicit empty 'else' arc. This conditional
1709  // arc can also be caused by an empty default block in a switch.
1710  //
1711  // In this case, we attempt to sink code from all *unconditional* arcs.
1712  // If we can sink instructions from these arcs (determined during the scan
1713  // phase below) we insert a common successor for all unconditional arcs and
1714  // connect that to [end], to enable sinking:
1715  //
1716  // [if]
1717  // / \
1718  // [x(1)] [if]
1719  // | | \
1720  // | | \
1721  // | [x(2)] |
1722  // \ / |
1723  // [sink.split] |
1724  // \ /
1725  // [ end ]
1726  //
1727  SmallVector<BasicBlock*,4> UnconditionalPreds;
1728  Instruction *Cond = nullptr;
1729  for (auto *B : predecessors(BB)) {
1730  auto *T = B->getTerminator();
1731  if (isa<BranchInst>(T) && cast<BranchInst>(T)->isUnconditional())
1732  UnconditionalPreds.push_back(B);
1733  else if ((isa<BranchInst>(T) || isa<SwitchInst>(T)) && !Cond)
1734  Cond = T;
1735  else
1736  return false;
1737  }
1738  if (UnconditionalPreds.size() < 2)
1739  return false;
1740 
1741  bool Changed = false;
1742  // We take a two-step approach to tail sinking. First we scan from the end of
1743  // each block upwards in lockstep. If the n'th instruction from the end of each
1744  // block can be sunk, those instructions are added to ValuesToSink and we
1745  // carry on. If we can sink an instruction but need to PHI-merge some operands
1746  // (because they're not identical in each instruction) we add these to
1747  // PHIOperands.
1748  unsigned ScanIdx = 0;
1749  SmallPtrSet<Value*,4> InstructionsToSink;
1751  LockstepReverseIterator LRI(UnconditionalPreds);
1752  while (LRI.isValid() &&
1753  canSinkInstructions(*LRI, PHIOperands)) {
1754  LLVM_DEBUG(dbgs() << "SINK: instruction can be sunk: " << *(*LRI)[0]
1755  << "\n");
1756  InstructionsToSink.insert((*LRI).begin(), (*LRI).end());
1757  ++ScanIdx;
1758  --LRI;
1759  }
1760 
1761  auto ProfitableToSinkInstruction = [&](LockstepReverseIterator &LRI) {
1762  unsigned NumPHIdValues = 0;
1763  for (auto *I : *LRI)
1764  for (auto *V : PHIOperands[I])
1765  if (InstructionsToSink.count(V) == 0)
1766  ++NumPHIdValues;
1767  LLVM_DEBUG(dbgs() << "SINK: #phid values: " << NumPHIdValues << "\n");
1768  unsigned NumPHIInsts = NumPHIdValues / UnconditionalPreds.size();
1769  if ((NumPHIdValues % UnconditionalPreds.size()) != 0)
1770  NumPHIInsts++;
1771 
1772  return NumPHIInsts <= 1;
1773  };
1774 
1775  if (ScanIdx > 0 && Cond) {
1776  // Check if we would actually sink anything first! This mutates the CFG and
1777  // adds an extra block. The goal in doing this is to allow instructions that
1778  // couldn't be sunk before to be sunk - obviously, speculatable instructions
1779  // (such as trunc, add) can be sunk and predicated already. So we check that
1780  // we're going to sink at least one non-speculatable instruction.
1781  LRI.reset();
1782  unsigned Idx = 0;
1783  bool Profitable = false;
1784  while (ProfitableToSinkInstruction(LRI) && Idx < ScanIdx) {
1785  if (!isSafeToSpeculativelyExecute((*LRI)[0])) {
1786  Profitable = true;
1787  break;
1788  }
1789  --LRI;
1790  ++Idx;
1791  }
1792  if (!Profitable)
1793  return false;
1794 
1795  LLVM_DEBUG(dbgs() << "SINK: Splitting edge\n");
1796  // We have a conditional edge and we're going to sink some instructions.
1797  // Insert a new block postdominating all blocks we're going to sink from.
1798  if (!SplitBlockPredecessors(BB, UnconditionalPreds, ".sink.split"))
1799  // Edges couldn't be split.
1800  return false;
1801  Changed = true;
1802  }
1803 
1804  // Now that we've analyzed all potential sinking candidates, perform the
1805  // actual sink. We iteratively sink the last non-terminator of the source
1806  // blocks into their common successor unless doing so would require too
1807  // many PHI instructions to be generated (currently only one PHI is allowed
1808  // per sunk instruction).
1809  //
1810  // We can use InstructionsToSink to discount values needing PHI-merging that will
1811  // actually be sunk in a later iteration. This allows us to be more
1812  // aggressive in what we sink. This does allow a false positive where we
1813  // sink presuming a later value will also be sunk, but stop half way through
1814  // and never actually sink it which means we produce more PHIs than intended.
1815  // This is unlikely in practice though.
1816  for (unsigned SinkIdx = 0; SinkIdx != ScanIdx; ++SinkIdx) {
1817  LLVM_DEBUG(dbgs() << "SINK: Sink: "
1818  << *UnconditionalPreds[0]->getTerminator()->getPrevNode()
1819  << "\n");
1820 
1821  // Because we've sunk every instruction in turn, the current instruction to
1822  // sink is always at index 0.
1823  LRI.reset();
1824  if (!ProfitableToSinkInstruction(LRI)) {
1825  // Too many PHIs would be created.
1826  LLVM_DEBUG(
1827  dbgs() << "SINK: stopping here, too many PHIs would be created!\n");
1828  break;
1829  }
1830 
1831  if (!sinkLastInstruction(UnconditionalPreds))
1832  return Changed;
1833  NumSinkCommons++;
1834  Changed = true;
1835  }
1836  return Changed;
1837 }
1838 
1839 /// Determine if we can hoist sink a sole store instruction out of a
1840 /// conditional block.
1841 ///
1842 /// We are looking for code like the following:
1843 /// BrBB:
1844 /// store i32 %add, i32* %arrayidx2
1845 /// ... // No other stores or function calls (we could be calling a memory
1846 /// ... // function).
1847 /// %cmp = icmp ult %x, %y
1848 /// br i1 %cmp, label %EndBB, label %ThenBB
1849 /// ThenBB:
1850 /// store i32 %add5, i32* %arrayidx2
1851 /// br label EndBB
1852 /// EndBB:
1853 /// ...
1854 /// We are going to transform this into:
1855 /// BrBB:
1856 /// store i32 %add, i32* %arrayidx2
1857 /// ... //
1858 /// %cmp = icmp ult %x, %y
1859 /// %add.add5 = select i1 %cmp, i32 %add, %add5
1860 /// store i32 %add.add5, i32* %arrayidx2
1861 /// ...
1862 ///
1863 /// \return The pointer to the value of the previous store if the store can be
1864 /// hoisted into the predecessor block. 0 otherwise.
1866  BasicBlock *StoreBB, BasicBlock *EndBB) {
1867  StoreInst *StoreToHoist = dyn_cast<StoreInst>(I);
1868  if (!StoreToHoist)
1869  return nullptr;
1870 
1871  // Volatile or atomic.
1872  if (!StoreToHoist->isSimple())
1873  return nullptr;
1874 
1875  Value *StorePtr = StoreToHoist->getPointerOperand();
1876 
1877  // Look for a store to the same pointer in BrBB.
1878  unsigned MaxNumInstToLookAt = 9;
1879  for (Instruction &CurI : reverse(BrBB->instructionsWithoutDebug())) {
1880  if (!MaxNumInstToLookAt)
1881  break;
1882  --MaxNumInstToLookAt;
1883 
1884  // Could be calling an instruction that affects memory like free().
1885  if (CurI.mayHaveSideEffects() && !isa<StoreInst>(CurI))
1886  return nullptr;
1887 
1888  if (auto *SI = dyn_cast<StoreInst>(&CurI)) {
1889  // Found the previous store make sure it stores to the same location.
1890  if (SI->getPointerOperand() == StorePtr)
1891  // Found the previous store, return its value operand.
1892  return SI->getValueOperand();
1893  return nullptr; // Unknown store.
1894  }
1895  }
1896 
1897  return nullptr;
1898 }
1899 
1900 /// Speculate a conditional basic block flattening the CFG.
1901 ///
1902 /// Note that this is a very risky transform currently. Speculating
1903 /// instructions like this is most often not desirable. Instead, there is an MI
1904 /// pass which can do it with full awareness of the resource constraints.
1905 /// However, some cases are "obvious" and we should do directly. An example of
1906 /// this is speculating a single, reasonably cheap instruction.
1907 ///
1908 /// There is only one distinct advantage to flattening the CFG at the IR level:
1909 /// it makes very common but simplistic optimizations such as are common in
1910 /// instcombine and the DAG combiner more powerful by removing CFG edges and
1911 /// modeling their effects with easier to reason about SSA value graphs.
1912 ///
1913 ///
1914 /// An illustration of this transform is turning this IR:
1915 /// \code
1916 /// BB:
1917 /// %cmp = icmp ult %x, %y
1918 /// br i1 %cmp, label %EndBB, label %ThenBB
1919 /// ThenBB:
1920 /// %sub = sub %x, %y
1921 /// br label BB2
1922 /// EndBB:
1923 /// %phi = phi [ %sub, %ThenBB ], [ 0, %EndBB ]
1924 /// ...
1925 /// \endcode
1926 ///
1927 /// Into this IR:
1928 /// \code
1929 /// BB:
1930 /// %cmp = icmp ult %x, %y
1931 /// %sub = sub %x, %y
1932 /// %cond = select i1 %cmp, 0, %sub
1933 /// ...
1934 /// \endcode
1935 ///
1936 /// \returns true if the conditional block is removed.
1938  const TargetTransformInfo &TTI) {
1939  // Be conservative for now. FP select instruction can often be expensive.
1940  Value *BrCond = BI->getCondition();
1941  if (isa<FCmpInst>(BrCond))
1942  return false;
1943 
1944  BasicBlock *BB = BI->getParent();
1945  BasicBlock *EndBB = ThenBB->getTerminator()->getSuccessor(0);
1946 
1947  // If ThenBB is actually on the false edge of the conditional branch, remember
1948  // to swap the select operands later.
1949  bool Invert = false;
1950  if (ThenBB != BI->getSuccessor(0)) {
1951  assert(ThenBB == BI->getSuccessor(1) && "No edge from 'if' block?");
1952  Invert = true;
1953  }
1954  assert(EndBB == BI->getSuccessor(!Invert) && "No edge from to end block");
1955 
1956  // Keep a count of how many times instructions are used within ThenBB when
1957  // they are candidates for sinking into ThenBB. Specifically:
1958  // - They are defined in BB, and
1959  // - They have no side effects, and
1960  // - All of their uses are in ThenBB.
1961  SmallDenseMap<Instruction *, unsigned, 4> SinkCandidateUseCounts;
1962 
1963  SmallVector<Instruction *, 4> SpeculatedDbgIntrinsics;
1964 
1965  unsigned SpeculationCost = 0;
1966  Value *SpeculatedStoreValue = nullptr;
1967  StoreInst *SpeculatedStore = nullptr;
1968  for (BasicBlock::iterator BBI = ThenBB->begin(),
1969  BBE = std::prev(ThenBB->end());
1970  BBI != BBE; ++BBI) {
1971  Instruction *I = &*BBI;
1972  // Skip debug info.
1973  if (isa<DbgInfoIntrinsic>(I)) {
1974  SpeculatedDbgIntrinsics.push_back(I);
1975  continue;
1976  }
1977 
1978  // Only speculatively execute a single instruction (not counting the
1979  // terminator) for now.
1980  ++SpeculationCost;
1981  if (SpeculationCost > 1)
1982  return false;
1983 
1984  // Don't hoist the instruction if it's unsafe or expensive.
1985  if (!isSafeToSpeculativelyExecute(I) &&
1986  !(HoistCondStores && (SpeculatedStoreValue = isSafeToSpeculateStore(
1987  I, BB, ThenBB, EndBB))))
1988  return false;
1989  if (!SpeculatedStoreValue &&
1990  ComputeSpeculationCost(I, TTI) >
1992  return false;
1993 
1994  // Store the store speculation candidate.
1995  if (SpeculatedStoreValue)
1996  SpeculatedStore = cast<StoreInst>(I);
1997 
1998  // Do not hoist the instruction if any of its operands are defined but not
1999  // used in BB. The transformation will prevent the operand from
2000  // being sunk into the use block.
2001  for (User::op_iterator i = I->op_begin(), e = I->op_end(); i != e; ++i) {
2002  Instruction *OpI = dyn_cast<Instruction>(*i);
2003  if (!OpI || OpI->getParent() != BB || OpI->mayHaveSideEffects())
2004  continue; // Not a candidate for sinking.
2005 
2006  ++SinkCandidateUseCounts[OpI];
2007  }
2008  }
2009 
2010  // Consider any sink candidates which are only used in ThenBB as costs for
2011  // speculation. Note, while we iterate over a DenseMap here, we are summing
2012  // and so iteration order isn't significant.
2014  I = SinkCandidateUseCounts.begin(),
2015  E = SinkCandidateUseCounts.end();
2016  I != E; ++I)
2017  if (I->first->hasNUses(I->second)) {
2018  ++SpeculationCost;
2019  if (SpeculationCost > 1)
2020  return false;
2021  }
2022 
2023  // Check that the PHI nodes can be converted to selects.
2024  bool HaveRewritablePHIs = false;
2025  for (PHINode &PN : EndBB->phis()) {
2026  Value *OrigV = PN.getIncomingValueForBlock(BB);
2027  Value *ThenV = PN.getIncomingValueForBlock(ThenBB);
2028 
2029  // FIXME: Try to remove some of the duplication with HoistThenElseCodeToIf.
2030  // Skip PHIs which are trivial.
2031  if (ThenV == OrigV)
2032  continue;
2033 
2034  // Don't convert to selects if we could remove undefined behavior instead.
2035  if (passingValueIsAlwaysUndefined(OrigV, &PN) ||
2036  passingValueIsAlwaysUndefined(ThenV, &PN))
2037  return false;
2038 
2039  HaveRewritablePHIs = true;
2040  ConstantExpr *OrigCE = dyn_cast<ConstantExpr>(OrigV);
2041  ConstantExpr *ThenCE = dyn_cast<ConstantExpr>(ThenV);
2042  if (!OrigCE && !ThenCE)
2043  continue; // Known safe and cheap.
2044 
2045  if ((ThenCE && !isSafeToSpeculativelyExecute(ThenCE)) ||
2046  (OrigCE && !isSafeToSpeculativelyExecute(OrigCE)))
2047  return false;
2048  unsigned OrigCost = OrigCE ? ComputeSpeculationCost(OrigCE, TTI) : 0;
2049  unsigned ThenCost = ThenCE ? ComputeSpeculationCost(ThenCE, TTI) : 0;
2050  unsigned MaxCost =
2052  if (OrigCost + ThenCost > MaxCost)
2053  return false;
2054 
2055  // Account for the cost of an unfolded ConstantExpr which could end up
2056  // getting expanded into Instructions.
2057  // FIXME: This doesn't account for how many operations are combined in the
2058  // constant expression.
2059  ++SpeculationCost;
2060  if (SpeculationCost > 1)
2061  return false;
2062  }
2063 
2064  // If there are no PHIs to process, bail early. This helps ensure idempotence
2065  // as well.
2066  if (!HaveRewritablePHIs && !(HoistCondStores && SpeculatedStoreValue))
2067  return false;
2068 
2069  // If we get here, we can hoist the instruction and if-convert.
2070  LLVM_DEBUG(dbgs() << "SPECULATIVELY EXECUTING BB" << *ThenBB << "\n";);
2071 
2072  // Insert a select of the value of the speculated store.
2073  if (SpeculatedStoreValue) {
2074  IRBuilder<NoFolder> Builder(BI);
2075  Value *TrueV = SpeculatedStore->getValueOperand();
2076  Value *FalseV = SpeculatedStoreValue;
2077  if (Invert)
2078  std::swap(TrueV, FalseV);
2079  Value *S = Builder.CreateSelect(
2080  BrCond, TrueV, FalseV, "spec.store.select", BI);
2081  SpeculatedStore->setOperand(0, S);
2082  SpeculatedStore->applyMergedLocation(BI->getDebugLoc(),
2083  SpeculatedStore->getDebugLoc());
2084  }
2085 
2086  // Metadata can be dependent on the condition we are hoisting above.
2087  // Conservatively strip all metadata on the instruction.
2088  for (auto &I : *ThenBB)
2090 
2091  // Hoist the instructions.
2092  BB->getInstList().splice(BI->getIterator(), ThenBB->getInstList(),
2093  ThenBB->begin(), std::prev(ThenBB->end()));
2094 
2095  // Insert selects and rewrite the PHI operands.
2096  IRBuilder<NoFolder> Builder(BI);
2097  for (PHINode &PN : EndBB->phis()) {
2098  unsigned OrigI = PN.getBasicBlockIndex(BB);
2099  unsigned ThenI = PN.getBasicBlockIndex(ThenBB);
2100  Value *OrigV = PN.getIncomingValue(OrigI);
2101  Value *ThenV = PN.getIncomingValue(ThenI);
2102 
2103  // Skip PHIs which are trivial.
2104  if (OrigV == ThenV)
2105  continue;
2106 
2107  // Create a select whose true value is the speculatively executed value and
2108  // false value is the preexisting value. Swap them if the branch
2109  // destinations were inverted.
2110  Value *TrueV = ThenV, *FalseV = OrigV;
2111  if (Invert)
2112  std::swap(TrueV, FalseV);
2113  Value *V = Builder.CreateSelect(
2114  BrCond, TrueV, FalseV, "spec.select", BI);
2115  PN.setIncomingValue(OrigI, V);
2116  PN.setIncomingValue(ThenI, V);
2117  }
2118 
2119  // Remove speculated dbg intrinsics.
2120  // FIXME: Is it possible to do this in a more elegant way? Moving/merging the
2121  // dbg value for the different flows and inserting it after the select.
2122  for (Instruction *I : SpeculatedDbgIntrinsics)
2123  I->eraseFromParent();
2124 
2125  ++NumSpeculations;
2126  return true;
2127 }
2128 
2129 /// Return true if we can thread a branch across this block.
2131  unsigned Size = 0;
2132 
2133  for (Instruction &I : BB->instructionsWithoutDebug()) {
2134  if (Size > 10)
2135  return false; // Don't clone large BB's.
2136  ++Size;
2137 
2138  // We can only support instructions that do not define values that are
2139  // live outside of the current basic block.
2140  for (User *U : I.users()) {
2141  Instruction *UI = cast<Instruction>(U);
2142  if (UI->getParent() != BB || isa<PHINode>(UI))
2143  return false;
2144  }
2145 
2146  // Looks ok, continue checking.
2147  }
2148 
2149  return true;
2150 }
2151 
2152 /// If we have a conditional branch on a PHI node value that is defined in the
2153 /// same block as the branch and if any PHI entries are constants, thread edges
2154 /// corresponding to that entry to be branches to their ultimate destination.
2155 static bool FoldCondBranchOnPHI(BranchInst *BI, const DataLayout &DL,
2156  AssumptionCache *AC) {
2157  BasicBlock *BB = BI->getParent();
2158  PHINode *PN = dyn_cast<PHINode>(BI->getCondition());
2159  // NOTE: we currently cannot transform this case if the PHI node is used
2160  // outside of the block.
2161  if (!PN || PN->getParent() != BB || !PN->hasOneUse())
2162  return false;
2163 
2164  // Degenerate case of a single entry PHI.
2165  if (PN->getNumIncomingValues() == 1) {
2167  return true;
2168  }
2169 
2170  // Now we know that this block has multiple preds and two succs.
2172  return false;
2173 
2174  // Can't fold blocks that contain noduplicate or convergent calls.
2175  if (any_of(*BB, [](const Instruction &I) {
2176  const CallInst *CI = dyn_cast<CallInst>(&I);
2177  return CI && (CI->cannotDuplicate() || CI->isConvergent());
2178  }))
2179  return false;
2180 
2181  // Okay, this is a simple enough basic block. See if any phi values are
2182  // constants.
2183  for (unsigned i = 0, e = PN->getNumIncomingValues(); i != e; ++i) {
2185  if (!CB || !CB->getType()->isIntegerTy(1))
2186  continue;
2187 
2188  // Okay, we now know that all edges from PredBB should be revectored to
2189  // branch to RealDest.
2190  BasicBlock *PredBB = PN->getIncomingBlock(i);
2191  BasicBlock *RealDest = BI->getSuccessor(!CB->getZExtValue());
2192 
2193  if (RealDest == BB)
2194  continue; // Skip self loops.
2195  // Skip if the predecessor's terminator is an indirect branch.
2196  if (isa<IndirectBrInst>(PredBB->getTerminator()))
2197  continue;
2198 
2199  // The dest block might have PHI nodes, other predecessors and other
2200  // difficult cases. Instead of being smart about this, just insert a new
2201  // block that jumps to the destination block, effectively splitting
2202  // the edge we are about to create.
2203  BasicBlock *EdgeBB =
2204  BasicBlock::Create(BB->getContext(), RealDest->getName() + ".critedge",
2205  RealDest->getParent(), RealDest);
2206  BranchInst::Create(RealDest, EdgeBB);
2207 
2208  // Update PHI nodes.
2209  AddPredecessorToBlock(RealDest, EdgeBB, BB);
2210 
2211  // BB may have instructions that are being threaded over. Clone these
2212  // instructions into EdgeBB. We know that there will be no uses of the
2213  // cloned instructions outside of EdgeBB.
2214  BasicBlock::iterator InsertPt = EdgeBB->begin();
2215  DenseMap<Value *, Value *> TranslateMap; // Track translated values.
2216  for (BasicBlock::iterator BBI = BB->begin(); &*BBI != BI; ++BBI) {
2217  if (PHINode *PN = dyn_cast<PHINode>(BBI)) {
2218  TranslateMap[PN] = PN->getIncomingValueForBlock(PredBB);
2219  continue;
2220  }
2221  // Clone the instruction.
2222  Instruction *N = BBI->clone();
2223  if (BBI->hasName())
2224  N->setName(BBI->getName() + ".c");
2225 
2226  // Update operands due to translation.
2227  for (User::op_iterator i = N->op_begin(), e = N->op_end(); i != e; ++i) {
2228  DenseMap<Value *, Value *>::iterator PI = TranslateMap.find(*i);
2229  if (PI != TranslateMap.end())
2230  *i = PI->second;
2231  }
2232 
2233  // Check for trivial simplification.
2234  if (Value *V = SimplifyInstruction(N, {DL, nullptr, nullptr, AC})) {
2235  if (!BBI->use_empty())
2236  TranslateMap[&*BBI] = V;
2237  if (!N->mayHaveSideEffects()) {
2238  N->deleteValue(); // Instruction folded away, don't need actual inst
2239  N = nullptr;
2240  }
2241  } else {
2242  if (!BBI->use_empty())
2243  TranslateMap[&*BBI] = N;
2244  }
2245  // Insert the new instruction into its new home.
2246  if (N)
2247  EdgeBB->getInstList().insert(InsertPt, N);
2248 
2249  // Register the new instruction with the assumption cache if necessary.
2250  if (auto *II = dyn_cast_or_null<IntrinsicInst>(N))
2251  if (II->getIntrinsicID() == Intrinsic::assume)
2252  AC->registerAssumption(II);
2253  }
2254 
2255  // Loop over all of the edges from PredBB to BB, changing them to branch
2256  // to EdgeBB instead.
2257  Instruction *PredBBTI = PredBB->getTerminator();
2258  for (unsigned i = 0, e = PredBBTI->getNumSuccessors(); i != e; ++i)
2259  if (PredBBTI->getSuccessor(i) == BB) {
2260  BB->removePredecessor(PredBB);
2261  PredBBTI->setSuccessor(i, EdgeBB);
2262  }
2263 
2264  // Recurse, simplifying any other constants.
2265  return FoldCondBranchOnPHI(BI, DL, AC) || true;
2266  }
2267 
2268  return false;
2269 }
2270 
2271 /// Given a BB that starts with the specified two-entry PHI node,
2272 /// see if we can eliminate it.
2274  const DataLayout &DL) {
2275  // Ok, this is a two entry PHI node. Check to see if this is a simple "if
2276  // statement", which has a very simple dominance structure. Basically, we
2277  // are trying to find the condition that is being branched on, which
2278  // subsequently causes this merge to happen. We really want control
2279  // dependence information for this check, but simplifycfg can't keep it up
2280  // to date, and this catches most of the cases we care about anyway.
2281  BasicBlock *BB = PN->getParent();
2282  const Function *Fn = BB->getParent();
2284  return false;
2285 
2286  BasicBlock *IfTrue, *IfFalse;
2287  Value *IfCond = GetIfCondition(BB, IfTrue, IfFalse);
2288  if (!IfCond ||
2289  // Don't bother if the branch will be constant folded trivially.
2290  isa<ConstantInt>(IfCond))
2291  return false;
2292 
2293  // Okay, we found that we can merge this two-entry phi node into a select.
2294  // Doing so would require us to fold *all* two entry phi nodes in this block.
2295  // At some point this becomes non-profitable (particularly if the target
2296  // doesn't support cmov's). Only do this transformation if there are two or
2297  // fewer PHI nodes in this block.
2298  unsigned NumPhis = 0;
2299  for (BasicBlock::iterator I = BB->begin(); isa<PHINode>(I); ++NumPhis, ++I)
2300  if (NumPhis > 2)
2301  return false;
2302 
2303  // Loop over the PHI's seeing if we can promote them all to select
2304  // instructions. While we are at it, keep track of the instructions
2305  // that need to be moved to the dominating block.
2306  SmallPtrSet<Instruction *, 4> AggressiveInsts;
2307  unsigned MaxCostVal0 = PHINodeFoldingThreshold,
2308  MaxCostVal1 = PHINodeFoldingThreshold;
2309  MaxCostVal0 *= TargetTransformInfo::TCC_Basic;
2310  MaxCostVal1 *= TargetTransformInfo::TCC_Basic;
2311 
2312  for (BasicBlock::iterator II = BB->begin(); isa<PHINode>(II);) {
2313  PHINode *PN = cast<PHINode>(II++);
2314  if (Value *V = SimplifyInstruction(PN, {DL, PN})) {
2315  PN->replaceAllUsesWith(V);
2316  PN->eraseFromParent();
2317  continue;
2318  }
2319 
2320  if (!DominatesMergePoint(PN->getIncomingValue(0), BB, AggressiveInsts,
2321  MaxCostVal0, TTI) ||
2322  !DominatesMergePoint(PN->getIncomingValue(1), BB, AggressiveInsts,
2323  MaxCostVal1, TTI))
2324  return false;
2325  }
2326 
2327  // If we folded the first phi, PN dangles at this point. Refresh it. If
2328  // we ran out of PHIs then we simplified them all.
2329  PN = dyn_cast<PHINode>(BB->begin());
2330  if (!PN)
2331  return true;
2332 
2333  // Don't fold i1 branches on PHIs which contain binary operators. These can
2334  // often be turned into switches and other things.
2335  if (PN->getType()->isIntegerTy(1) &&
2336  (isa<BinaryOperator>(PN->getIncomingValue(0)) ||
2337  isa<BinaryOperator>(PN->getIncomingValue(1)) ||
2338  isa<BinaryOperator>(IfCond)))
2339  return false;
2340 
2341  // If all PHI nodes are promotable, check to make sure that all instructions
2342  // in the predecessor blocks can be promoted as well. If not, we won't be able
2343  // to get rid of the control flow, so it's not worth promoting to select
2344  // instructions.
2345  BasicBlock *DomBlock = nullptr;
2346  BasicBlock *IfBlock1 = PN->getIncomingBlock(0);
2347  BasicBlock *IfBlock2 = PN->getIncomingBlock(1);
2348  if (cast<BranchInst>(IfBlock1->getTerminator())->isConditional()) {
2349  IfBlock1 = nullptr;
2350  } else {
2351  DomBlock = *pred_begin(IfBlock1);
2352  for (BasicBlock::iterator I = IfBlock1->begin(); !I->isTerminator(); ++I)
2353  if (!AggressiveInsts.count(&*I) && !isa<DbgInfoIntrinsic>(I)) {
2354  // This is not an aggressive instruction that we can promote.
2355  // Because of this, we won't be able to get rid of the control flow, so
2356  // the xform is not worth it.
2357  return false;
2358  }
2359  }
2360 
2361  if (cast<BranchInst>(IfBlock2->getTerminator())->isConditional()) {
2362  IfBlock2 = nullptr;
2363  } else {
2364  DomBlock = *pred_begin(IfBlock2);
2365  for (BasicBlock::iterator I = IfBlock2->begin(); !I->isTerminator(); ++I)
2366  if (!AggressiveInsts.count(&*I) && !isa<DbgInfoIntrinsic>(I)) {
2367  // This is not an aggressive instruction that we can promote.
2368  // Because of this, we won't be able to get rid of the control flow, so
2369  // the xform is not worth it.
2370  return false;
2371  }
2372  }
2373 
2374  LLVM_DEBUG(dbgs() << "FOUND IF CONDITION! " << *IfCond
2375  << " T: " << IfTrue->getName()
2376  << " F: " << IfFalse->getName() << "\n");
2377 
2378  // If we can still promote the PHI nodes after this gauntlet of tests,
2379  // do all of the PHI's now.
2380  Instruction *InsertPt = DomBlock->getTerminator();
2381  IRBuilder<NoFolder> Builder(InsertPt);
2382 
2383  // Move all 'aggressive' instructions, which are defined in the
2384  // conditional parts of the if's up to the dominating block.
2385  if (IfBlock1)
2386  hoistAllInstructionsInto(DomBlock, InsertPt, IfBlock1);
2387  if (IfBlock2)
2388  hoistAllInstructionsInto(DomBlock, InsertPt, IfBlock2);
2389 
2390  while (PHINode *PN = dyn_cast<PHINode>(BB->begin())) {
2391  // Change the PHI node into a select instruction.
2392  Value *TrueVal = PN->getIncomingValue(PN->getIncomingBlock(0) == IfFalse);
2393  Value *FalseVal = PN->getIncomingValue(PN->getIncomingBlock(0) == IfTrue);
2394 
2395  Value *Sel = Builder.CreateSelect(IfCond, TrueVal, FalseVal, "", InsertPt);
2396  PN->replaceAllUsesWith(Sel);
2397  Sel->takeName(PN);
2398  PN->eraseFromParent();
2399  }
2400 
2401  // At this point, IfBlock1 and IfBlock2 are both empty, so our if statement
2402  // has been flattened. Change DomBlock to jump directly to our new block to
2403  // avoid other simplifycfg's kicking in on the diamond.
2404  Instruction *OldTI = DomBlock->getTerminator();
2405  Builder.SetInsertPoint(OldTI);
2406  Builder.CreateBr(BB);
2407  OldTI->eraseFromParent();
2408  return true;
2409 }
2410 
2411 /// If we found a conditional branch that goes to two returning blocks,
2412 /// try to merge them together into one return,
2413 /// introducing a select if the return values disagree.
2415  IRBuilder<> &Builder) {
2416  assert(BI->isConditional() && "Must be a conditional branch");
2417  BasicBlock *TrueSucc = BI->getSuccessor(0);
2418  BasicBlock *FalseSucc = BI->getSuccessor(1);
2419  ReturnInst *TrueRet = cast<ReturnInst>(TrueSucc->getTerminator());
2420  ReturnInst *FalseRet = cast<ReturnInst>(FalseSucc->getTerminator());
2421 
2422  // Check to ensure both blocks are empty (just a return) or optionally empty
2423  // with PHI nodes. If there are other instructions, merging would cause extra
2424  // computation on one path or the other.
2425  if (!TrueSucc->getFirstNonPHIOrDbg()->isTerminator())
2426  return false;
2427  if (!FalseSucc->getFirstNonPHIOrDbg()->isTerminator())
2428  return false;
2429 
2430  Builder.SetInsertPoint(BI);
2431  // Okay, we found a branch that is going to two return nodes. If
2432  // there is no return value for this function, just change the
2433  // branch into a return.
2434  if (FalseRet->getNumOperands() == 0) {
2435  TrueSucc->removePredecessor(BI->getParent());
2436  FalseSucc->removePredecessor(BI->getParent());
2437  Builder.CreateRetVoid();
2439  return true;
2440  }
2441 
2442  // Otherwise, figure out what the true and false return values are
2443  // so we can insert a new select instruction.
2444  Value *TrueValue = TrueRet->getReturnValue();
2445  Value *FalseValue = FalseRet->getReturnValue();
2446 
2447  // Unwrap any PHI nodes in the return blocks.
2448  if (PHINode *TVPN = dyn_cast_or_null<PHINode>(TrueValue))
2449  if (TVPN->getParent() == TrueSucc)
2450  TrueValue = TVPN->getIncomingValueForBlock(BI->getParent());
2451  if (PHINode *FVPN = dyn_cast_or_null<PHINode>(FalseValue))
2452  if (FVPN->getParent() == FalseSucc)
2453  FalseValue = FVPN->getIncomingValueForBlock(BI->getParent());
2454 
2455  // In order for this transformation to be safe, we must be able to
2456  // unconditionally execute both operands to the return. This is
2457  // normally the case, but we could have a potentially-trapping
2458  // constant expression that prevents this transformation from being
2459  // safe.
2460  if (ConstantExpr *TCV = dyn_cast_or_null<ConstantExpr>(TrueValue))
2461  if (TCV->canTrap())
2462  return false;
2463  if (ConstantExpr *FCV = dyn_cast_or_null<ConstantExpr>(FalseValue))
2464  if (FCV->canTrap())
2465  return false;
2466 
2467  // Okay, we collected all the mapped values and checked them for sanity, and
2468  // defined to really do this transformation. First, update the CFG.
2469  TrueSucc->removePredecessor(BI->getParent());
2470  FalseSucc->removePredecessor(BI->getParent());
2471 
2472  // Insert select instructions where needed.
2473  Value *BrCond = BI->getCondition();
2474  if (TrueValue) {
2475  // Insert a select if the results differ.
2476  if (TrueValue == FalseValue || isa<UndefValue>(FalseValue)) {
2477  } else if (isa<UndefValue>(TrueValue)) {
2478  TrueValue = FalseValue;
2479  } else {
2480  TrueValue =
2481  Builder.CreateSelect(BrCond, TrueValue, FalseValue, "retval", BI);
2482  }
2483  }
2484 
2485  Value *RI =
2486  !TrueValue ? Builder.CreateRetVoid() : Builder.CreateRet(TrueValue);
2487 
2488  (void)RI;
2489 
2490  LLVM_DEBUG(dbgs() << "\nCHANGING BRANCH TO TWO RETURNS INTO SELECT:"
2491  << "\n " << *BI << "NewRet = " << *RI << "TRUEBLOCK: "
2492  << *TrueSucc << "FALSEBLOCK: " << *FalseSucc);
2493 
2495 
2496  return true;
2497 }
2498 
2499 /// Return true if the given instruction is available
2500 /// in its predecessor block. If yes, the instruction will be removed.
2502  if (!isa<BinaryOperator>(Inst) && !isa<CmpInst>(Inst))
2503  return false;
2504  for (Instruction &I : *PB) {
2505  Instruction *PBI = &I;
2506  // Check whether Inst and PBI generate the same value.
2507  if (Inst->isIdenticalTo(PBI)) {
2508  Inst->replaceAllUsesWith(PBI);
2509  Inst->eraseFromParent();
2510  return true;
2511  }
2512  }
2513  return false;
2514 }
2515 
2516 /// Return true if either PBI or BI has branch weight available, and store
2517 /// the weights in {Pred|Succ}{True|False}Weight. If one of PBI and BI does
2518 /// not have branch weight, use 1:1 as its weight.
2520  uint64_t &PredTrueWeight,
2521  uint64_t &PredFalseWeight,
2522  uint64_t &SuccTrueWeight,
2523  uint64_t &SuccFalseWeight) {
2524  bool PredHasWeights =
2525  PBI->extractProfMetadata(PredTrueWeight, PredFalseWeight);
2526  bool SuccHasWeights =
2527  BI->extractProfMetadata(SuccTrueWeight, SuccFalseWeight);
2528  if (PredHasWeights || SuccHasWeights) {
2529  if (!PredHasWeights)
2530  PredTrueWeight = PredFalseWeight = 1;
2531  if (!SuccHasWeights)
2532  SuccTrueWeight = SuccFalseWeight = 1;
2533  return true;
2534  } else {
2535  return false;
2536  }
2537 }
2538 
2539 /// If this basic block is simple enough, and if a predecessor branches to us
2540 /// and one of our successors, fold the block into the predecessor and use
2541 /// logical operations to pick the right destination.
2542 bool llvm::FoldBranchToCommonDest(BranchInst *BI, unsigned BonusInstThreshold) {
2543  BasicBlock *BB = BI->getParent();
2544 
2545  const unsigned PredCount = pred_size(BB);
2546 
2547  Instruction *Cond = nullptr;
2548  if (BI->isConditional())
2549  Cond = dyn_cast<Instruction>(BI->getCondition());
2550  else {
2551  // For unconditional branch, check for a simple CFG pattern, where
2552  // BB has a single predecessor and BB's successor is also its predecessor's
2553  // successor. If such pattern exists, check for CSE between BB and its
2554  // predecessor.
2555  if (BasicBlock *PB = BB->getSinglePredecessor())
2556  if (BranchInst *PBI = dyn_cast<BranchInst>(PB->getTerminator()))
2557  if (PBI->isConditional() &&
2558  (BI->getSuccessor(0) == PBI->getSuccessor(0) ||
2559  BI->getSuccessor(0) == PBI->getSuccessor(1))) {
2560  for (auto I = BB->instructionsWithoutDebug().begin(),
2561  E = BB->instructionsWithoutDebug().end();
2562  I != E;) {
2563  Instruction *Curr = &*I++;
2564  if (isa<CmpInst>(Curr)) {
2565  Cond = Curr;
2566  break;
2567  }
2568  // Quit if we can't remove this instruction.
2569  if (!tryCSEWithPredecessor(Curr, PB))
2570  return false;
2571  }
2572  }
2573 
2574  if (!Cond)
2575  return false;
2576  }
2577 
2578  if (!Cond || (!isa<CmpInst>(Cond) && !isa<BinaryOperator>(Cond)) ||
2579  Cond->getParent() != BB || !Cond->hasOneUse())
2580  return false;
2581 
2582  // Make sure the instruction after the condition is the cond branch.
2583  BasicBlock::iterator CondIt = ++Cond->getIterator();
2584 
2585  // Ignore dbg intrinsics.
2586  while (isa<DbgInfoIntrinsic>(CondIt))
2587  ++CondIt;
2588 
2589  if (&*CondIt != BI)
2590  return false;
2591 
2592  // Only allow this transformation if computing the condition doesn't involve
2593  // too many instructions and these involved instructions can be executed
2594  // unconditionally. We denote all involved instructions except the condition
2595  // as "bonus instructions", and only allow this transformation when the
2596  // number of the bonus instructions we'll need to create when cloning into
2597  // each predecessor does not exceed a certain threshold.
2598  unsigned NumBonusInsts = 0;
2599  for (auto I = BB->begin(); Cond != &*I; ++I) {
2600  // Ignore dbg intrinsics.
2601  if (isa<DbgInfoIntrinsic>(I))
2602  continue;
2603  if (!I->hasOneUse() || !isSafeToSpeculativelyExecute(&*I))
2604  return false;
2605  // I has only one use and can be executed unconditionally.
2607  if (User == nullptr || User->getParent() != BB)
2608  return false;
2609  // I is used in the same BB. Since BI uses Cond and doesn't have more slots
2610  // to use any other instruction, User must be an instruction between next(I)
2611  // and Cond.
2612 
2613  // Account for the cost of duplicating this instruction into each
2614  // predecessor.
2615  NumBonusInsts += PredCount;
2616  // Early exits once we reach the limit.
2617  if (NumBonusInsts > BonusInstThreshold)
2618  return false;
2619  }
2620 
2621  // Cond is known to be a compare or binary operator. Check to make sure that
2622  // neither operand is a potentially-trapping constant expression.
2623  if (ConstantExpr *CE = dyn_cast<ConstantExpr>(Cond->getOperand(0)))
2624  if (CE->canTrap())
2625  return false;
2626  if (ConstantExpr *CE = dyn_cast<ConstantExpr>(Cond->getOperand(1)))
2627  if (CE->canTrap())
2628  return false;
2629 
2630  // Finally, don't infinitely unroll conditional loops.
2631  BasicBlock *TrueDest = BI->getSuccessor(0);
2632  BasicBlock *FalseDest = (BI->isConditional()) ? BI->getSuccessor(1) : nullptr;
2633  if (TrueDest == BB || FalseDest == BB)
2634  return false;
2635 
2636  for (pred_iterator PI = pred_begin(BB), E = pred_end(BB); PI != E; ++PI) {
2637  BasicBlock *PredBlock = *PI;
2638  BranchInst *PBI = dyn_cast<BranchInst>(PredBlock->getTerminator());
2639 
2640  // Check that we have two conditional branches. If there is a PHI node in
2641  // the common successor, verify that the same value flows in from both
2642  // blocks.
2644  if (!PBI || PBI->isUnconditional() ||
2645  (BI->isConditional() && !SafeToMergeTerminators(BI, PBI)) ||
2646  (!BI->isConditional() &&
2647  !isProfitableToFoldUnconditional(BI, PBI, Cond, PHIs)))
2648  continue;
2649 
2650  // Determine if the two branches share a common destination.
2651  Instruction::BinaryOps Opc = Instruction::BinaryOpsEnd;
2652  bool InvertPredCond = false;
2653 
2654  if (BI->isConditional()) {
2655  if (PBI->getSuccessor(0) == TrueDest) {
2656  Opc = Instruction::Or;
2657  } else if (PBI->getSuccessor(1) == FalseDest) {
2658  Opc = Instruction::And;
2659  } else if (PBI->getSuccessor(0) == FalseDest) {
2660  Opc = Instruction::And;
2661  InvertPredCond = true;
2662  } else if (PBI->getSuccessor(1) == TrueDest) {
2663  Opc = Instruction::Or;
2664  InvertPredCond = true;
2665  } else {
2666  continue;
2667  }
2668  } else {
2669  if (PBI->getSuccessor(0) != TrueDest && PBI->getSuccessor(1) != TrueDest)
2670  continue;
2671  }
2672 
2673  LLVM_DEBUG(dbgs() << "FOLDING BRANCH TO COMMON DEST:\n" << *PBI << *BB);
2674  IRBuilder<> Builder(PBI);
2675 
2676  // If we need to invert the condition in the pred block to match, do so now.
2677  if (InvertPredCond) {
2678  Value *NewCond = PBI->getCondition();
2679 
2680  if (NewCond->hasOneUse() && isa<CmpInst>(NewCond)) {
2681  CmpInst *CI = cast<CmpInst>(NewCond);
2682  CI->setPredicate(CI->getInversePredicate());
2683  } else {
2684  NewCond =
2685  Builder.CreateNot(NewCond, PBI->getCondition()->getName() + ".not");
2686  }
2687 
2688  PBI->setCondition(NewCond);
2689  PBI->swapSuccessors();
2690  }
2691 
2692  // If we have bonus instructions, clone them into the predecessor block.
2693  // Note that there may be multiple predecessor blocks, so we cannot move
2694  // bonus instructions to a predecessor block.
2695  ValueToValueMapTy VMap; // maps original values to cloned values
2696  // We already make sure Cond is the last instruction before BI. Therefore,
2697  // all instructions before Cond other than DbgInfoIntrinsic are bonus
2698  // instructions.
2699  for (auto BonusInst = BB->begin(); Cond != &*BonusInst; ++BonusInst) {
2700  if (isa<DbgInfoIntrinsic>(BonusInst))
2701  continue;
2702  Instruction *NewBonusInst = BonusInst->clone();
2703  RemapInstruction(NewBonusInst, VMap,
2705  VMap[&*BonusInst] = NewBonusInst;
2706 
2707  // If we moved a load, we cannot any longer claim any knowledge about
2708  // its potential value. The previous information might have been valid
2709  // only given the branch precondition.
2710  // For an analogous reason, we must also drop all the metadata whose
2711  // semantics we don't understand.
2712  NewBonusInst->dropUnknownNonDebugMetadata();
2713 
2714  PredBlock->getInstList().insert(PBI->getIterator(), NewBonusInst);
2715  NewBonusInst->takeName(&*BonusInst);
2716  BonusInst->setName(BonusInst->getName() + ".old");
2717  }
2718 
2719  // Clone Cond into the predecessor basic block, and or/and the
2720  // two conditions together.
2721  Instruction *CondInPred = Cond->clone();
2722  RemapInstruction(CondInPred, VMap,
2724  PredBlock->getInstList().insert(PBI->getIterator(), CondInPred);
2725  CondInPred->takeName(Cond);
2726  Cond->setName(CondInPred->getName() + ".old");
2727 
2728  if (BI->isConditional()) {
2729  Instruction *NewCond = cast<Instruction>(
2730  Builder.CreateBinOp(Opc, PBI->getCondition(), CondInPred, "or.cond"));
2731  PBI->setCondition(NewCond);
2732 
2733  uint64_t PredTrueWeight, PredFalseWeight, SuccTrueWeight, SuccFalseWeight;
2734  bool HasWeights =
2735  extractPredSuccWeights(PBI, BI, PredTrueWeight, PredFalseWeight,
2736  SuccTrueWeight, SuccFalseWeight);
2737  SmallVector<uint64_t, 8> NewWeights;
2738 
2739  if (PBI->getSuccessor(0) == BB) {
2740  if (HasWeights) {
2741  // PBI: br i1 %x, BB, FalseDest
2742  // BI: br i1 %y, TrueDest, FalseDest
2743  // TrueWeight is TrueWeight for PBI * TrueWeight for BI.
2744  NewWeights.push_back(PredTrueWeight * SuccTrueWeight);
2745  // FalseWeight is FalseWeight for PBI * TotalWeight for BI +
2746  // TrueWeight for PBI * FalseWeight for BI.
2747  // We assume that total weights of a BranchInst can fit into 32 bits.
2748  // Therefore, we will not have overflow using 64-bit arithmetic.
2749  NewWeights.push_back(PredFalseWeight *
2750  (SuccFalseWeight + SuccTrueWeight) +
2751  PredTrueWeight * SuccFalseWeight);
2752  }
2753  AddPredecessorToBlock(TrueDest, PredBlock, BB);
2754  PBI->setSuccessor(0, TrueDest);
2755  }
2756  if (PBI->getSuccessor(1) == BB) {
2757  if (HasWeights) {
2758  // PBI: br i1 %x, TrueDest, BB
2759  // BI: br i1 %y, TrueDest, FalseDest
2760  // TrueWeight is TrueWeight for PBI * TotalWeight for BI +
2761  // FalseWeight for PBI * TrueWeight for BI.
2762  NewWeights.push_back(PredTrueWeight *
2763  (SuccFalseWeight + SuccTrueWeight) +
2764  PredFalseWeight * SuccTrueWeight);
2765  // FalseWeight is FalseWeight for PBI * FalseWeight for BI.
2766  NewWeights.push_back(PredFalseWeight * SuccFalseWeight);
2767  }
2768  AddPredecessorToBlock(FalseDest, PredBlock, BB);
2769  PBI->setSuccessor(1, FalseDest);
2770  }
2771  if (NewWeights.size() == 2) {
2772  // Halve the weights if any of them cannot fit in an uint32_t
2773  FitWeights(NewWeights);
2774 
2775  SmallVector<uint32_t, 8> MDWeights(NewWeights.begin(),
2776  NewWeights.end());
2777  setBranchWeights(PBI, MDWeights[0], MDWeights[1]);
2778  } else
2779  PBI->setMetadata(LLVMContext::MD_prof, nullptr);
2780  } else {
2781  // Update PHI nodes in the common successors.
2782  for (unsigned i = 0, e = PHIs.size(); i != e; ++i) {
2783  ConstantInt *PBI_C = cast<ConstantInt>(
2784  PHIs[i]->getIncomingValueForBlock(PBI->getParent()));
2785  assert(PBI_C->getType()->isIntegerTy(1));
2786  Instruction *MergedCond = nullptr;
2787  if (PBI->getSuccessor(0) == TrueDest) {
2788  // Create (PBI_Cond and PBI_C) or (!PBI_Cond and BI_Value)
2789  // PBI_C is true: PBI_Cond or (!PBI_Cond and BI_Value)
2790  // is false: !PBI_Cond and BI_Value
2791  Instruction *NotCond = cast<Instruction>(
2792  Builder.CreateNot(PBI->getCondition(), "not.cond"));
2793  MergedCond = cast<Instruction>(
2794  Builder.CreateBinOp(Instruction::And, NotCond, CondInPred,
2795  "and.cond"));
2796  if (PBI_C->isOne())
2797  MergedCond = cast<Instruction>(Builder.CreateBinOp(
2798  Instruction::Or, PBI->getCondition(), MergedCond, "or.cond"));
2799  } else {
2800  // Create (PBI_Cond and BI_Value) or (!PBI_Cond and PBI_C)
2801  // PBI_C is true: (PBI_Cond and BI_Value) or (!PBI_Cond)
2802  // is false: PBI_Cond and BI_Value
2803  MergedCond = cast<Instruction>(Builder.CreateBinOp(
2804  Instruction::And, PBI->getCondition(), CondInPred, "and.cond"));
2805  if (PBI_C->isOne()) {
2806  Instruction *NotCond = cast<Instruction>(
2807  Builder.CreateNot(PBI->getCondition(), "not.cond"));
2808  MergedCond = cast<Instruction>(Builder.CreateBinOp(
2809  Instruction::Or, NotCond, MergedCond, "or.cond"));
2810  }
2811  }
2812  // Update PHI Node.
2813  PHIs[i]->setIncomingValue(PHIs[i]->getBasicBlockIndex(PBI->getParent()),
2814  MergedCond);
2815  }
2816  // Change PBI from Conditional to Unconditional.
2817  BranchInst *New_PBI = BranchInst::Create(TrueDest, PBI);
2819  PBI = New_PBI;
2820  }
2821 
2822  // If BI was a loop latch, it may have had associated loop metadata.
2823  // We need to copy it to the new latch, that is, PBI.
2824  if (MDNode *LoopMD = BI->getMetadata(LLVMContext::MD_loop))
2825  PBI->setMetadata(LLVMContext::MD_loop, LoopMD);
2826 
2827  // TODO: If BB is reachable from all paths through PredBlock, then we
2828  // could replace PBI's branch probabilities with BI's.
2829 
2830  // Copy any debug value intrinsics into the end of PredBlock.
2831  for (Instruction &I : *BB)
2832  if (isa<DbgInfoIntrinsic>(I))
2833  I.clone()->insertBefore(PBI);
2834 
2835  return true;
2836  }
2837  return false;
2838 }
2839 
2840 // If there is only one store in BB1 and BB2, return it, otherwise return
2841 // nullptr.
2843  StoreInst *S = nullptr;
2844  for (auto *BB : {BB1, BB2}) {
2845  if (!BB)
2846  continue;
2847  for (auto &I : *BB)
2848  if (auto *SI = dyn_cast<StoreInst>(&I)) {
2849  if (S)
2850  // Multiple stores seen.
2851  return nullptr;
2852  else
2853  S = SI;
2854  }
2855  }
2856  return S;
2857 }
2858 
2860  Value *AlternativeV = nullptr) {
2861  // PHI is going to be a PHI node that allows the value V that is defined in
2862  // BB to be referenced in BB's only successor.
2863  //
2864  // If AlternativeV is nullptr, the only value we care about in PHI is V. It
2865  // doesn't matter to us what the other operand is (it'll never get used). We
2866  // could just create a new PHI with an undef incoming value, but that could
2867  // increase register pressure if EarlyCSE/InstCombine can't fold it with some
2868  // other PHI. So here we directly look for some PHI in BB's successor with V
2869  // as an incoming operand. If we find one, we use it, else we create a new
2870  // one.
2871  //
2872  // If AlternativeV is not nullptr, we care about both incoming values in PHI.
2873  // PHI must be exactly: phi <ty> [ %BB, %V ], [ %OtherBB, %AlternativeV]
2874  // where OtherBB is the single other predecessor of BB's only successor.
2875  PHINode *PHI = nullptr;
2876  BasicBlock *Succ = BB->getSingleSuccessor();
2877 
2878  for (auto I = Succ->begin(); isa<PHINode>(I); ++I)
2879  if (cast<PHINode>(I)->getIncomingValueForBlock(BB) == V) {
2880  PHI = cast<PHINode>(I);
2881  if (!AlternativeV)
2882  break;
2883 
2884  assert(Succ->hasNPredecessors(2));
2885  auto PredI = pred_begin(Succ);
2886  BasicBlock *OtherPredBB = *PredI == BB ? *++PredI : *PredI;
2887  if (PHI->getIncomingValueForBlock(OtherPredBB) == AlternativeV)
2888  break;
2889  PHI = nullptr;
2890  }
2891  if (PHI)
2892  return PHI;
2893 
2894  // If V is not an instruction defined in BB, just return it.
2895  if (!AlternativeV &&
2896  (!isa<Instruction>(V) || cast<Instruction>(V)->getParent() != BB))
2897  return V;
2898 
2899  PHI = PHINode::Create(V->getType(), 2, "simplifycfg.merge", &Succ->front());
2900  PHI->addIncoming(V, BB);
2901  for (BasicBlock *PredBB : predecessors(Succ))
2902  if (PredBB != BB)
2903  PHI->addIncoming(
2904  AlternativeV ? AlternativeV : UndefValue::get(V->getType()), PredBB);
2905  return PHI;
2906 }
2907 
2909  BasicBlock *QTB, BasicBlock *QFB,
2910  BasicBlock *PostBB, Value *Address,
2911  bool InvertPCond, bool InvertQCond,
2912  const DataLayout &DL) {
2913  auto IsaBitcastOfPointerType = [](const Instruction &I) {
2914  return Operator::getOpcode(&I) == Instruction::BitCast &&
2915  I.getType()->isPointerTy();
2916  };
2917 
2918  // If we're not in aggressive mode, we only optimize if we have some
2919  // confidence that by optimizing we'll allow P and/or Q to be if-converted.
2920  auto IsWorthwhile = [&](BasicBlock *BB) {
2921  if (!BB)
2922  return true;
2923  // Heuristic: if the block can be if-converted/phi-folded and the
2924  // instructions inside are all cheap (arithmetic/GEPs), it's worthwhile to
2925  // thread this store.
2926  unsigned N = 0;
2927  for (auto &I : BB->instructionsWithoutDebug()) {
2928  // Cheap instructions viable for folding.
2929  if (isa<BinaryOperator>(I) || isa<GetElementPtrInst>(I) ||
2930  isa<StoreInst>(I))
2931  ++N;
2932  // Free instructions.
2933  else if (I.isTerminator() || IsaBitcastOfPointerType(I))
2934  continue;
2935  else
2936  return false;
2937  }
2938  // The store we want to merge is counted in N, so add 1 to make sure
2939  // we're counting the instructions that would be left.
2940  return N <= (PHINodeFoldingThreshold + 1);
2941  };
2942 
2944  (!IsWorthwhile(PTB) || !IsWorthwhile(PFB) || !IsWorthwhile(QTB) ||
2945  !IsWorthwhile(QFB)))
2946  return false;
2947 
2948  // For every pointer, there must be exactly two stores, one coming from
2949  // PTB or PFB, and the other from QTB or QFB. We don't support more than one
2950  // store (to any address) in PTB,PFB or QTB,QFB.
2951  // FIXME: We could relax this restriction with a bit more work and performance
2952  // testing.
2953  StoreInst *PStore = findUniqueStoreInBlocks(PTB, PFB);
2954  StoreInst *QStore = findUniqueStoreInBlocks(QTB, QFB);
2955  if (!PStore || !QStore)
2956  return false;
2957 
2958  // Now check the stores are compatible.
2959  if (!QStore->isUnordered() || !PStore->isUnordered())
2960  return false;
2961 
2962  // Check that sinking the store won't cause program behavior changes. Sinking
2963  // the store out of the Q blocks won't change any behavior as we're sinking
2964  // from a block to its unconditional successor. But we're moving a store from
2965  // the P blocks down through the middle block (QBI) and past both QFB and QTB.
2966  // So we need to check that there are no aliasing loads or stores in
2967  // QBI, QTB and QFB. We also need to check there are no conflicting memory
2968  // operations between PStore and the end of its parent block.
2969  //
2970  // The ideal way to do this is to query AliasAnalysis, but we don't
2971  // preserve AA currently so that is dangerous. Be super safe and just
2972  // check there are no other memory operations at all.
2973  for (auto &I : *QFB->getSinglePredecessor())
2974  if (I.mayReadOrWriteMemory())
2975  return false;
2976  for (auto &I : *QFB)
2977  if (&I != QStore && I.mayReadOrWriteMemory())
2978  return false;
2979  if (QTB)
2980  for (auto &I : *QTB)
2981  if (&I != QStore && I.mayReadOrWriteMemory())
2982  return false;
2983  for (auto I = BasicBlock::iterator(PStore), E = PStore->getParent()->end();
2984  I != E; ++I)
2985  if (&*I != PStore && I->mayReadOrWriteMemory())
2986  return false;
2987 
2988  // If PostBB has more than two predecessors, we need to split it so we can
2989  // sink the store.
2990  if (std::next(pred_begin(PostBB), 2) != pred_end(PostBB)) {
2991  // We know that QFB's only successor is PostBB. And QFB has a single
2992  // predecessor. If QTB exists, then its only successor is also PostBB.
2993  // If QTB does not exist, then QFB's only predecessor has a conditional
2994  // branch to QFB and PostBB.
2995  BasicBlock *TruePred = QTB ? QTB : QFB->getSinglePredecessor();
2996  BasicBlock *NewBB = SplitBlockPredecessors(PostBB, { QFB, TruePred},
2997  "condstore.split");
2998  if (!NewBB)
2999  return false;
3000  PostBB = NewBB;
3001  }
3002 
3003  // OK, we're going to sink the stores to PostBB. The store has to be
3004  // conditional though, so first create the predicate.
3005  Value *PCond = cast<BranchInst>(PFB->getSinglePredecessor()->getTerminator())
3006  ->getCondition();
3007  Value *QCond = cast<BranchInst>(QFB->getSinglePredecessor()->getTerminator())
3008  ->getCondition();
3009 
3011  PStore->getParent());
3013  QStore->getParent(), PPHI);
3014 
3015  IRBuilder<> QB(&*PostBB->getFirstInsertionPt());
3016 
3017  Value *PPred = PStore->getParent() == PTB ? PCond : QB.CreateNot(PCond);
3018  Value *QPred = QStore->getParent() == QTB ? QCond : QB.CreateNot(QCond);
3019 
3020  if (InvertPCond)
3021  PPred = QB.CreateNot(PPred);
3022  if (InvertQCond)
3023  QPred = QB.CreateNot(QPred);
3024  Value *CombinedPred = QB.CreateOr(PPred, QPred);
3025 
3026  auto *T =
3027  SplitBlockAndInsertIfThen(CombinedPred, &*QB.GetInsertPoint(), false);
3028  QB.SetInsertPoint(T);
3029  StoreInst *SI = cast<StoreInst>(QB.CreateStore(QPHI, Address));
3030  AAMDNodes AAMD;
3031  PStore->getAAMetadata(AAMD, /*Merge=*/false);
3032  PStore->getAAMetadata(AAMD, /*Merge=*/true);
3033  SI->setAAMetadata(AAMD);
3034  unsigned PAlignment = PStore->getAlignment();
3035  unsigned QAlignment = QStore->getAlignment();
3036  unsigned TypeAlignment =
3038  unsigned MinAlignment;
3039  unsigned MaxAlignment;
3040  std::tie(MinAlignment, MaxAlignment) = std::minmax(PAlignment, QAlignment);
3041  // Choose the minimum alignment. If we could prove both stores execute, we
3042  // could use biggest one. In this case, though, we only know that one of the
3043  // stores executes. And we don't know it's safe to take the alignment from a
3044  // store that doesn't execute.
3045  if (MinAlignment != 0) {
3046  // Choose the minimum of all non-zero alignments.
3047  SI->setAlignment(MinAlignment);
3048  } else if (MaxAlignment != 0) {
3049  // Choose the minimal alignment between the non-zero alignment and the ABI
3050  // default alignment for the type of the stored value.
3051  SI->setAlignment(std::min(MaxAlignment, TypeAlignment));
3052  } else {
3053  // If both alignments are zero, use ABI default alignment for the type of
3054  // the stored value.
3055  SI->setAlignment(TypeAlignment);
3056  }
3057 
3058  QStore->eraseFromParent();
3059  PStore->eraseFromParent();
3060 
3061  return true;
3062 }
3063 
3065  const DataLayout &DL) {
3066  // The intention here is to find diamonds or triangles (see below) where each
3067  // conditional block contains a store to the same address. Both of these
3068  // stores are conditional, so they can't be unconditionally sunk. But it may
3069  // be profitable to speculatively sink the stores into one merged store at the
3070  // end, and predicate the merged store on the union of the two conditions of
3071  // PBI and QBI.
3072  //
3073  // This can reduce the number of stores executed if both of the conditions are
3074  // true, and can allow the blocks to become small enough to be if-converted.
3075  // This optimization will also chain, so that ladders of test-and-set
3076  // sequences can be if-converted away.
3077  //
3078  // We only deal with simple diamonds or triangles:
3079  //
3080  // PBI or PBI or a combination of the two
3081  // / \ | \
3082  // PTB PFB | PFB
3083  // \ / | /
3084  // QBI QBI
3085  // / \ | \
3086  // QTB QFB | QFB
3087  // \ / | /
3088  // PostBB PostBB
3089  //
3090  // We model triangles as a type of diamond with a nullptr "true" block.
3091  // Triangles are canonicalized so that the fallthrough edge is represented by
3092  // a true condition, as in the diagram above.
3093  BasicBlock *PTB = PBI->getSuccessor(0);
3094  BasicBlock *PFB = PBI->getSuccessor(1);
3095  BasicBlock *QTB = QBI->getSuccessor(0);
3096  BasicBlock *QFB = QBI->getSuccessor(1);
3097  BasicBlock *PostBB = QFB->getSingleSuccessor();
3098 
3099  // Make sure we have a good guess for PostBB. If QTB's only successor is
3100  // QFB, then QFB is a better PostBB.
3101  if (QTB->getSingleSuccessor() == QFB)
3102  PostBB = QFB;
3103 
3104  // If we couldn't find a good PostBB, stop.
3105  if (!PostBB)
3106  return false;
3107 
3108  bool InvertPCond = false, InvertQCond = false;
3109  // Canonicalize fallthroughs to the true branches.
3110  if (PFB == QBI->getParent()) {
3111  std::swap(PFB, PTB);
3112  InvertPCond = true;
3113  }
3114  if (QFB == PostBB) {
3115  std::swap(QFB, QTB);
3116  InvertQCond = true;
3117  }
3118 
3119  // From this point on we can assume PTB or QTB may be fallthroughs but PFB
3120  // and QFB may not. Model fallthroughs as a nullptr block.
3121  if (PTB == QBI->getParent())
3122  PTB = nullptr;
3123  if (QTB == PostBB)
3124  QTB = nullptr;
3125 
3126  // Legality bailouts. We must have at least the non-fallthrough blocks and
3127  // the post-dominating block, and the non-fallthroughs must only have one
3128  // predecessor.
3129  auto HasOnePredAndOneSucc = [](BasicBlock *BB, BasicBlock *P, BasicBlock *S) {
3130  return BB->getSinglePredecessor() == P && BB->getSingleSuccessor() == S;
3131  };
3132  if (!HasOnePredAndOneSucc(PFB, PBI->getParent(), QBI->getParent()) ||
3133  !HasOnePredAndOneSucc(QFB, QBI->getParent(), PostBB))
3134  return false;
3135  if ((PTB && !HasOnePredAndOneSucc(PTB, PBI->getParent(), QBI->getParent())) ||
3136  (QTB && !HasOnePredAndOneSucc(QTB, QBI->getParent(), PostBB)))
3137  return false;
3138  if (!QBI->getParent()->hasNUses(2))
3139  return false;
3140 
3141  // OK, this is a sequence of two diamonds or triangles.
3142  // Check if there are stores in PTB or PFB that are repeated in QTB or QFB.
3143  SmallPtrSet<Value *, 4> PStoreAddresses, QStoreAddresses;
3144  for (auto *BB : {PTB, PFB}) {
3145  if (!BB)
3146  continue;
3147  for (auto &I : *BB)
3148  if (StoreInst *SI = dyn_cast<StoreInst>(&I))
3149  PStoreAddresses.insert(SI->getPointerOperand());
3150  }
3151  for (auto *BB : {QTB, QFB}) {
3152  if (!BB)
3153  continue;
3154  for (auto &I : *BB)
3155  if (StoreInst *SI = dyn_cast<StoreInst>(&I))
3156  QStoreAddresses.insert(SI->getPointerOperand());
3157  }
3158 
3159  set_intersect(PStoreAddresses, QStoreAddresses);
3160  // set_intersect mutates PStoreAddresses in place. Rename it here to make it
3161  // clear what it contains.
3162  auto &CommonAddresses = PStoreAddresses;
3163 
3164  bool Changed = false;
3165  for (auto *Address : CommonAddresses)
3166  Changed |= mergeConditionalStoreToAddress(
3167  PTB, PFB, QTB, QFB, PostBB, Address, InvertPCond, InvertQCond, DL);
3168  return Changed;
3169 }
3170 
3171 /// If we have a conditional branch as a predecessor of another block,
3172 /// this function tries to simplify it. We know
3173 /// that PBI and BI are both conditional branches, and BI is in one of the
3174 /// successor blocks of PBI - PBI branches to BI.
3176  const DataLayout &DL) {
3177  assert(PBI->isConditional() && BI->isConditional());
3178  BasicBlock *BB = BI->getParent();
3179 
3180  // If this block ends with a branch instruction, and if there is a
3181  // predecessor that ends on a branch of the same condition, make
3182  // this conditional branch redundant.
3183  if (PBI->getCondition() == BI->getCondition() &&
3184  PBI->getSuccessor(0) != PBI->getSuccessor(1)) {
3185  // Okay, the outcome of this conditional branch is statically
3186  // knowable. If this block had a single pred, handle specially.
3187  if (BB->getSinglePredecessor()) {
3188  // Turn this into a branch on constant.
3189  bool CondIsTrue = PBI->getSuccessor(0) == BB;
3190  BI->setCondition(
3191  ConstantInt::get(Type::getInt1Ty(BB->getContext()), CondIsTrue));
3192  return true; // Nuke the branch on constant.
3193  }
3194 
3195  // Otherwise, if there are multiple predecessors, insert a PHI that merges
3196  // in the constant and simplify the block result. Subsequent passes of
3197  // simplifycfg will thread the block.
3199  pred_iterator PB = pred_begin(BB), PE = pred_end(BB);
3200  PHINode *NewPN = PHINode::Create(
3201  Type::getInt1Ty(BB->getContext()), std::distance(PB, PE),
3202  BI->getCondition()->getName() + ".pr", &BB->front());
3203  // Okay, we're going to insert the PHI node. Since PBI is not the only
3204  // predecessor, compute the PHI'd conditional value for all of the preds.
3205  // Any predecessor where the condition is not computable we keep symbolic.
3206  for (pred_iterator PI = PB; PI != PE; ++PI) {
3207  BasicBlock *P = *PI;
3208  if ((PBI = dyn_cast<BranchInst>(P->getTerminator())) && PBI != BI &&
3209  PBI->isConditional() && PBI->getCondition() == BI->getCondition() &&
3210  PBI->getSuccessor(0) != PBI->getSuccessor(1)) {
3211  bool CondIsTrue = PBI->getSuccessor(0) == BB;
3212  NewPN->addIncoming(
3213  ConstantInt::get(Type::getInt1Ty(BB->getContext()), CondIsTrue),
3214  P);
3215  } else {
3216  NewPN->addIncoming(BI->getCondition(), P);
3217  }
3218  }
3219 
3220  BI->setCondition(NewPN);
3221  return true;
3222  }
3223  }
3224 
3225  if (auto *CE = dyn_cast<ConstantExpr>(BI->getCondition()))
3226  if (CE->canTrap())
3227  return false;
3228 
3229  // If both branches are conditional and both contain stores to the same
3230  // address, remove the stores from the conditionals and create a conditional
3231  // merged store at the end.
3232  if (MergeCondStores && mergeConditionalStores(PBI, BI, DL))
3233  return true;
3234 
3235  // If this is a conditional branch in an empty block, and if any
3236  // predecessors are a conditional branch to one of our destinations,
3237  // fold the conditions into logical ops and one cond br.
3238 
3239  // Ignore dbg intrinsics.
3240  if (&*BB->instructionsWithoutDebug().begin() != BI)
3241  return false;
3242 
3243  int PBIOp, BIOp;
3244  if (PBI->getSuccessor(0) == BI->getSuccessor(0)) {
3245  PBIOp = 0;
3246  BIOp = 0;
3247  } else if (PBI->getSuccessor(0) == BI->getSuccessor(1)) {
3248  PBIOp = 0;
3249  BIOp = 1;
3250  } else if (PBI->getSuccessor(1) == BI->getSuccessor(0)) {
3251  PBIOp = 1;
3252  BIOp = 0;
3253  } else if (PBI->getSuccessor(1) == BI->getSuccessor(1)) {
3254  PBIOp = 1;
3255  BIOp = 1;
3256  } else {
3257  return false;
3258  }
3259 
3260  // Check to make sure that the other destination of this branch
3261  // isn't BB itself. If so, this is an infinite loop that will
3262  // keep getting unwound.
3263  if (PBI->getSuccessor(PBIOp) == BB)
3264  return false;
3265 
3266  // Do not perform this transformation if it would require
3267  // insertion of a large number of select instructions. For targets
3268  // without predication/cmovs, this is a big pessimization.
3269 
3270  // Also do not perform this transformation if any phi node in the common
3271  // destination block can trap when reached by BB or PBB (PR17073). In that
3272  // case, it would be unsafe to hoist the operation into a select instruction.
3273 
3274  BasicBlock *CommonDest = PBI->getSuccessor(PBIOp);
3275  unsigned NumPhis = 0;
3276  for (BasicBlock::iterator II = CommonDest->begin(); isa<PHINode>(II);
3277  ++II, ++NumPhis) {
3278  if (NumPhis > 2) // Disable this xform.
3279  return false;
3280 
3281  PHINode *PN = cast<PHINode>(II);
3282  Value *BIV = PN->getIncomingValueForBlock(BB);
3283  if (ConstantExpr *CE = dyn_cast<ConstantExpr>(BIV))
3284  if (CE->canTrap())
3285  return false;
3286 
3287  unsigned PBBIdx = PN->getBasicBlockIndex(PBI->getParent());
3288  Value *PBIV = PN->getIncomingValue(PBBIdx);
3289  if (ConstantExpr *CE = dyn_cast<ConstantExpr>(PBIV))
3290  if (CE->canTrap())
3291  return false;
3292  }
3293 
3294  // Finally, if everything is ok, fold the branches to logical ops.
3295  BasicBlock *OtherDest = BI->getSuccessor(BIOp ^ 1);
3296 
3297  LLVM_DEBUG(dbgs() << "FOLDING BRs:" << *PBI->getParent()
3298  << "AND: " << *BI->getParent());
3299 
3300  // If OtherDest *is* BB, then BB is a basic block with a single conditional
3301  // branch in it, where one edge (OtherDest) goes back to itself but the other
3302  // exits. We don't *know* that the program avoids the infinite loop
3303  // (even though that seems likely). If we do this xform naively, we'll end up
3304  // recursively unpeeling the loop. Since we know that (after the xform is
3305  // done) that the block *is* infinite if reached, we just make it an obviously
3306  // infinite loop with no cond branch.
3307  if (OtherDest == BB) {
3308  // Insert it at the end of the function, because it's either code,
3309  // or it won't matter if it's hot. :)
3310  BasicBlock *InfLoopBlock =
3311  BasicBlock::Create(BB->getContext(), "infloop", BB->getParent());
3312  BranchInst::Create(InfLoopBlock, InfLoopBlock);
3313  OtherDest = InfLoopBlock;
3314  }
3315 
3316  LLVM_DEBUG(dbgs() << *PBI->getParent()->getParent());
3317 
3318  // BI may have other predecessors. Because of this, we leave
3319  // it alone, but modify PBI.
3320 
3321  // Make sure we get to CommonDest on True&True directions.
3322  Value *PBICond = PBI->getCondition();
3323  IRBuilder<NoFolder> Builder(PBI);
3324  if (PBIOp)
3325  PBICond = Builder.CreateNot(PBICond, PBICond->getName() + ".not");
3326 
3327  Value *BICond = BI->getCondition();
3328  if (BIOp)
3329  BICond = Builder.CreateNot(BICond, BICond->getName() + ".not");
3330 
3331  // Merge the conditions.
3332  Value *Cond = Builder.CreateOr(PBICond, BICond, "brmerge");
3333 
3334  // Modify PBI to branch on the new condition to the new dests.
3335  PBI->setCondition(Cond);
3336  PBI->setSuccessor(0, CommonDest);
3337  PBI->setSuccessor(1, OtherDest);
3338 
3339  // Update branch weight for PBI.
3340  uint64_t PredTrueWeight, PredFalseWeight, SuccTrueWeight, SuccFalseWeight;
3341  uint64_t PredCommon, PredOther, SuccCommon, SuccOther;
3342  bool HasWeights =
3343  extractPredSuccWeights(PBI, BI, PredTrueWeight, PredFalseWeight,
3344  SuccTrueWeight, SuccFalseWeight);
3345  if (HasWeights) {
3346  PredCommon = PBIOp ? PredFalseWeight : PredTrueWeight;
3347  PredOther = PBIOp ? PredTrueWeight : PredFalseWeight;
3348  SuccCommon = BIOp ? SuccFalseWeight : SuccTrueWeight;
3349  SuccOther = BIOp ? SuccTrueWeight : SuccFalseWeight;
3350  // The weight to CommonDest should be PredCommon * SuccTotal +
3351  // PredOther * SuccCommon.
3352  // The weight to OtherDest should be PredOther * SuccOther.
3353  uint64_t NewWeights[2] = {PredCommon * (SuccCommon + SuccOther) +
3354  PredOther * SuccCommon,
3355  PredOther * SuccOther};
3356  // Halve the weights if any of them cannot fit in an uint32_t
3357  FitWeights(NewWeights);
3358 
3359  setBranchWeights(PBI, NewWeights[0], NewWeights[1]);
3360  }
3361 
3362  // OtherDest may have phi nodes. If so, add an entry from PBI's
3363  // block that are identical to the entries for BI's block.
3364  AddPredecessorToBlock(OtherDest, PBI->getParent(), BB);
3365 
3366  // We know that the CommonDest already had an edge from PBI to
3367  // it. If it has PHIs though, the PHIs may have different
3368  // entries for BB and PBI's BB. If so, insert a select to make
3369  // them agree.
3370  for (PHINode &PN : CommonDest->phis()) {
3371  Value *BIV = PN.getIncomingValueForBlock(BB);
3372  unsigned PBBIdx = PN.getBasicBlockIndex(PBI->getParent());
3373  Value *PBIV = PN.getIncomingValue(PBBIdx);
3374  if (BIV != PBIV) {
3375  // Insert a select in PBI to pick the right value.
3376  SelectInst *NV = cast<SelectInst>(
3377  Builder.CreateSelect(PBICond, PBIV, BIV, PBIV->getName() + ".mux"));
3378  PN.setIncomingValue(PBBIdx, NV);
3379  // Although the select has the same condition as PBI, the original branch
3380  // weights for PBI do not apply to the new select because the select's
3381  // 'logical' edges are incoming edges of the phi that is eliminated, not
3382  // the outgoing edges of PBI.
3383  if (HasWeights) {
3384  uint64_t PredCommon = PBIOp ? PredFalseWeight : PredTrueWeight;
3385  uint64_t PredOther = PBIOp ? PredTrueWeight : PredFalseWeight;
3386  uint64_t SuccCommon = BIOp ? SuccFalseWeight : SuccTrueWeight;
3387  uint64_t SuccOther = BIOp ? SuccTrueWeight : SuccFalseWeight;
3388  // The weight to PredCommonDest should be PredCommon * SuccTotal.
3389  // The weight to PredOtherDest should be PredOther * SuccCommon.
3390  uint64_t NewWeights[2] = {PredCommon * (SuccCommon + SuccOther),
3391  PredOther * SuccCommon};
3392 
3393  FitWeights(NewWeights);
3394 
3395  setBranchWeights(NV, NewWeights[0], NewWeights[1]);
3396  }
3397  }
3398  }
3399 
3400  LLVM_DEBUG(dbgs() << "INTO: " << *PBI->getParent());
3401  LLVM_DEBUG(dbgs() << *PBI->getParent()->getParent());
3402 
3403  // This basic block is probably dead. We know it has at least
3404  // one fewer predecessor.
3405  return true;
3406 }
3407 
3408 // Simplifies a terminator by replacing it with a branch to TrueBB if Cond is
3409 // true or to FalseBB if Cond is false.
3410 // Takes care of updating the successors and removing the old terminator.
3411 // Also makes sure not to introduce new successors by assuming that edges to
3412 // non-successor TrueBBs and FalseBBs aren't reachable.
3413 static bool SimplifyTerminatorOnSelect(Instruction *OldTerm, Value *Cond,
3414  BasicBlock *TrueBB, BasicBlock *FalseBB,
3415  uint32_t TrueWeight,
3416  uint32_t FalseWeight) {
3417  // Remove any superfluous successor edges from the CFG.
3418  // First, figure out which successors to preserve.
3419  // If TrueBB and FalseBB are equal, only try to preserve one copy of that
3420  // successor.
3421  BasicBlock *KeepEdge1 = TrueBB;
3422  BasicBlock *KeepEdge2 = TrueBB != FalseBB ? FalseBB : nullptr;
3423 
3424  // Then remove the rest.
3425  for (BasicBlock *Succ : successors(OldTerm)) {
3426  // Make sure only to keep exactly one copy of each edge.
3427  if (Succ == KeepEdge1)
3428  KeepEdge1 = nullptr;
3429  else if (Succ == KeepEdge2)
3430  KeepEdge2 = nullptr;
3431  else
3432  Succ->removePredecessor(OldTerm->getParent(),
3433  /*DontDeleteUselessPHIs=*/true);
3434  }
3435 
3436  IRBuilder<> Builder(OldTerm);
3437  Builder.SetCurrentDebugLocation(OldTerm->getDebugLoc());
3438 
3439  // Insert an appropriate new terminator.
3440  if (!KeepEdge1 && !KeepEdge2) {
3441  if (TrueBB == FalseBB)
3442  // We were only looking for one successor, and it was present.
3443  // Create an unconditional branch to it.
3444  Builder.CreateBr(TrueBB);
3445  else {
3446  // We found both of the successors we were looking for.
3447  // Create a conditional branch sharing the condition of the select.
3448  BranchInst *NewBI = Builder.CreateCondBr(Cond, TrueBB, FalseBB);
3449  if (TrueWeight != FalseWeight)
3450  setBranchWeights(NewBI, TrueWeight, FalseWeight);
3451  }
3452  } else if (KeepEdge1 && (KeepEdge2 || TrueBB == FalseBB)) {
3453  // Neither of the selected blocks were successors, so this
3454  // terminator must be unreachable.
3455  new UnreachableInst(OldTerm->getContext(), OldTerm);
3456  } else {
3457  // One of the selected values was a successor, but the other wasn't.
3458  // Insert an unconditional branch to the one that was found;
3459  // the edge to the one that wasn't must be unreachable.
3460  if (!KeepEdge1)
3461  // Only TrueBB was found.
3462  Builder.CreateBr(TrueBB);
3463  else
3464  // Only FalseBB was found.
3465  Builder.CreateBr(FalseBB);
3466  }
3467 
3468  EraseTerminatorAndDCECond(OldTerm);
3469  return true;
3470 }
3471 
3472 // Replaces
3473 // (switch (select cond, X, Y)) on constant X, Y
3474 // with a branch - conditional if X and Y lead to distinct BBs,
3475 // unconditional otherwise.
3477  // Check for constant integer values in the select.
3478  ConstantInt *TrueVal = dyn_cast<ConstantInt>(Select->getTrueValue());
3479  ConstantInt *FalseVal = dyn_cast<ConstantInt>(Select->getFalseValue());
3480  if (!TrueVal || !FalseVal)
3481  return false;
3482 
3483  // Find the relevant condition and destinations.
3484  Value *Condition = Select->getCondition();
3485  BasicBlock *TrueBB = SI->findCaseValue(TrueVal)->getCaseSuccessor();
3486  BasicBlock *FalseBB = SI->findCaseValue(FalseVal)->getCaseSuccessor();
3487 
3488  // Get weight for TrueBB and FalseBB.
3489  uint32_t TrueWeight = 0, FalseWeight = 0;
3490  SmallVector<uint64_t, 8> Weights;
3491  bool HasWeights = HasBranchWeights(SI);
3492  if (HasWeights) {
3493  GetBranchWeights(SI, Weights);
3494  if (Weights.size() == 1 + SI->getNumCases()) {
3495  TrueWeight =
3496  (uint32_t)Weights[SI->findCaseValue(TrueVal)->getSuccessorIndex()];
3497  FalseWeight =
3498  (uint32_t)Weights[SI->findCaseValue(FalseVal)->getSuccessorIndex()];
3499  }
3500  }
3501 
3502  // Perform the actual simplification.
3503  return SimplifyTerminatorOnSelect(SI, Condition, TrueBB, FalseBB, TrueWeight,
3504  FalseWeight);
3505 }
3506 
3507 // Replaces
3508 // (indirectbr (select cond, blockaddress(@fn, BlockA),
3509 // blockaddress(@fn, BlockB)))
3510 // with
3511 // (br cond, BlockA, BlockB).
3513  // Check that both operands of the select are block addresses.
3516  if (!TBA || !FBA)
3517  return false;
3518 
3519  // Extract the actual blocks.
3520  BasicBlock *TrueBB = TBA->getBasicBlock();
3521  BasicBlock *FalseBB = FBA->getBasicBlock();
3522 
3523  // Perform the actual simplification.
3524  return SimplifyTerminatorOnSelect(IBI, SI->getCondition(), TrueBB, FalseBB, 0,
3525  0);
3526 }
3527 
3528 /// This is called when we find an icmp instruction
3529 /// (a seteq/setne with a constant) as the only instruction in a
3530 /// block that ends with an uncond branch. We are looking for a very specific
3531 /// pattern that occurs when "A == 1 || A == 2 || A == 3" gets simplified. In
3532 /// this case, we merge the first two "or's of icmp" into a switch, but then the
3533 /// default value goes to an uncond block with a seteq in it, we get something
3534 /// like:
3535 ///
3536 /// switch i8 %A, label %DEFAULT [ i8 1, label %end i8 2, label %end ]
3537 /// DEFAULT:
3538 /// %tmp = icmp eq i8 %A, 92
3539 /// br label %end
3540 /// end:
3541 /// ... = phi i1 [ true, %entry ], [ %tmp, %DEFAULT ], [ true, %entry ]
3542 ///
3543 /// We prefer to split the edge to 'end' so that there is a true/false entry to
3544 /// the PHI, merging the third icmp into the switch.
3545 bool SimplifyCFGOpt::tryToSimplifyUncondBranchWithICmpInIt(
3546  ICmpInst *ICI, IRBuilder<> &Builder) {
3547  BasicBlock *BB = ICI->getParent();
3548 
3549  // If the block has any PHIs in it or the icmp has multiple uses, it is too
3550  // complex.
3551  if (isa<PHINode>(BB->begin()) || !ICI->hasOneUse())
3552  return false;
3553 
3554  Value *V = ICI->getOperand(0);
3555  ConstantInt *Cst = cast<ConstantInt>(ICI->getOperand(1));
3556 
3557  // The pattern we're looking for is where our only predecessor is a switch on
3558  // 'V' and this block is the default case for the switch. In this case we can
3559  // fold the compared value into the switch to simplify things.
3560  BasicBlock *Pred = BB->getSinglePredecessor();
3561  if (!Pred || !isa<SwitchInst>(Pred->getTerminator()))
3562  return false;
3563 
3564  SwitchInst *SI = cast<SwitchInst>(Pred->getTerminator());
3565  if (SI->getCondition() != V)
3566  return false;
3567 
3568  // If BB is reachable on a non-default case, then we simply know the value of
3569  // V in this block. Substitute it and constant fold the icmp instruction
3570  // away.
3571  if (SI->getDefaultDest() != BB) {
3572  ConstantInt *VVal = SI->findCaseDest(BB);
3573  assert(VVal && "Should have a unique destination value");
3574  ICI->setOperand(0, VVal);
3575 
3576  if (Value *V = SimplifyInstruction(ICI, {DL, ICI})) {
3577  ICI->replaceAllUsesWith(V);
3578  ICI->eraseFromParent();
3579  }
3580  // BB is now empty, so it is likely to simplify away.
3581  return requestResimplify();
3582  }
3583 
3584  // Ok, the block is reachable from the default dest. If the constant we're
3585  // comparing exists in one of the other edges, then we can constant fold ICI
3586  // and zap it.
3587  if (SI->findCaseValue(Cst) != SI->case_default()) {
3588  Value *V;
3589  if (ICI->getPredicate() == ICmpInst::ICMP_EQ)
3590  V = ConstantInt::getFalse(BB->getContext());
3591  else
3592  V = ConstantInt::getTrue(BB->getContext());
3593 
3594  ICI->replaceAllUsesWith(V);
3595  ICI->eraseFromParent();
3596  // BB is now empty, so it is likely to simplify away.
3597  return requestResimplify();
3598  }
3599 
3600  // The use of the icmp has to be in the 'end' block, by the only PHI node in
3601  // the block.
3602  BasicBlock *SuccBlock = BB->getTerminator()->getSuccessor(0);
3603  PHINode *PHIUse = dyn_cast<PHINode>(ICI->user_back());
3604  if (PHIUse == nullptr || PHIUse != &SuccBlock->front() ||
3605  isa<PHINode>(++BasicBlock::iterator(PHIUse)))
3606  return false;
3607 
3608  // If the icmp is a SETEQ, then the default dest gets false, the new edge gets
3609  // true in the PHI.
3610  Constant *DefaultCst = ConstantInt::getTrue(BB->getContext());
3611  Constant *NewCst = ConstantInt::getFalse(BB->getContext());
3612 
3613  if (ICI->getPredicate() == ICmpInst::ICMP_EQ)
3614  std::swap(DefaultCst, NewCst);
3615 
3616  // Replace ICI (which is used by the PHI for the default value) with true or
3617  // false depending on if it is EQ or NE.
3618  ICI->replaceAllUsesWith(DefaultCst);
3619  ICI->eraseFromParent();
3620 
3621  // Okay, the switch goes to this block on a default value. Add an edge from
3622  // the switch to the merge point on the compared value.
3623  BasicBlock *NewBB =
3624  BasicBlock::Create(BB->getContext(), "switch.edge", BB->getParent(), BB);
3625  SmallVector<uint64_t, 8> Weights;
3626  bool HasWeights = HasBranchWeights(SI);
3627  if (HasWeights) {
3628  GetBranchWeights(SI, Weights);
3629  if (Weights.size() == 1 + SI->getNumCases()) {
3630  // Split weight for default case to case for "Cst".
3631  Weights[0] = (Weights[0] + 1) >> 1;
3632  Weights.push_back(Weights[0]);
3633 
3634  SmallVector<uint32_t, 8> MDWeights(Weights.begin(), Weights.end());
3635  setBranchWeights(SI, MDWeights);
3636  }
3637  }
3638  SI->addCase(Cst, NewBB);
3639 
3640  // NewBB branches to the phi block, add the uncond branch and the phi entry.
3641  Builder.SetInsertPoint(NewBB);
3642  Builder.SetCurrentDebugLocation(SI->getDebugLoc());
3643  Builder.CreateBr(SuccBlock);
3644  PHIUse->addIncoming(NewCst, NewBB);
3645  return true;
3646 }
3647 
3648 /// The specified branch is a conditional branch.
3649 /// Check to see if it is branching on an or/and chain of icmp instructions, and
3650 /// fold it into a switch instruction if so.
3652  const DataLayout &DL) {
3653  Instruction *Cond = dyn_cast<Instruction>(BI->getCondition());
3654  if (!Cond)
3655  return false;
3656 
3657  // Change br (X == 0 | X == 1), T, F into a switch instruction.
3658  // If this is a bunch of seteq's or'd together, or if it's a bunch of
3659  // 'setne's and'ed together, collect them.
3660 
3661  // Try to gather values from a chain of and/or to be turned into a switch
3662  ConstantComparesGatherer ConstantCompare(Cond, DL);
3663  // Unpack the result
3664  SmallVectorImpl<ConstantInt *> &Values = ConstantCompare.Vals;
3665  Value *CompVal = ConstantCompare.CompValue;
3666  unsigned UsedICmps = ConstantCompare.UsedICmps;
3667  Value *ExtraCase = ConstantCompare.Extra;
3668 
3669  // If we didn't have a multiply compared value, fail.
3670  if (!CompVal)
3671  return false;
3672 
3673  // Avoid turning single icmps into a switch.
3674  if (UsedICmps <= 1)
3675  return false;
3676 
3677  bool TrueWhenEqual = (Cond->getOpcode() == Instruction::Or);
3678 
3679  // There might be duplicate constants in the list, which the switch
3680  // instruction can't handle, remove them now.
3681  array_pod_sort(Values.begin(), Values.end(), ConstantIntSortPredicate);
3682  Values.erase(std::unique(Values.begin(), Values.end()), Values.end());
3683 
3684  // If Extra was used, we require at least two switch values to do the
3685  // transformation. A switch with one value is just a conditional branch.
3686  if (ExtraCase && Values.size() < 2)
3687  return false;
3688 
3689  // TODO: Preserve branch weight metadata, similarly to how
3690  // FoldValueComparisonIntoPredecessors preserves it.
3691 
3692  // Figure out which block is which destination.
3693  BasicBlock *DefaultBB = BI->getSuccessor(1);
3694  BasicBlock *EdgeBB = BI->getSuccessor(0);
3695  if (!TrueWhenEqual)
3696  std::swap(DefaultBB, EdgeBB);
3697 
3698  BasicBlock *BB = BI->getParent();
3699 
3700  LLVM_DEBUG(dbgs() << "Converting 'icmp' chain with " << Values.size()
3701  << " cases into SWITCH. BB is:\n"
3702  << *BB);
3703 
3704  // If there are any extra values that couldn't be folded into the switch
3705  // then we evaluate them with an explicit branch first. Split the block
3706  // right before the condbr to handle it.
3707  if (ExtraCase) {
3708  BasicBlock *NewBB =
3709  BB->splitBasicBlock(BI->getIterator(), "switch.early.test");
3710  // Remove the uncond branch added to the old block.
3711  Instruction *OldTI = BB->getTerminator();
3712  Builder.SetInsertPoint(OldTI);
3713 
3714  if (TrueWhenEqual)
3715  Builder.CreateCondBr(ExtraCase, EdgeBB, NewBB);
3716  else
3717  Builder.CreateCondBr(ExtraCase, NewBB, EdgeBB);
3718 
3719  OldTI->eraseFromParent();
3720 
3721  // If there are PHI nodes in EdgeBB, then we need to add a new entry to them
3722  // for the edge we just added.
3723  AddPredecessorToBlock(EdgeBB, BB, NewBB);
3724 
3725  LLVM_DEBUG(dbgs() << " ** 'icmp' chain unhandled condition: " << *ExtraCase
3726  << "\nEXTRABB = " << *BB);
3727  BB = NewBB;
3728  }
3729 
3730  Builder.SetInsertPoint(BI);
3731  // Convert pointer to int before we switch.
3732  if (CompVal->getType()->isPointerTy()) {
3733  CompVal = Builder.CreatePtrToInt(
3734  CompVal, DL.getIntPtrType(CompVal->getType()), "magicptr");
3735  }
3736 
3737  // Create the new switch instruction now.
3738  SwitchInst *New = Builder.CreateSwitch(CompVal, DefaultBB, Values.size());
3739 
3740  // Add all of the 'cases' to the switch instruction.
3741  for (unsigned i = 0, e = Values.size(); i != e; ++i)
3742  New->addCase(Values[i], EdgeBB);
3743 
3744  // We added edges from PI to the EdgeBB. As such, if there were any
3745  // PHI nodes in EdgeBB, they need entries to be added corresponding to
3746  // the number of edges added.
3747  for (BasicBlock::iterator BBI = EdgeBB->begin(); isa<PHINode>(BBI); ++BBI) {
3748  PHINode *PN = cast<PHINode>(BBI);
3749  Value *InVal = PN->getIncomingValueForBlock(BB);
3750  for (unsigned i = 0, e = Values.size() - 1; i != e; ++i)
3751  PN->addIncoming(InVal, BB);
3752  }
3753 
3754  // Erase the old branch instruction.
3756 
3757  LLVM_DEBUG(dbgs() << " ** 'icmp' chain result is:\n" << *BB << '\n');
3758  return true;
3759 }
3760 
3761 bool SimplifyCFGOpt::SimplifyResume(ResumeInst *RI, IRBuilder<> &Builder) {
3762  if (isa<PHINode>(RI->getValue()))
3763  return SimplifyCommonResume(RI);
3764  else if (isa<LandingPadInst>(RI->getParent()->getFirstNonPHI()) &&
3765  RI->getValue() == RI->getParent()->getFirstNonPHI())
3766  // The resume must unwind the exception that caused control to branch here.
3767  return SimplifySingleResume(RI);
3768 
3769  return false;
3770 }
3771 
3772 // Simplify resume that is shared by several landing pads (phi of landing pad).
3773 bool SimplifyCFGOpt::SimplifyCommonResume(ResumeInst *RI) {
3774  BasicBlock *BB = RI->getParent();
3775 
3776  // Check that there are no other instructions except for debug intrinsics
3777  // between the phi of landing pads (RI->getValue()) and resume instruction.
3778  BasicBlock::iterator I = cast<Instruction>(RI->getValue())->getIterator(),
3779  E = RI->getIterator();
3780  while (++I != E)
3781  if (!isa<DbgInfoIntrinsic>(I))
3782  return false;
3783 
3784  SmallSetVector<BasicBlock *, 4> TrivialUnwindBlocks;
3785  auto *PhiLPInst = cast<PHINode>(RI->getValue());
3786 
3787  // Check incoming blocks to see if any of them are trivial.
3788  for (unsigned Idx = 0, End = PhiLPInst->getNumIncomingValues(); Idx != End;
3789  Idx++) {
3790  auto *IncomingBB = PhiLPInst->getIncomingBlock(Idx);
3791  auto *IncomingValue = PhiLPInst->getIncomingValue(Idx);
3792 
3793  // If the block has other successors, we can not delete it because
3794  // it has other dependents.
3795  if (IncomingBB->getUniqueSuccessor() != BB)
3796  continue;
3797 
3798  auto *LandingPad = dyn_cast<LandingPadInst>(IncomingBB->getFirstNonPHI());
3799  // Not the landing pad that caused the control to branch here.
3800  if (IncomingValue != LandingPad)
3801  continue;
3802 
3803  bool isTrivial = true;
3804 
3805  I = IncomingBB->getFirstNonPHI()->getIterator();
3806  E = IncomingBB->getTerminator()->getIterator();
3807  while (++I != E)
3808  if (!isa<DbgInfoIntrinsic>(I)) {
3809  isTrivial = false;
3810  break;
3811  }
3812 
3813  if (isTrivial)
3814  TrivialUnwindBlocks.insert(IncomingBB);
3815  }
3816 
3817  // If no trivial unwind blocks, don't do any simplifications.
3818  if (TrivialUnwindBlocks.empty())
3819  return false;
3820 
3821  // Turn all invokes that unwind here into calls.
3822  for (auto *TrivialBB : TrivialUnwindBlocks) {
3823  // Blocks that will be simplified should be removed from the phi node.
3824  // Note there could be multiple edges to the resume block, and we need
3825  // to remove them all.
3826  while (PhiLPInst->getBasicBlockIndex(TrivialBB) != -1)
3827  BB->removePredecessor(TrivialBB, true);
3828 
3829  for (pred_iterator PI = pred_begin(TrivialBB), PE = pred_end(TrivialBB);
3830  PI != PE;) {
3831  BasicBlock *Pred = *PI++;
3832  removeUnwindEdge(Pred);
3833  }
3834 
3835  // In each SimplifyCFG run, only the current processed block can be erased.
3836  // Otherwise, it will break the iteration of SimplifyCFG pass. So instead
3837  // of erasing TrivialBB, we only remove the branch to the common resume
3838  // block so that we can later erase the resume block since it has no
3839  // predecessors.
3840  TrivialBB->getTerminator()->eraseFromParent();
3841  new UnreachableInst(RI->getContext(), TrivialBB);
3842  }
3843 
3844  // Delete the resume block if all its predecessors have been removed.
3845  if (pred_empty(BB))
3846  BB->eraseFromParent();
3847 
3848  return !TrivialUnwindBlocks.empty();
3849 }
3850 
3851 // Simplify resume that is only used by a single (non-phi) landing pad.
3852 bool SimplifyCFGOpt::SimplifySingleResume(ResumeInst *RI) {
3853  BasicBlock *BB = RI->getParent();
3855  assert(RI->getValue() == LPInst &&
3856  "Resume must unwind the exception that caused control to here");
3857 
3858  // Check that there are no other instructions except for debug intrinsics.
3859  BasicBlock::iterator I = LPInst->getIterator(), E = RI->getIterator();
3860  while (++I != E)
3861  if (!isa<DbgInfoIntrinsic>(I))
3862  return false;
3863 
3864  // Turn all invokes that unwind here into calls and delete the basic block.
3865  for (pred_iterator PI = pred_begin(BB), PE = pred_end(BB); PI != PE;) {
3866  BasicBlock *Pred = *PI++;
3867  removeUnwindEdge(Pred);
3868  }
3869 
3870  // The landingpad is now unreachable. Zap it.
3871  if (LoopHeaders)
3872  LoopHeaders->erase(BB);
3873  BB->eraseFromParent();
3874  return true;
3875 }
3876 
3878  // If this is a trivial cleanup pad that executes no instructions, it can be
3879  // eliminated. If the cleanup pad continues to the caller, any predecessor
3880  // that is an EH pad will be updated to continue to the caller and any
3881  // predecessor that terminates with an invoke instruction will have its invoke
3882  // instruction converted to a call instruction. If the cleanup pad being
3883  // simplified does not continue to the caller, each predecessor will be
3884  // updated to continue to the unwind destination of the cleanup pad being
3885  // simplified.
3886  BasicBlock *BB = RI->getParent();
3887  CleanupPadInst *CPInst = RI->getCleanupPad();
3888  if (CPInst->getParent() != BB)
3889  // This isn't an empty cleanup.
3890  return false;
3891 
3892  // We cannot kill the pad if it has multiple uses. This typically arises
3893  // from unreachable basic blocks.
3894  if (!CPInst->hasOneUse())
3895  return false;
3896 
3897  // Check that there are no other instructions except for benign intrinsics.
3898  BasicBlock::iterator I = CPInst->getIterator(), E = RI->getIterator();
3899  while (++I != E) {
3900  auto *II = dyn_cast<IntrinsicInst>(I);
3901  if (!II)
3902  return false;
3903 
3904  Intrinsic::ID IntrinsicID = II->getIntrinsicID();
3905  switch (IntrinsicID) {
3907  case Intrinsic::dbg_value:
3908  case Intrinsic::dbg_label:
3910  break;
3911  default:
3912  return false;
3913  }
3914  }
3915 
3916  // If the cleanup return we are simplifying unwinds to the caller, this will
3917  // set UnwindDest to nullptr.
3918  BasicBlock *UnwindDest = RI->getUnwindDest();
3919  Instruction *DestEHPad = UnwindDest ? UnwindDest->getFirstNonPHI() : nullptr;
3920 
3921  // We're about to remove BB from the control flow. Before we do, sink any
3922  // PHINodes into the unwind destination. Doing this before changing the
3923  // control flow avoids some potentially slow checks, since we can currently
3924  // be certain that UnwindDest and BB have no common predecessors (since they
3925  // are both EH pads).
3926  if (UnwindDest) {
3927  // First, go through the PHI nodes in UnwindDest and update any nodes that
3928  // reference the block we are removing
3929  for (BasicBlock::iterator I = UnwindDest->begin(),
3930  IE = DestEHPad->getIterator();
3931  I != IE; ++I) {
3932  PHINode *DestPN = cast<PHINode>(I);
3933 
3934  int Idx = DestPN->getBasicBlockIndex(BB);
3935  // Since BB unwinds to UnwindDest, it has to be in the PHI node.
3936  assert(Idx != -1);
3937  // This PHI node has an incoming value that corresponds to a control
3938  // path through the cleanup pad we are removing. If the incoming
3939  // value is in the cleanup pad, it must be a PHINode (because we
3940  // verified above that the block is otherwise empty). Otherwise, the
3941  // value is either a constant or a value that dominates the cleanup
3942  // pad being removed.
3943  //
3944  // Because BB and UnwindDest are both EH pads, all of their
3945  // predecessors must unwind to these blocks, and since no instruction
3946  // can have multiple unwind destinations, there will be no overlap in
3947  // incoming blocks between SrcPN and DestPN.
3948  Value *SrcVal = DestPN->getIncomingValue(Idx);
3949  PHINode *SrcPN = dyn_cast<PHINode>(SrcVal);
3950 
3951  // Remove the entry for the block we are deleting.
3952  DestPN->removeIncomingValue(Idx, false);
3953 
3954  if (SrcPN && SrcPN->getParent() == BB) {
3955  // If the incoming value was a PHI node in the cleanup pad we are
3956  // removing, we need to merge that PHI node's incoming values into
3957  // DestPN.
3958  for (unsigned SrcIdx = 0, SrcE = SrcPN->getNumIncomingValues();
3959  SrcIdx != SrcE; ++SrcIdx) {
3960  DestPN->addIncoming(SrcPN->getIncomingValue(SrcIdx),
3961  SrcPN->getIncomingBlock(SrcIdx));
3962  }
3963  } else {
3964  // Otherwise, the incoming value came from above BB and
3965  // so we can just reuse it. We must associate all of BB's
3966  // predecessors with this value.
3967  for (auto *pred : predecessors(BB)) {
3968  DestPN->addIncoming(SrcVal, pred);
3969  }
3970  }
3971  }
3972 
3973  // Sink any remaining PHI nodes directly into UnwindDest.
3974  Instruction *InsertPt = DestEHPad;
3975  for (BasicBlock::iterator I = BB->begin(),
3976  IE = BB->getFirstNonPHI()->getIterator();
3977  I != IE;) {
3978  // The iterator must be incremented here because the instructions are
3979  // being moved to another block.
3980  PHINode *PN = cast<PHINode>(I++);
3981  if (PN->use_empty())
3982  // If the PHI node has no uses, just leave it. It will be erased
3983  // when we erase BB below.
3984  continue;
3985 
3986  // Otherwise, sink this PHI node into UnwindDest.
3987  // Any predecessors to UnwindDest which are not already represented
3988  // must be back edges which inherit the value from the path through
3989  // BB. In this case, the PHI value must reference itself.
3990  for (auto *pred : predecessors(UnwindDest))
3991  if (pred != BB)
3992  PN->addIncoming(PN, pred);
3993  PN->moveBefore(InsertPt);
3994  }
3995  }
3996 
3997  for (pred_iterator PI = pred_begin(BB), PE = pred_end(BB); PI != PE;) {
3998  // The iterator must be updated here because we are removing this pred.
3999  BasicBlock *PredBB = *PI++;
4000  if (UnwindDest == nullptr) {
4001  removeUnwindEdge(PredBB);
4002  } else {
4003  Instruction *TI = PredBB->getTerminator();
4004  TI->replaceUsesOfWith(BB, UnwindDest);
4005  }
4006  }
4007 
4008  // The cleanup pad is now unreachable. Zap it.
4009  BB->eraseFromParent();
4010  return true;
4011 }
4012 
4013 // Try to merge two cleanuppads together.
4015  // Skip any cleanuprets which unwind to caller, there is nothing to merge
4016  // with.
4017  BasicBlock *UnwindDest = RI->getUnwindDest();
4018  if (!UnwindDest)
4019  return false;
4020 
4021  // This cleanupret isn't the only predecessor of this cleanuppad, it wouldn't
4022  // be safe to merge without code duplication.
4023  if (UnwindDest->getSinglePredecessor() != RI->getParent())
4024  return false;
4025 
4026  // Verify that our cleanuppad's unwind destination is another cleanuppad.
4027  auto *SuccessorCleanupPad = dyn_cast<CleanupPadInst>(&UnwindDest->front());
4028  if (!SuccessorCleanupPad)
4029  return false;
4030 
4031  CleanupPadInst *PredecessorCleanupPad = RI->getCleanupPad();
4032  // Replace any uses of the successor cleanupad with the predecessor pad
4033  // The only cleanuppad uses should be this cleanupret, it's cleanupret and
4034  // funclet bundle operands.
4035  SuccessorCleanupPad->replaceAllUsesWith(PredecessorCleanupPad);
4036  // Remove the old cleanuppad.
4037  SuccessorCleanupPad->eraseFromParent();
4038  // Now, we simply replace the cleanupret with a branch to the unwind
4039  // destination.
4040  BranchInst::Create(UnwindDest, RI->getParent());
4041  RI->eraseFromParent();
4042 
4043  return true;
4044 }
4045 
4046 bool SimplifyCFGOpt::SimplifyCleanupReturn(CleanupReturnInst *RI) {
4047  // It is possible to transiantly have an undef cleanuppad operand because we
4048  // have deleted some, but not all, dead blocks.
4049  // Eventually, this block will be deleted.
4050  if (isa<UndefValue>(RI->getOperand(0)))
4051  return false;
4052 
4053  if (mergeCleanupPad(RI))
4054  return true;
4055 
4056  if (removeEmptyCleanup(RI))
4057  return true;
4058 
4059  return false;
4060 }
4061 
4062 bool SimplifyCFGOpt::SimplifyReturn(ReturnInst *RI, IRBuilder<> &Builder) {
4063  BasicBlock *BB = RI->getParent();
4064  if (!BB->getFirstNonPHIOrDbg()->isTerminator())
4065  return false;
4066 
4067  // Find predecessors that end with branches.
4068  SmallVector<BasicBlock *, 8> UncondBranchPreds;
4069  SmallVector<BranchInst *, 8> CondBranchPreds;
4070  for (pred_iterator PI = pred_begin(BB), E = pred_end(BB); PI != E; ++PI) {
4071  BasicBlock *P = *PI;
4072  Instruction *PTI = P->getTerminator();
4073  if (BranchInst *BI = dyn_cast<BranchInst>(PTI)) {
4074  if (BI->isUnconditional())
4075  UncondBranchPreds.push_back(P);
4076  else
4077  CondBranchPreds.push_back(BI);
4078  }
4079  }
4080 
4081  // If we found some, do the transformation!
4082  if (!UncondBranchPreds.empty() && DupRet) {
4083  while (!UncondBranchPreds.empty()) {
4084  BasicBlock *Pred = UncondBranchPreds.pop_back_val();
4085  LLVM_DEBUG(dbgs() << "FOLDING: " << *BB
4086  << "INTO UNCOND BRANCH PRED: " << *Pred);
4087  (void)FoldReturnIntoUncondBranch(RI, BB, Pred);
4088  }
4089 
4090  // If we eliminated all predecessors of the block, delete the block now.
4091  if (pred_empty(BB)) {
4092  // We know there are no successors, so just nuke the block.
4093  if (LoopHeaders)
4094  LoopHeaders->erase(BB);
4095  BB->eraseFromParent();
4096  }
4097 
4098  return true;
4099  }
4100 
4101  // Check out all of the conditional branches going to this return
4102  // instruction. If any of them just select between returns, change the
4103  // branch itself into a select/return pair.
4104  while (!CondBranchPreds.empty()) {
4105  BranchInst *BI = CondBranchPreds.pop_back_val();
4106 
4107  // Check to see if the non-BB successor is also a return block.
4108  if (isa<ReturnInst>(BI->getSuccessor(0)->getTerminator()) &&
4109  isa<ReturnInst>(BI->getSuccessor(1)->getTerminator()) &&
4110  SimplifyCondBranchToTwoReturns(BI, Builder))
4111  return true;
4112  }
4113  return false;
4114 }
4115 
4116 bool SimplifyCFGOpt::SimplifyUnreachable(UnreachableInst *UI) {
4117  BasicBlock *BB = UI->getParent();
4118 
4119  bool Changed = false;
4120 
4121  // If there are any instructions immediately before the unreachable that can
4122  // be removed, do so.
4123  while (UI->getIterator() != BB->begin()) {
4124  BasicBlock::iterator BBI = UI->getIterator();
4125  --BBI;
4126  // Do not delete instructions that can have side effects which might cause
4127  // the unreachable to not be reachable; specifically, calls and volatile
4128  // operations may have this effect.
4129  if (isa<CallInst>(BBI) && !isa<DbgInfoIntrinsic>(BBI))
4130  break;
4131 
4132  if (BBI->mayHaveSideEffects()) {
4133  if (auto *SI = dyn_cast<StoreInst>(BBI)) {
4134  if (SI->isVolatile())
4135  break;
4136  } else if (auto *LI = dyn_cast<LoadInst>(BBI)) {
4137  if (LI->isVolatile())
4138  break;
4139  } else if (auto *RMWI = dyn_cast<AtomicRMWInst>(BBI)) {
4140  if (RMWI->isVolatile())
4141  break;
4142  } else if (auto *CXI = dyn_cast<AtomicCmpXchgInst>(BBI)) {
4143  if (CXI->isVolatile())
4144  break;
4145  } else if (isa<CatchPadInst>(BBI)) {
4146  // A catchpad may invoke exception object constructors and such, which
4147  // in some languages can be arbitrary code, so be conservative by
4148  // default.
4149  // For CoreCLR, it just involves a type test, so can be removed.
4152  break;
4153  } else if (!isa<FenceInst>(BBI) && !isa<VAArgInst>(BBI) &&
4154  !isa<LandingPadInst>(BBI)) {
4155  break;
4156  }
4157  // Note that deleting LandingPad's here is in fact okay, although it
4158  // involves a bit of subtle reasoning. If this inst is a LandingPad,
4159  // all the predecessors of this block will be the unwind edges of Invokes,
4160  // and we can therefore guarantee this block will be erased.
4161  }
4162 
4163  // Delete this instruction (any uses are guaranteed to be dead)
4164  if (!BBI->use_empty())
4165  BBI->replaceAllUsesWith(UndefValue::get(BBI->getType()));
4166  BBI->eraseFromParent();
4167  Changed = true;
4168  }
4169 
4170  // If the unreachable instruction is the first in the block, take a gander
4171  // at all of the predecessors of this instruction, and simplify them.
4172  if (&BB->front() != UI)
4173  return Changed;
4174 
4176  for (unsigned i = 0, e = Preds.size(); i != e; ++i) {
4177  Instruction *TI = Preds[i]->getTerminator();
4178  IRBuilder<> Builder(TI);
4179  if (auto *BI = dyn_cast<BranchInst>(TI)) {
4180  if (BI->isUnconditional()) {
4181  if (BI->getSuccessor(0) == BB) {
4182  new UnreachableInst(TI->getContext(), TI);
4183  TI->eraseFromParent();
4184  Changed = true;
4185  }
4186  } else {
4187  if (BI->getSuccessor(0) == BB) {
4188  Builder.CreateBr(BI->getSuccessor(1));
4190  } else if (BI->getSuccessor(1) == BB) {
4191  Builder.CreateBr(BI->getSuccessor(0));
4193  Changed = true;
4194  }
4195  }
4196  } else if (auto *SI = dyn_cast<SwitchInst>(TI)) {
4197  for (auto i = SI->case_begin(), e = SI->case_end(); i != e;) {
4198  if (i->getCaseSuccessor() != BB) {
4199  ++i;
4200  continue;
4201  }
4202  BB->removePredecessor(SI->getParent());
4203  i = SI->removeCase(i);
4204  e = SI->case_end();
4205  Changed = true;
4206  }
4207  } else if (auto *II = dyn_cast<InvokeInst>(TI)) {
4208  if (II->getUnwindDest() == BB) {
4209  removeUnwindEdge(TI->getParent());
4210  Changed = true;
4211  }
4212  } else if (auto *CSI = dyn_cast<CatchSwitchInst>(TI)) {
4213  if (CSI->getUnwindDest() == BB) {
4214  removeUnwindEdge(TI->getParent());
4215  Changed = true;
4216  continue;
4217  }
4218 
4219  for (CatchSwitchInst::handler_iterator I = CSI->handler_begin(),
4220  E = CSI->handler_end();
4221  I != E; ++I) {
4222  if (*I == BB) {
4223  CSI->removeHandler(I);
4224  --I;
4225  --E;
4226  Changed = true;
4227  }
4228  }
4229  if (CSI->getNumHandlers() == 0) {
4230  BasicBlock *CatchSwitchBB = CSI->getParent();
4231  if (CSI->hasUnwindDest()) {
4232  // Redirect preds to the unwind dest
4233  CatchSwitchBB->replaceAllUsesWith(CSI->getUnwindDest());
4234  } else {
4235  // Rewrite all preds to unwind to caller (or from invoke to call).
4236  SmallVector<BasicBlock *, 8> EHPreds(predecessors(CatchSwitchBB));
4237  for (BasicBlock *EHPred : EHPreds)
4238  removeUnwindEdge(EHPred);
4239  }
4240  // The catchswitch is no longer reachable.
4241  new UnreachableInst(CSI->getContext(), CSI);
4242  CSI->eraseFromParent();
4243  Changed = true;
4244  }
4245  } else if (isa<CleanupReturnInst>(TI)) {
4246  new UnreachableInst(TI->getContext(), TI);
4247  TI->eraseFromParent();
4248  Changed = true;
4249  }
4250  }
4251 
4252  // If this block is now dead, remove it.
4253  if (pred_empty(BB) && BB != &BB->getParent()->getEntryBlock()) {
4254  // We know there are no successors, so just nuke the block.
4255  if (LoopHeaders)
4256  LoopHeaders->erase(BB);
4257  BB->eraseFromParent();
4258  return true;
4259  }
4260 
4261  return Changed;
4262 }
4263 
4265  assert(Cases.size() >= 1);
4266 
4267  array_pod_sort(Cases.begin(), Cases.end(), ConstantIntSortPredicate);
4268  for (size_t I = 1, E = Cases.size(); I != E; ++I) {
4269  if (Cases[I - 1]->getValue() != Cases[I]->getValue() + 1)
4270  return false;
4271  }
4272  return true;
4273 }
4274 
4275 /// Turn a switch with two reachable destinations into an integer range
4276 /// comparison and branch.
4278  assert(SI->getNumCases() > 1 && "Degenerate switch?");
4279 
4280  bool HasDefault =
4281  !isa<UnreachableInst>(SI->getDefaultDest()->getFirstNonPHIOrDbg());
4282 
4283  // Partition the cases into two sets with different destinations.
4284  BasicBlock *DestA = HasDefault ? SI->getDefaultDest() : nullptr;
4285  BasicBlock *DestB = nullptr;
4288 
4289  for (auto Case : SI->cases()) {
4290  BasicBlock *Dest = Case.getCaseSuccessor();
4291  if (!DestA)
4292  DestA = Dest;
4293  if (Dest == DestA) {
4294  CasesA.push_back(Case.getCaseValue());
4295  continue;
4296  }
4297  if (!DestB)
4298  DestB = Dest;
4299  if (Dest == DestB) {
4300  CasesB.push_back(Case.getCaseValue());
4301  continue;
4302  }
4303  return false; // More than two destinations.
4304  }
4305 
4306  assert(DestA && DestB &&
4307  "Single-destination switch should have been folded.");
4308  assert(DestA != DestB);
4309  assert(DestB != SI->getDefaultDest());
4310  assert(!CasesB.empty() && "There must be non-default cases.");
4311  assert(!CasesA.empty() || HasDefault);
4312 
4313  // Figure out if one of the sets of cases form a contiguous range.
4314  SmallVectorImpl<ConstantInt *> *ContiguousCases = nullptr;
4315  BasicBlock *ContiguousDest = nullptr;
4316  BasicBlock *OtherDest = nullptr;
4317  if (!CasesA.empty() && CasesAreContiguous(CasesA)) {
4318  ContiguousCases = &CasesA;
4319  ContiguousDest = DestA;
4320  OtherDest = DestB;
4321  } else if (CasesAreContiguous(CasesB)) {
4322  ContiguousCases = &CasesB;
4323  ContiguousDest = DestB;
4324  OtherDest = DestA;
4325  } else
4326  return false;
4327 
4328  // Start building the compare and branch.
4329 
4330  Constant *Offset = ConstantExpr::getNeg(ContiguousCases->back());
4331  Constant *NumCases =
4332  ConstantInt::get(Offset->getType(), ContiguousCases->size());
4333 
4334  Value *Sub = SI->getCondition();
4335  if (!Offset->isNullValue())
4336  Sub = Builder.CreateAdd(Sub, Offset, Sub->getName() + ".off");
4337 
4338  Value *Cmp;
4339  // If NumCases overflowed, then all possible values jump to the successor.
4340  if (NumCases->isNullValue() && !ContiguousCases->empty())
4341  Cmp = ConstantInt::getTrue(SI->getContext());
4342  else
4343  Cmp = Builder.CreateICmpULT(Sub, NumCases, "switch");
4344  BranchInst *NewBI = Builder.CreateCondBr(Cmp, ContiguousDest, OtherDest);
4345 
4346  // Update weight for the newly-created conditional branch.
4347  if (HasBranchWeights(SI)) {
4348  SmallVector<uint64_t, 8> Weights;
4349  GetBranchWeights(SI, Weights);
4350  if (Weights.size() == 1 + SI->getNumCases()) {
4351  uint64_t TrueWeight = 0;
4352  uint64_t FalseWeight = 0;
4353  for (size_t I = 0, E = Weights.size(); I != E; ++I) {
4354  if (SI->getSuccessor(I) == ContiguousDest)
4355  TrueWeight += Weights[I];
4356  else
4357  FalseWeight += Weights[I];
4358  }
4359  while (TrueWeight > UINT32_MAX || FalseWeight > UINT32_MAX) {
4360  TrueWeight /= 2;
4361  FalseWeight /= 2;
4362  }
4363  setBranchWeights(NewBI, TrueWeight, FalseWeight);
4364  }
4365  }
4366 
4367  // Prune obsolete incoming values off the successors' PHI nodes.
4368  for (auto BBI = ContiguousDest->begin(); isa<PHINode>(BBI); ++BBI) {
4369  unsigned PreviousEdges = ContiguousCases->size();
4370  if (ContiguousDest == SI->getDefaultDest())
4371  ++PreviousEdges;
4372  for (unsigned I = 0, E = PreviousEdges - 1; I != E; ++I)
4373  cast<PHINode>(BBI)->removeIncomingValue(SI->getParent());
4374  }
4375  for (auto BBI = OtherDest->begin(); isa<PHINode>(BBI); ++BBI) {
4376  unsigned PreviousEdges = SI->getNumCases() - ContiguousCases->size();
4377  if (OtherDest == SI->getDefaultDest())
4378  ++PreviousEdges;
4379  for (unsigned I = 0, E = PreviousEdges - 1; I != E; ++I)
4380  cast<PHINode>(BBI)->removeIncomingValue(SI->getParent());
4381  }
4382 
4383  // Drop the switch.
4384  SI->eraseFromParent();
4385 
4386  return true;
4387 }
4388 
4389 /// Compute masked bits for the condition of a switch
4390 /// and use it to remove dead cases.
4392  const DataLayout &DL) {
4393  Value *Cond = SI->getCondition();
4394  unsigned Bits = Cond->getType()->getIntegerBitWidth();
4395  KnownBits Known = computeKnownBits(Cond, DL, 0, AC, SI);
4396 
4397  // We can also eliminate cases by determining that their values are outside of
4398  // the limited range of the condition based on how many significant (non-sign)
4399  // bits are in the condition value.
4400  unsigned ExtraSignBits = ComputeNumSignBits(Cond, DL, 0, AC, SI) - 1;
4401  unsigned MaxSignificantBitsInCond = Bits - ExtraSignBits;
4402 
4403  // Gather dead cases.
4405  for (auto &Case : SI->cases()) {
4406  const APInt &CaseVal = Case.getCaseValue()->getValue();
4407  if (Known.Zero.intersects(CaseVal) || !Known.One.isSubsetOf(CaseVal) ||
4408  (CaseVal.getMinSignedBits() > MaxSignificantBitsInCond)) {
4409  DeadCases.push_back(Case.getCaseValue());
4410  LLVM_DEBUG(dbgs() << "SimplifyCFG: switch case " << CaseVal
4411  << " is dead.\n");
4412  }
4413  }
4414 
4415  // If we can prove that the cases must cover all possible values, the
4416  // default destination becomes dead and we can remove it. If we know some
4417  // of the bits in the value, we can use that to more precisely compute the
4418  // number of possible unique case values.
4419  bool HasDefault =
4420  !isa<UnreachableInst>(SI->getDefaultDest()->getFirstNonPHIOrDbg());
4421  const unsigned NumUnknownBits =
4422  Bits - (Known.Zero | Known.One).countPopulation();
4423  assert(NumUnknownBits <= Bits);
4424  if (HasDefault && DeadCases.empty() &&
4425  NumUnknownBits < 64 /* avoid overflow */ &&
4426  SI->getNumCases() == (1ULL << NumUnknownBits)) {
4427  LLVM_DEBUG(dbgs() << "SimplifyCFG: switch default is dead.\n");
4428  BasicBlock *NewDefault =
4430  SI->setDefaultDest(&*NewDefault);
4431  SplitBlock(&*NewDefault, &NewDefault->front());
4432  auto *OldTI = NewDefault->getTerminator();
4433  new UnreachableInst(SI->getContext(), OldTI);
4435  return true;
4436  }
4437 
4438  SmallVector<uint64_t, 8> Weights;
4439  bool HasWeight = HasBranchWeights(SI);
4440  if (HasWeight) {
4441  GetBranchWeights(SI, Weights);
4442  HasWeight = (Weights.size() == 1 + SI->getNumCases());
4443  }
4444 
4445  // Remove dead cases from the switch.
4446  for (ConstantInt *DeadCase : DeadCases) {
4447  SwitchInst::CaseIt CaseI = SI->findCaseValue(DeadCase);
4448  assert(CaseI != SI->case_default() &&
4449  "Case was not found. Probably mistake in DeadCases forming.");
4450  if (HasWeight) {
4451  std::swap(Weights[CaseI->getCaseIndex() + 1], Weights.back());
4452  Weights.pop_back();
4453  }
4454 
4455  // Prune unused values from PHI nodes.
4456  CaseI->getCaseSuccessor()->removePredecessor(SI->getParent());
4457  SI->removeCase(CaseI);
4458  }
4459  if (HasWeight && Weights.size() >= 2) {
4460  SmallVector<uint32_t, 8> MDWeights(Weights.begin(), Weights.end());
4461  setBranchWeights(SI, MDWeights);
4462  }
4463 
4464  return !DeadCases.empty();
4465 }
4466 
4467 /// If BB would be eligible for simplification by
4468 /// TryToSimplifyUncondBranchFromEmptyBlock (i.e. it is empty and terminated
4469 /// by an unconditional branch), look at the phi node for BB in the successor
4470 /// block and see if the incoming value is equal to CaseValue. If so, return
4471 /// the phi node, and set PhiIndex to BB's index in the phi node.
4473  BasicBlock *BB, int *PhiIndex) {
4474  if (BB->getFirstNonPHIOrDbg() != BB->getTerminator())
4475  return nullptr; // BB must be empty to be a candidate for simplification.
4476  if (!BB->getSinglePredecessor())
4477  return nullptr; // BB must be dominated by the switch.
4478 
4480  if (!Branch || !Branch->isUnconditional())
4481  return nullptr; // Terminator must be unconditional branch.
4482 
4483  BasicBlock *Succ = Branch->getSuccessor(0);
4484 
4485  for (PHINode &PHI : Succ->phis()) {
4486  int Idx = PHI.getBasicBlockIndex(BB);
4487  assert(Idx >= 0 && "PHI has no entry for predecessor?");
4488 
4489  Value *InValue = PHI.getIncomingValue(Idx);
4490  if (InValue != CaseValue)
4491  continue;
4492 
4493  *PhiIndex = Idx;
4494  return &PHI;
4495  }
4496 
4497  return nullptr;
4498 }
4499 
4500 /// Try to forward the condition of a switch instruction to a phi node
4501 /// dominated by the switch, if that would mean that some of the destination
4502 /// blocks of the switch can be folded away. Return true if a change is made.
4504  using ForwardingNodesMap = DenseMap<PHINode *, SmallVector<int, 4>>;
4505 
4506  ForwardingNodesMap ForwardingNodes;
4507  BasicBlock *SwitchBlock = SI->getParent();
4508  bool Changed = false;
4509  for (auto &Case : SI->cases()) {
4510  ConstantInt *CaseValue = Case.getCaseValue();
4511  BasicBlock *CaseDest = Case.getCaseSuccessor();
4512 
4513  // Replace phi operands in successor blocks that are using the constant case
4514  // value rather than the switch condition variable:
4515  // switchbb:
4516  // switch i32 %x, label %default [
4517  // i32 17, label %succ
4518  // ...
4519  // succ:
4520  // %r = phi i32 ... [ 17, %switchbb ] ...
4521  // -->
4522  // %r = phi i32 ... [ %x, %switchbb ] ...
4523 
4524  for (PHINode &Phi : CaseDest->phis()) {
4525  // This only works if there is exactly 1 incoming edge from the switch to
4526  // a phi. If there is >1, that means multiple cases of the switch map to 1
4527  // value in the phi, and that phi value is not the switch condition. Thus,
4528  // this transform would not make sense (the phi would be invalid because
4529  // a phi can't have different incoming values from the same block).
4530  int SwitchBBIdx = Phi.getBasicBlockIndex(SwitchBlock);
4531  if (Phi.getIncomingValue(SwitchBBIdx) == CaseValue &&
4532  count(Phi.blocks(), SwitchBlock) == 1) {
4533  Phi.setIncomingValue(SwitchBBIdx, SI->getCondition());
4534  Changed = true;
4535  }
4536  }
4537 
4538  // Collect phi nodes that are indirectly using this switch's case constants.
4539  int PhiIdx;
4540  if (auto *Phi = FindPHIForConditionForwarding(CaseValue, CaseDest, &PhiIdx))
4541  ForwardingNodes[Phi].push_back(PhiIdx);
4542  }
4543 
4544  for (auto &ForwardingNode : ForwardingNodes) {
4545  PHINode *Phi = ForwardingNode.first;
4546  SmallVectorImpl<int> &Indexes = ForwardingNode.second;
4547  if (Indexes.size() < 2)
4548  continue;
4549 
4550  for (int Index : Indexes)
4551  Phi->setIncomingValue(Index, SI->getCondition());
4552  Changed = true;
4553  }
4554 
4555  return Changed;
4556 }
4557 
4558 /// Return true if the backend will be able to handle
4559 /// initializing an array of constants like C.
4561  if (C->isThreadDependent())
4562  return false;
4563  if (C->isDLLImportDependent())
4564  return false;
4565 
4566  if (!isa<ConstantFP>(C) && !isa<ConstantInt>(C) &&
4567  !isa<ConstantPointerNull>(C) && !isa<GlobalValue>(C) &&
4568  !isa<UndefValue>(C) && !isa<ConstantExpr>(C))
4569  return false;
4570 
4571  if (ConstantExpr *CE = dyn_cast<ConstantExpr>(C)) {
4572  if (!CE->isGEPWithNoNotionalOverIndexing())
4573  return false;
4574  if (!ValidLookupTableConstant(CE->getOperand(0), TTI))
4575  return false;
4576  }
4577 
4579  return false;
4580 
4581  return true;
4582 }
4583 
4584 /// If V is a Constant, return it. Otherwise, try to look up
4585 /// its constant value in ConstantPool, returning 0 if it's not there.
4586 static Constant *
4589  if (Constant *C = dyn_cast<Constant>(V))
4590  return C;
4591  return ConstantPool.lookup(V);
4592 }
4593 
4594 /// Try to fold instruction I into a constant. This works for
4595 /// simple instructions such as binary operations where both operands are
4596 /// constant or can be replaced by constants from the ConstantPool. Returns the
4597 /// resulting constant on success, 0 otherwise.
4598 static Constant *
4601  if (SelectInst *Select = dyn_cast<SelectInst>(I)) {
4602  Constant *A = LookupConstant(Select->getCondition(), ConstantPool);
4603  if (!A)
4604  return nullptr;
4605  if (A->isAllOnesValue())
4606  return LookupConstant(Select->getTrueValue(), ConstantPool);
4607  if (A->isNullValue())
4608  return LookupConstant(Select->getFalseValue(), ConstantPool);
4609  return nullptr;
4610  }
4611 
4613  for (unsigned N = 0, E = I->getNumOperands(); N != E; ++N) {
4615  COps.push_back(A);
4616  else
4617  return nullptr;
4618  }
4619 
4620  if (CmpInst *Cmp = dyn_cast<CmpInst>(I)) {
4621  return ConstantFoldCompareInstOperands(Cmp->getPredicate(), COps[0],
4622  COps[1], DL);
4623  }
4624 
4625  return ConstantFoldInstOperands(I, COps, DL);
4626 }
4627 
4628 /// Try to determine the resulting constant values in phi nodes
4629 /// at the common destination basic block, *CommonDest, for one of the case
4630 /// destionations CaseDest corresponding to value CaseVal (0 for the default
4631 /// case), of a switch instruction SI.
4632 static bool
4634  BasicBlock **CommonDest,
4635  SmallVectorImpl<std::pair<PHINode *, Constant *>> &Res,
4636  const DataLayout &DL, const TargetTransformInfo &TTI) {
4637  // The block from which we enter the common destination.
4638  BasicBlock *Pred = SI->getParent();
4639 
4640  // If CaseDest is empty except for some side-effect free instructions through
4641  // which we can constant-propagate the CaseVal, continue to its successor.
4643  ConstantPool.insert(std::make_pair(SI->getCondition(), CaseVal));
4644  for (Instruction &I :CaseDest->instructionsWithoutDebug()) {
4645  if (I.isTerminator()) {
4646  // If the terminator is a simple branch, continue to the next block.
4647  if (I.getNumSuccessors() != 1 || I.isExceptionalTerminator())
4648  return false;
4649  Pred = CaseDest;
4650  CaseDest = I.getSuccessor(0);
4651  } else if (Constant *C = ConstantFold(&I, DL, ConstantPool)) {
4652  // Instruction is side-effect free and constant.
4653 
4654  // If the instruction has uses outside this block or a phi node slot for
4655  // the block, it is not safe to bypass the instruction since it would then
4656  // no longer dominate all its uses.
4657  for (auto &Use : I.uses()) {
4658  User *User = Use.getUser();
4659  if (Instruction *I = dyn_cast<Instruction>(User))
4660  if (I->getParent() == CaseDest)
4661  continue;
4662  if (PHINode *Phi = dyn_cast<PHINode>(User))
4663  if (Phi->getIncomingBlock(Use) == CaseDest)
4664  continue;
4665  return false;
4666  }
4667 
4668  ConstantPool.insert(std::make_pair(&I, C));
4669  } else {
4670  break;
4671  }
4672  }
4673 
4674  // If we did not have a CommonDest before, use the current one.
4675  if (!*CommonDest)
4676  *CommonDest = CaseDest;
4677  // If the destination isn't the common one, abort.
4678  if (CaseDest != *CommonDest)
4679  return false;
4680 
4681  // Get the values for this case from phi nodes in the destination block.
4682  for (PHINode &PHI : (*CommonDest)->phis()) {
4683  int Idx = PHI.getBasicBlockIndex(Pred);
4684  if (Idx == -1)
4685  continue;
4686 
4687  Constant *ConstVal =
4688  LookupConstant(PHI.getIncomingValue(Idx), ConstantPool);
4689  if (!ConstVal)
4690  return false;
4691 
4692  // Be conservative about which kinds of constants we support.
4693  if (!ValidLookupTableConstant(ConstVal, TTI))
4694  return false;
4695 
4696  Res.push_back(std::make_pair(&PHI, ConstVal));
4697  }
4698 
4699  return Res.size() > 0;
4700 }
4701 
4702 // Helper function used to add CaseVal to the list of cases that generate
4703 // Result. Returns the updated number of cases that generate this result.
4704 static uintptr_t MapCaseToResult(ConstantInt *CaseVal,
4705  SwitchCaseResultVectorTy &UniqueResults,
4706  Constant *Result) {
4707  for (auto &I : UniqueResults) {
4708  if (I.first == Result) {
4709  I.second.push_back(CaseVal);
4710  return I.second.size();
4711  }
4712  }
4713  UniqueResults.push_back(
4714  std::make_pair(Result, SmallVector<ConstantInt *, 4>(1, CaseVal)));
4715  return 1;
4716 }
4717 
4718 // Helper function that initializes a map containing
4719 // results for the PHI node of the common destination block for a switch
4720 // instruction. Returns false if multiple PHI nodes have been found or if
4721 // there is not a common destination block for the switch.
4722 static bool
4724  SwitchCaseResultVectorTy &UniqueResults,
4725  Constant *&DefaultResult, const DataLayout &DL,
4726  const TargetTransformInfo &TTI,
4727  uintptr_t MaxUniqueResults, uintptr_t MaxCasesPerResult) {
4728  for (auto &I : SI->cases()) {
4729  ConstantInt *CaseVal = I.getCaseValue();
4730 
4731  // Resulting value at phi nodes for this case value.
4732  SwitchCaseResultsTy Results;
4733  if (!GetCaseResults(SI, CaseVal, I.getCaseSuccessor(), &CommonDest, Results,
4734  DL, TTI))
4735  return false;
4736 
4737  // Only one value per case is permitted.
4738  if (Results.size() > 1)
4739  return false;
4740 
4741  // Add the case->result mapping to UniqueResults.
4742  const uintptr_t NumCasesForResult =
4743  MapCaseToResult(CaseVal, UniqueResults, Results.begin()->second);
4744 
4745  // Early out if there are too many cases for this result.
4746  if (NumCasesForResult > MaxCasesPerResult)
4747  return false;
4748 
4749  // Early out if there are too many unique results.
4750  if (UniqueResults.size() > MaxUniqueResults)
4751  return false;
4752 
4753  // Check the PHI consistency.
4754  if (!PHI)
4755  PHI = Results[0].first;
4756  else if (PHI != Results[0].first)
4757  return false;
4758  }
4759  // Find the default result value.
4761  BasicBlock *DefaultDest = SI->getDefaultDest();
4762  GetCaseResults(SI, nullptr, SI->getDefaultDest(), &CommonDest, DefaultResults,
4763  DL, TTI);
4764  // If the default value is not found abort unless the default destination
4765  // is unreachable.
4766  DefaultResult =
4767  DefaultResults.size() == 1 ? DefaultResults.begin()->second : nullptr;
4768  if ((!DefaultResult &&
4769  !isa<UnreachableInst>(DefaultDest->getFirstNonPHIOrDbg())))
4770  return false;
4771 
4772  return true;
4773 }
4774 
4775 // Helper function that checks if it is possible to transform a switch with only
4776 // two cases (or two cases + default) that produces a result into a select.
4777 // Example:
4778 // switch (a) {
4779 // case 10: %0 = icmp eq i32 %a, 10
4780 // return 10; %1 = select i1 %0, i32 10, i32 4
4781 // case 20: ----> %2 = icmp eq i32 %a, 20
4782 // return 2; %3 = select i1 %2, i32 2, i32 %1
4783 // default:
4784 // return 4;
4785 // }
4786 static Value *ConvertTwoCaseSwitch(const SwitchCaseResultVectorTy &ResultVector,
4787  Constant *DefaultResult, Value *Condition,
4788  IRBuilder<> &Builder) {
4789  assert(ResultVector.size() == 2 &&
4790  "We should have exactly two unique results at this point");
4791  // If we are selecting between only two cases transform into a simple
4792  // select or a two-way select if default is possible.
4793  if (ResultVector[0].second.size() == 1 &&
4794  ResultVector[1].second.size() == 1) {
4795  ConstantInt *const FirstCase = ResultVector[0].second[0];
4796  ConstantInt *const SecondCase = ResultVector[1].second[0];
4797 
4798  bool DefaultCanTrigger = DefaultResult;
4799  Value *SelectValue = ResultVector[1].first;
4800  if (DefaultCanTrigger) {
4801  Value *const ValueCompare =
4802  Builder.CreateICmpEQ(Condition, SecondCase, "switch.selectcmp");
4803  SelectValue = Builder.CreateSelect(ValueCompare, ResultVector[1].first,
4804  DefaultResult, "switch.select");
4805  }
4806  Value *const ValueCompare =
4807  Builder.CreateICmpEQ(Condition, FirstCase, "switch.selectcmp");
4808  return Builder.CreateSelect(ValueCompare, ResultVector[0].first,
4809  SelectValue, "switch.select");
4810  }
4811 
4812  return nullptr;
4813 }
4814 
4815 // Helper function to cleanup a switch instruction that has been converted into
4816 // a select, fixing up PHI nodes and basic blocks.
4818  Value *SelectValue,
4819  IRBuilder<> &Builder) {
4820  BasicBlock *SelectBB = SI->getParent();
4821  while (PHI->getBasicBlockIndex(SelectBB) >= 0)
4822  PHI->removeIncomingValue(SelectBB);
4823  PHI->addIncoming(SelectValue, SelectBB);
4824 
4825  Builder.CreateBr(PHI->getParent());
4826 
4827  // Remove the switch.
4828  for (unsigned i = 0, e = SI->getNumSuccessors(); i < e; ++i) {
4829  BasicBlock *Succ = SI->getSuccessor(i);
4830 
4831  if (Succ == PHI->getParent())
4832  continue;
4833  Succ->removePredecessor(SelectBB);
4834  }
4835  SI->eraseFromParent();
4836 }
4837 
4838 /// If the switch is only used to initialize one or more
4839 /// phi nodes in a common successor block with only two different
4840 /// constant values, replace the switch with select.
4841 static bool switchToSelect(SwitchInst *SI, IRBuilder<> &Builder,
4842  const DataLayout &DL,
4843  const TargetTransformInfo &TTI) {
4844  Value *const Cond = SI->getCondition();
4845  PHINode *PHI = nullptr;
4846  BasicBlock *CommonDest = nullptr;
4847  Constant *DefaultResult;
4848  SwitchCaseResultVectorTy UniqueResults;
4849  // Collect all the cases that will deliver the same value from the switch.
4850  if (!InitializeUniqueCases(SI, PHI, CommonDest, UniqueResults, DefaultResult,
4851  DL, TTI, 2, 1))
4852  return false;
4853  // Selects choose between maximum two values.
4854  if (UniqueResults.size() != 2)
4855  return false;
4856  assert(PHI != nullptr && "PHI for value select not found");
4857 
4858  Builder.SetInsertPoint(SI);
4859  Value *SelectValue =
4860  ConvertTwoCaseSwitch(UniqueResults, DefaultResult, Cond, Builder);
4861  if (SelectValue) {
4862  RemoveSwitchAfterSelectConversion(SI, PHI, SelectValue, Builder);
4863  return true;
4864  }
4865  // The switch couldn't be converted into a select.
4866  return false;
4867 }
4868 
4869 namespace {
4870 
4871 /// This class represents a lookup table that can be used to replace a switch.
4872 class SwitchLookupTable {
4873 public:
4874  /// Create a lookup table to use as a switch replacement with the contents
4875  /// of Values, using DefaultValue to fill any holes in the table.
4876  SwitchLookupTable(
4877  Module &M, uint64_t TableSize, ConstantInt *Offset,
4878  const SmallVectorImpl<std::pair<ConstantInt *, Constant *>> &Values,
4879  Constant *DefaultValue, const DataLayout &DL, const StringRef &FuncName);
4880 
4881  /// Build instructions with Builder to retrieve the value at
4882  /// the position given by Index in the lookup table.
4883  Value *BuildLookup(Value *Index, IRBuilder<> &Builder);
4884 
4885  /// Return true if a table with TableSize elements of
4886  /// type ElementType would fit in a target-legal register.
4887  static bool WouldFitInRegister(const DataLayout &DL, uint64_t TableSize,
4888  Type *ElementType);
4889 
4890 private:
4891  // Depending on the contents of the table, it can be represented in
4892  // different ways.
4893  enum {
4894  // For tables where each element contains the same value, we just have to
4895  // store that single value and return it for each lookup.
4896  SingleValueKind,
4897 
4898  // For tables where there is a linear relationship between table index
4899  // and values. We calculate the result with a simple multiplication
4900  // and addition instead of a table lookup.
4901  LinearMapKind,
4902 
4903  // For small tables with integer elements, we can pack them into a bitmap
4904  // that fits into a target-legal register. Values are retrieved by
4905  // shift and mask operations.
4906  BitMapKind,
4907 
4908  // The table is stored as an array of values. Values are retrieved by load
4909  // instructions from the table.
4910  ArrayKind
4911  } Kind;
4912 
4913  // For SingleValueKind, this is the single value.
4914  Constant *SingleValue = nullptr;
4915 
4916  // For BitMapKind, this is the bitmap.
4917  ConstantInt *BitMap = nullptr;
4918  IntegerType *BitMapElementTy = nullptr;
4919 
4920  // For LinearMapKind, these are the constants used to derive the value.
4921  ConstantInt *LinearOffset = nullptr;
4922  ConstantInt *LinearMultiplier = nullptr;
4923 
4924  // For ArrayKind, this is the array.
4925  GlobalVariable *Array = nullptr;
4926 };
4927 
4928 } // end anonymous namespace
4929 
4930 SwitchLookupTable::SwitchLookupTable(
4931  Module &M, uint64_t TableSize, ConstantInt *Offset,
4932  const SmallVectorImpl<std::pair<ConstantInt *, Constant *>> &Values,
4933  Constant *DefaultValue, const DataLayout &DL, const StringRef &FuncName) {
4934  assert(Values.size() && "Can't build lookup table without values!");
4935  assert(TableSize >= Values.size() && "Can't fit values in table!");
4936 
4937  // If all values in the table are equal, this is that value.
4938  SingleValue = Values.begin()->second;
4939 
4940  Type *ValueType = Values.begin()->second->getType();
4941 
4942  // Build up the table contents.
4943  SmallVector<Constant *, 64> TableContents(TableSize);
4944  for (size_t I = 0, E = Values.size(); I != E; ++I) {
4945  ConstantInt *CaseVal = Values[I].first;
4946  Constant *CaseRes = Values[I].second;
4947  assert(CaseRes->getType() == ValueType);
4948 
4949  uint64_t Idx = (CaseVal->getValue() - Offset->getValue()).getLimitedValue();
4950  TableContents[Idx] = CaseRes;
4951 
4952  if (CaseRes != SingleValue)
4953  SingleValue = nullptr;
4954  }
4955 
4956  // Fill in any holes in the table with the default result.
4957  if (Values.size() < TableSize) {
4958  assert(DefaultValue &&
4959  "Need a default value to fill the lookup table holes.");
4960  assert(DefaultValue->getType() == ValueType);
4961  for (uint64_t I = 0; I < TableSize; ++I) {
4962  if (!TableContents[I])
4963  TableContents[I] = DefaultValue;
4964  }
4965 
4966  if (DefaultValue != SingleValue)
4967  SingleValue = nullptr;
4968  }
4969 
4970  // If each element in the table contains the same value, we only need to store
4971  // that single value.
4972  if (SingleValue) {
4973  Kind = SingleValueKind;
4974  return;
4975  }
4976 
4977  // Check if we can derive the value with a linear transformation from the
4978  // table index.
4979  if (isa<IntegerType>(ValueType)) {
4980  bool LinearMappingPossible = true;
4981  APInt PrevVal;
4982  APInt DistToPrev;
4983  assert(TableSize >= 2 && "Should be a SingleValue table.");
4984  // Check if there is the same distance between two consecutive values.
4985  for (uint64_t I = 0; I < TableSize; ++I) {
4986  ConstantInt *ConstVal = dyn_cast<ConstantInt>(TableContents[I]);
4987  if (!ConstVal) {
4988  // This is an undef. We could deal with it, but undefs in lookup tables
4989  // are very seldom. It's probably not worth the additional complexity.
4990  LinearMappingPossible = false;
4991  break;
4992  }
4993  const APInt &Val = ConstVal->getValue();
4994  if (I != 0) {
4995  APInt Dist = Val - PrevVal;
4996  if (I == 1) {
4997  DistToPrev = Dist;
4998  } else if (Dist != DistToPrev) {
4999  LinearMappingPossible = false;
5000  break;
5001  }
5002  }
5003  PrevVal = Val;
5004  }
5005  if (LinearMappingPossible) {
5006  LinearOffset = cast<ConstantInt>(TableContents[0]);
5007  LinearMultiplier = ConstantInt::get(M.getContext(), DistToPrev);
5008  Kind = LinearMapKind;
5009  ++NumLinearMaps;
5010  return;
5011  }
5012  }
5013 
5014  // If the type is integer and the table fits in a register, build a bitmap.
5015  if (WouldFitInRegister(DL, TableSize, ValueType)) {
5016  IntegerType *IT = cast<IntegerType>(ValueType);
5017  APInt TableInt(TableSize * IT->getBitWidth(), 0);
5018  for (uint64_t I = TableSize; I > 0; --I) {
5019  TableInt <<= IT->getBitWidth();
5020  // Insert values into the bitmap. Undef values are set to zero.
5021  if (!isa<UndefValue>(TableContents[I - 1])) {
5022  ConstantInt *Val = cast<ConstantInt>(TableContents[I - 1]);
5023  TableInt |= Val->getValue().zext(TableInt.getBitWidth());
5024  }
5025  }
5026  BitMap = ConstantInt::get(M.getContext(), TableInt);
5027  BitMapElementTy = IT;
5028  Kind = BitMapKind;
5029  ++NumBitMaps;
5030  return;
5031  }
5032 
5033  // Store the table in an array.
5034  ArrayType *ArrayTy = ArrayType::get(ValueType, TableSize);
5035  Constant *Initializer = ConstantArray::get(ArrayTy, TableContents);
5036 
5037  Array = new GlobalVariable(M, ArrayTy, /*constant=*/true,
5038  GlobalVariable::PrivateLinkage, Initializer,
5039  "switch.table." + FuncName);
5040  Array->setUnnamedAddr(GlobalValue::UnnamedAddr::Global);
5041  // Set the alignment to that of an array items. We will be only loading one
5042  // value out of it.
5043  Array->setAlignment(DL.getPrefTypeAlignment(ValueType));
5044  Kind = ArrayKind;
5045 }
5046 
5047 Value *SwitchLookupTable::BuildLookup(Value *Index, IRBuilder<> &Builder) {
5048  switch (Kind) {
5049  case SingleValueKind:
5050  return SingleValue;
5051  case LinearMapKind: {
5052  // Derive the result value from the input value.
5053  Value *Result = Builder.CreateIntCast(Index, LinearMultiplier->getType(),
5054  false, "switch.idx.cast");
5055  if (!LinearMultiplier->isOne())
5056  Result = Builder.CreateMul(Result, LinearMultiplier, "switch.idx.mult");
5057  if (!LinearOffset->isZero())
5058  Result = Builder.CreateAdd(Result, LinearOffset, "switch.offset");
5059  return Result;
5060  }
5061  case BitMapKind: {
5062  // Type of the bitmap (e.g. i59).
5063  IntegerType *MapTy = BitMap->getType();
5064 
5065  // Cast Index to the same type as the bitmap.
5066  // Note: The Index is <= the number of elements in the table, so
5067  // truncating it to the width of the bitmask is safe.
5068  Value *ShiftAmt = Builder.CreateZExtOrTrunc(Index, MapTy, "switch.cast");
5069 
5070  // Multiply the shift amount by the element width.
5071  ShiftAmt = Builder.CreateMul(
5072  ShiftAmt, ConstantInt::get(MapTy, BitMapElementTy->getBitWidth()),
5073  "switch.shiftamt");
5074 
5075  // Shift down.
5076  Value *DownShifted =
5077  Builder.CreateLShr(BitMap, ShiftAmt, "switch.downshift");
5078  // Mask off.
5079  return Builder.CreateTrunc(DownShifted, BitMapElementTy, "switch.masked");
5080  }
5081  case ArrayKind: {
5082  // Make sure the table index will not overflow when treated as signed.
5083  IntegerType *IT = cast<IntegerType>(Index->getType());
5084  uint64_t TableSize =
5085  Array->getInitializer()->getType()->getArrayNumElements();
5086  if (TableSize > (1ULL << (IT->getBitWidth() - 1)))
5087  Index = Builder.CreateZExt(
5088  Index, IntegerType::get(IT->getContext(), IT->getBitWidth() + 1),
5089  "switch.tableidx.zext");
5090 
5091  Value *GEPIndices[] = {Builder.getInt32(0), Index};
5092  Value *GEP = Builder.CreateInBoundsGEP(Array->getValueType(), Array,
5093  GEPIndices, "switch.gep");
5094  return Builder.CreateLoad(GEP, "switch.load");
5095  }
5096  }
5097  llvm_unreachable("Unknown lookup table kind!");
5098 }
5099 
5100 bool SwitchLookupTable::WouldFitInRegister(const DataLayout &DL,
5101  uint64_t TableSize,
5102  Type *ElementType) {
5103  auto *IT = dyn_cast<IntegerType>(ElementType);
5104  if (!IT)
5105  return false;
5106  // FIXME: If the type is wider than it needs to be, e.g. i8 but all values
5107  // are <= 15, we could try to narrow the type.
5108 
5109  // Avoid overflow, fitsInLegalInteger uses unsigned int for the width.
5110  if (TableSize >= UINT_MAX / IT->getBitWidth())
5111  return false;
5112  return DL.fitsInLegalInteger(TableSize * IT->getBitWidth());
5113 }
5114 
5115 /// Determine whether a lookup table should be built for this switch, based on
5116 /// the number of cases, size of the table, and the types of the results.
5117 static bool
5118 ShouldBuildLookupTable(SwitchInst *SI, uint64_t TableSize,
5119  const TargetTransformInfo &TTI, const DataLayout &DL,
5120  const SmallDenseMap<PHINode *, Type *> &ResultTypes) {
5121  if (SI->getNumCases() > TableSize || TableSize >= UINT64_MAX / 10)
5122  return false; // TableSize overflowed, or mul below might overflow.
5123 
5124  bool AllTablesFitInRegister = true;
5125  bool HasIllegalType = false;
5126  for (const auto &I : ResultTypes) {
5127  Type *Ty = I.second;
5128 
5129  // Saturate this flag to true.
5130  HasIllegalType = HasIllegalType || !TTI.isTypeLegal(Ty);
5131 
5132  // Saturate this flag to false.
5133  AllTablesFitInRegister =
5134  AllTablesFitInRegister &&
5135  SwitchLookupTable::WouldFitInRegister(DL, TableSize, Ty);
5136 
5137  // If both flags saturate, we're done. NOTE: This *only* works with
5138  // saturating flags, and all flags have to saturate first due to the
5139  // non-deterministic behavior of iterating over a dense map.
5140  if (HasIllegalType && !AllTablesFitInRegister)
5141  break;
5142  }
5143 
5144  // If each table would fit in a register, we should build it anyway.
5145  if (AllTablesFitInRegister)
5146  return true;
5147 
5148  // Don't build a table that doesn't fit in-register if it has illegal types.
5149  if (HasIllegalType)
5150  return false;
5151 
5152  // The table density should be at least 40%. This is the same criterion as for
5153  // jump tables, see SelectionDAGBuilder::handleJTSwitchCase.
5154  // FIXME: Find the best cut-off.
5155  return SI->getNumCases() * 10 >= TableSize * 4;
5156 }
5157 
5158 /// Try to reuse the switch table index compare. Following pattern:
5159 /// \code
5160 /// if (idx < tablesize)
5161 /// r = table[idx]; // table does not contain default_value
5162 /// else
5163 /// r = default_value;
5164 /// if (r != default_value)
5165 /// ...
5166 /// \endcode
5167 /// Is optimized to:
5168 /// \code
5169 /// cond = idx < tablesize;
5170 /// if (cond)
5171 /// r = table[idx];
5172 /// else
5173 /// r = default_value;
5174 /// if (cond)
5175 /// ...
5176 /// \endcode
5177 /// Jump threading will then eliminate the second if(cond).
5178 static void reuseTableCompare(
5179  User *PhiUser, BasicBlock *PhiBlock, BranchInst *RangeCheckBranch,
5180  Constant *DefaultValue,
5181  const SmallVectorImpl<std::pair<ConstantInt *, Constant *>> &Values) {
5182  ICmpInst *CmpInst = dyn_cast<ICmpInst>(PhiUser);
5183  if (!CmpInst)
5184  return;
5185 
5186  // We require that the compare is in the same block as the phi so that jump
5187  // threading can do its work afterwards.
5188  if (CmpInst->getParent() != PhiBlock)
5189  return;
5190 
5191  Constant *CmpOp1 = dyn_cast<Constant>(CmpInst->getOperand(1));
5192  if (!CmpOp1)
5193  return;
5194 
5195  Value *RangeCmp = RangeCheckBranch->getCondition();
5196  Constant *TrueConst = ConstantInt::getTrue(RangeCmp->getType());
5197  Constant *FalseConst = ConstantInt::getFalse(RangeCmp->getType());
5198 
5199  // Check if the compare with the default value is constant true or false.
5200  Constant *DefaultConst = ConstantExpr::getICmp(CmpInst->getPredicate(),
5201  DefaultValue, CmpOp1, true);
5202  if (DefaultConst != TrueConst && DefaultConst != FalseConst)
5203  return;
5204 
5205  // Check if the compare with the case values is distinct from the default
5206  // compare result.
5207  for (auto ValuePair : Values) {
5208  Constant *CaseConst = ConstantExpr::getICmp(CmpInst->getPredicate(),
5209  ValuePair.second, CmpOp1, true);
5210  if (!CaseConst || CaseConst == DefaultConst || isa<UndefValue>(CaseConst))
5211  return;
5212  assert((CaseConst == TrueConst || CaseConst == FalseConst) &&
5213  "Expect true or false as compare result.");
5214  }
5215 
5216  // Check if the branch instruction dominates the phi node. It's a simple
5217  // dominance check, but sufficient for our needs.
5218  // Although this check is invariant in the calling loops, it's better to do it
5219  // at this late stage. Practically we do it at most once for a switch.
5220  BasicBlock *BranchBlock = RangeCheckBranch->getParent();
5221  for (auto PI = pred_begin(PhiBlock), E = pred_end(PhiBlock); PI != E; ++PI) {
5222  BasicBlock *Pred = *PI;
5223  if (Pred != BranchBlock && Pred->getUniquePredecessor() != BranchBlock)
5224  return;
5225  }
5226 
5227  if (DefaultConst == FalseConst) {
5228  // The compare yields the same result. We can replace it.
5229  CmpInst->replaceAllUsesWith(RangeCmp);
5230  ++NumTableCmpReuses;
5231  } else {
5232  // The compare yields the same result, just inverted. We can replace it.
5233  Value *InvertedTableCmp = BinaryOperator::CreateXor(
5234  RangeCmp, ConstantInt::get(RangeCmp->getType(), 1), "inverted.cmp",
5235  RangeCheckBranch);
5236  CmpInst->replaceAllUsesWith(InvertedTableCmp);
5237  ++NumTableCmpReuses;
5238  }
5239 }
5240 
5241 /// If the switch is only used to initialize one or more phi nodes in a common
5242 /// successor block with different constant values, replace the switch with
5243 /// lookup tables.
5245  const DataLayout &DL,
5246  const TargetTransformInfo &TTI) {
5247  assert(SI->getNumCases() > 1 && "Degenerate switch?");
5248 
5249  Function *Fn = SI->getParent()->getParent();
5250  // Only build lookup table when we have a target that supports it or the
5251  // attribute is not set.
5252  if (!TTI.shouldBuildLookupTables() ||
5253  (Fn->getFnAttribute("no-jump-tables").getValueAsString() == "true"))
5254  return false;
5255 
5256  // FIXME: If the switch is too sparse for a lookup table, perhaps we could
5257  // split off a dense part and build a lookup table for that.
5258 
5259  // FIXME: This creates arrays of GEPs to constant strings, which means each
5260  // GEP needs a runtime relocation in PIC code. We should just build one big
5261  // string and lookup indices into that.
5262 
5263  // Ignore switches with less than three cases. Lookup tables will not make
5264  // them faster, so we don't analyze them.
5265  if (SI->getNumCases() < 3)
5266  return false;
5267 
5268  // Figure out the corresponding result for each case value and phi node in the
5269  // common destination, as well as the min and max case values.
5270  assert(!empty(SI->cases()));
5271  SwitchInst::CaseIt CI = SI->case_begin();
5272  ConstantInt *MinCaseVal = CI->getCaseValue();
5273  ConstantInt *MaxCaseVal = CI->getCaseValue();
5274 
5275  BasicBlock *CommonDest = nullptr;
5276 
5277  using ResultListTy = SmallVector<std::pair<ConstantInt *, Constant *>, 4>;
5279 
5280  SmallDenseMap<PHINode *, Constant *> DefaultResults;
5283 
5284  for (SwitchInst::CaseIt E = SI->case_end(); CI != E; ++CI) {
5285  ConstantInt *CaseVal = CI->getCaseValue();
5286  if (CaseVal->getValue().slt(MinCaseVal->getValue()))
5287  MinCaseVal = CaseVal;
5288  if (CaseVal->getValue().sgt(MaxCaseVal->getValue()))
5289  MaxCaseVal = CaseVal;
5290 
5291  // Resulting value at phi nodes for this case value.
5292  using ResultsTy = SmallVector<std::pair<PHINode *, Constant *>, 4>;
5293  ResultsTy Results;
5294  if (!GetCaseResults(SI, CaseVal, CI->getCaseSuccessor(), &CommonDest,
5295  Results, DL, TTI))
5296  return false;
5297 
5298  // Append the result from this case to the list for each phi.
5299  for (const auto &I : Results) {
5300  PHINode *PHI = I.first;
5301  Constant *Value = I.second;
5302  if (!ResultLists.count(PHI))
5303  PHIs.push_back(PHI);
5304  ResultLists[PHI].push_back(std::make_pair(CaseVal, Value));
5305  }
5306  }
5307 
5308  // Keep track of the result types.
5309  for (PHINode *PHI : PHIs) {
5310  ResultTypes[PHI] = ResultLists[PHI][0].second->getType();
5311  }
5312 
5313  uint64_t NumResults = ResultLists[PHIs[0]].size();
5314  APInt RangeSpread = MaxCaseVal->getValue() - MinCaseVal->getValue();
5315  uint64_t TableSize = RangeSpread.getLimitedValue() + 1;
5316  bool TableHasHoles = (NumResults < TableSize);
5317 
5318  // If the table has holes, we need a constant result for the default case
5319  // or a bitmask that fits in a register.
5320  SmallVector<std::pair<PHINode *, Constant *>, 4> DefaultResultsList;
5321  bool HasDefaultResults =
5322  GetCaseResults(SI, nullptr, SI->getDefaultDest(), &CommonDest,
5323  DefaultResultsList, DL, TTI);
5324 
5325  bool NeedMask = (TableHasHoles && !HasDefaultResults);
5326  if (NeedMask) {
5327  // As an extra penalty for the validity test we require more cases.
5328  if (SI->getNumCases() < 4) // FIXME: Find best threshold value (benchmark).
5329  return false;
5330  if (!DL.fitsInLegalInteger(TableSize))
5331  return false;
5332  }
5333 
5334  for (const auto &I : DefaultResultsList) {
5335  PHINode *PHI = I.first;
5336  Constant *Result = I.second;
5337  DefaultResults[PHI] = Result;
5338  }
5339 
5340  if (!ShouldBuildLookupTable(SI, TableSize, TTI, DL, ResultTypes))
5341  return false;
5342 
5343  // Create the BB that does the lookups.
5344  Module &Mod = *CommonDest->getParent()->getParent();
5345  BasicBlock *LookupBB = BasicBlock::Create(
5346  Mod.getContext(), "switch.lookup", CommonDest->getParent(), CommonDest);
5347 
5348  // Compute the table index value.
5349  Builder.SetInsertPoint(SI);
5350  Value *TableIndex;
5351  if (MinCaseVal->isNullValue())
5352  TableIndex = SI->getCondition();
5353  else
5354  TableIndex = Builder.CreateSub(SI->getCondition(), MinCaseVal,
5355  "switch.tableidx");
5356 
5357  // Compute the maximum table size representable by the integer type we are
5358  // switching upon.
5359  unsigned CaseSize = MinCaseVal->getType()->getPrimitiveSizeInBits();
5360  uint64_t MaxTableSize = CaseSize > 63 ? UINT64_MAX : 1ULL << CaseSize;
5361  assert(MaxTableSize >= TableSize &&
5362  "It is impossible for a switch to have more entries than the max "
5363  "representable value of its input integer type's size.");
5364 
5365  // If the default destination is unreachable, or if the lookup table covers
5366  // all values of the conditional variable, branch directly to the lookup table
5367  // BB. Otherwise, check that the condition is within the case range.
5368  const bool DefaultIsReachable =
5369  !isa<UnreachableInst>(SI->getDefaultDest()->getFirstNonPHIOrDbg());
5370  const bool GeneratingCoveredLookupTable = (MaxTableSize == TableSize);
5371  BranchInst *RangeCheckBranch = nullptr;
5372 
5373  if (!DefaultIsReachable || GeneratingCoveredLookupTable) {
5374  Builder.CreateBr(LookupBB);
5375  // Note: We call removeProdecessor later since we need to be able to get the
5376  // PHI value for the default case in case we're using a bit mask.
5377  } else {
5378  Value *Cmp = Builder.CreateICmpULT(
5379  TableIndex, ConstantInt::get(MinCaseVal->getType(), TableSize));
5380  RangeCheckBranch =
5381  Builder.CreateCondBr(Cmp, LookupBB, SI->getDefaultDest());
5382  }
5383 
5384  // Populate the BB that does the lookups.
5385  Builder.SetInsertPoint(LookupBB);
5386 
5387  if (NeedMask) {
5388  // Before doing the lookup, we do the hole check. The LookupBB is therefore
5389  // re-purposed to do the hole check, and we create a new LookupBB.
5390  BasicBlock *MaskBB = LookupBB;
5391  MaskBB->setName("switch.hole_check");
5392  LookupBB = BasicBlock::Create(Mod.getContext(), "switch.lookup",
5393  CommonDest->getParent(), CommonDest);
5394 
5395  // Make the mask's bitwidth at least 8-bit and a power-of-2 to avoid
5396  // unnecessary illegal types.
5397  uint64_t TableSizePowOf2 = NextPowerOf2(std::max(7ULL, TableSize - 1ULL));
5398  APInt MaskInt(TableSizePowOf2, 0);
5399  APInt One(TableSizePowOf2, 1);
5400  // Build bitmask; fill in a 1 bit for every case.
5401  const ResultListTy &ResultList = ResultLists[PHIs[0]];
5402  for (size_t I = 0, E = ResultList.size(); I != E; ++I) {
5403  uint64_t Idx = (ResultList[I].first->getValue() - MinCaseVal->getValue())
5404  .getLimitedValue();
5405  MaskInt |= One << Idx;
5406  }
5407  ConstantInt *TableMask = ConstantInt::get(Mod.getContext(), MaskInt);
5408 
5409  // Get the TableIndex'th bit of the bitmask.
5410  // If this bit is 0 (meaning hole) jump to the default destination,
5411  // else continue with table lookup.
5412  IntegerType *MapTy = TableMask->getType();
5413  Value *MaskIndex =
5414  Builder.CreateZExtOrTrunc(TableIndex, MapTy, "switch.maskindex");
5415  Value *Shifted = Builder.CreateLShr(TableMask, MaskIndex, "switch.shifted");
5416  Value *LoBit = Builder.CreateTrunc(
5417  Shifted, Type::getInt1Ty(Mod.getContext()), "switch.lobit");
5418  Builder.CreateCondBr(LoBit, LookupBB, SI->getDefaultDest());
5419 
5420  Builder.SetInsertPoint(LookupBB);
5421  AddPredecessorToBlock(SI->getDefaultDest(), MaskBB, SI->getParent());
5422  }
5423 
5424  if (!DefaultIsReachable || GeneratingCoveredLookupTable) {
5425  // We cached PHINodes in PHIs. To avoid accessing deleted PHINodes later,
5426  // do not delete PHINodes here.
5428  /*DontDeleteUselessPHIs=*/true);
5429  }
5430 
5431  bool ReturnedEarly = false;
5432  for (PHINode *PHI : PHIs) {
5433  const ResultListTy &ResultList = ResultLists[PHI];
5434 
5435  // If using a bitmask, use any value to fill the lookup table holes.
5436  Constant *DV = NeedMask ? ResultLists[PHI][0].second : DefaultResults[PHI];
5437  StringRef FuncName = Fn->getName();
5438  SwitchLookupTable Table(Mod, TableSize, MinCaseVal, ResultList, DV, DL,
5439  FuncName);
5440 
5441  Value *Result = Table.BuildLookup(TableIndex, Builder);
5442 
5443  // If the result is used to return immediately from the function, we want to
5444  // do that right here.
5445  if (PHI->hasOneUse() && isa<ReturnInst>(*PHI->user_begin()) &&
5446  PHI->user_back() == CommonDest->getFirstNonPHIOrDbg()) {
5447  Builder.CreateRet(Result);
5448  ReturnedEarly = true;
5449  break;
5450  }
5451 
5452  // Do a small peephole optimization: re-use the switch table compare if
5453  // possible.
5454  if (!TableHasHoles && HasDefaultResults && RangeCheckBranch) {
5455  BasicBlock *PhiBlock = PHI->getParent();
5456  // Search for compare instructions which use the phi.
5457  for (auto *User : PHI->users()) {
5458  reuseTableCompare(User, PhiBlock, RangeCheckBranch, DV, ResultList);
5459  }
5460  }
5461 
5462  PHI->addIncoming(Result, LookupBB);
5463  }
5464 
5465  if (!ReturnedEarly)
5466  Builder.CreateBr(CommonDest);
5467 
5468  // Remove the switch.
5469  for (unsigned i = 0, e = SI->getNumSuccessors(); i < e; ++i) {
5470  BasicBlock *Succ = SI->getSuccessor(i);
5471 
5472  if (Succ == SI->getDefaultDest())
5473  continue;
5474  Succ->removePredecessor(SI->getParent());
5475  }
5476  SI->eraseFromParent();
5477 
5478  ++NumLookupTables;
5479  if (NeedMask)
5480  ++NumLookupTablesHoles;
5481  return true;
5482 }
5483 
5484 static bool isSwitchDense(ArrayRef<int64_t> Values) {
5485  // See also SelectionDAGBuilder::isDense(), which this function was based on.
5486  uint64_t Diff = (uint64_t)Values.back() - (uint64_t)Values.front();
5487  uint64_t Range = Diff + 1;
5488  uint64_t NumCases = Values.size();
5489  // 40% is the default density for building a jump table in optsize/minsize mode.
5490  uint64_t MinDensity = 40;
5491 
5492  return NumCases * 100 >= Range * MinDensity;
5493 }
5494 
5495 /// Try to transform a switch that has "holes" in it to a contiguous sequence
5496 /// of cases.
5497 ///
5498 /// A switch such as: switch(i) {case 5: case 9: case 13: case 17:} can be
5499 /// range-reduced to: switch ((i-5) / 4) {case 0: case 1: case 2: case 3:}.
5500 ///
5501 /// This converts a sparse switch into a dense switch which allows better
5502 /// lowering and could also allow transforming into a lookup table.
5504  const DataLayout &DL,
5505  const TargetTransformInfo &TTI) {
5506  auto *CondTy = cast<IntegerType>(SI->getCondition()->getType());
5507  if (CondTy->getIntegerBitWidth() > 64 ||
5508  !DL.fitsInLegalInteger(CondTy->getIntegerBitWidth()))
5509  return false;
5510  // Only bother with this optimization if there are more than 3 switch cases;
5511  // SDAG will only bother creating jump tables for 4 or more cases.
5512  if (SI->getNumCases() < 4)
5513  return false;
5514 
5515  // This transform is agnostic to the signedness of the input or case values. We
5516  // can treat the case values as signed or unsigned. We can optimize more common
5517  // cases such as a sequence crossing zero {-4,0,4,8} if we interpret case values
5518  // as signed.
5519  SmallVector<int64_t,4> Values;
5520  for (auto &C : SI->cases())
5521  Values.push_back(C.getCaseValue()->getValue().getSExtValue());
5522  llvm::sort(Values);
5523 
5524  // If the switch is already dense, there's nothing useful to do here.
5525  if (isSwitchDense(Values))
5526  return false;
5527 
5528  // First, transform the values such that they start at zero and ascend.
5529  int64_t Base = Values[0];
5530  for (auto &V : Values)
5531  V -= (uint64_t)(Base);
5532 
5533  // Now we have signed numbers that have been shifted so that, given enough
5534  // precision, there are no negative values. Since the rest of the transform
5535  // is bitwise only, we switch now to an unsigned representation.
5536  uint64_t GCD = 0;
5537  for (auto &V : Values)
5538  GCD = GreatestCommonDivisor64(GCD, (uint64_t)V);
5539 
5540  // This transform can be done speculatively because it is so cheap - it results
5541  // in a single rotate operation being inserted. This can only happen if the
5542  // factor extracted is a power of 2.
5543  // FIXME: If the GCD is an odd number we can multiply by the multiplicative
5544  // inverse of GCD and then perform this transform.
5545  // FIXME: It's possible that optimizing a switch on powers of two might also
5546  // be beneficial - flag values are often powers of two and we could use a CLZ
5547  // as the key function.
5548  if (GCD <= 1 || !isPowerOf2_64(GCD))
5549  // No common divisor found or too expensive to compute key function.
5550  return false;
5551 
5552  unsigned Shift = Log2_64(GCD);
5553  for (auto &V : Values)
5554  V = (int64_t)((uint64_t)V >> Shift);
5555 
5556  if (!isSwitchDense(Values))
5557  // Transform didn't create a dense switch.
5558  return false;
5559 
5560  // The obvious transform is to shift the switch condition right and emit a
5561  // check that the condition actually cleanly divided by GCD, i.e.
5562  // C & (1 << Shift - 1) == 0
5563  // inserting a new CFG edge to handle the case where it didn't divide cleanly.
5564  //
5565  // A cheaper way of doing this is a simple ROTR(C, Shift). This performs the
5566  // shift and puts the shifted-off bits in the uppermost bits. If any of these
5567  // are nonzero then the switch condition will be very large and will hit the
5568  // default case.
5569 
5570  auto *Ty = cast<IntegerType>(SI->getCondition()->getType());
5571  Builder.SetInsertPoint(SI);
5572  auto *ShiftC = ConstantInt::get(Ty, Shift);
5573  auto *Sub = Builder.CreateSub(SI->getCondition(), ConstantInt::get(Ty, Base));
5574  auto *LShr = Builder.CreateLShr(Sub, ShiftC);
5575  auto *Shl = Builder.CreateShl(Sub, Ty->getBitWidth() - Shift);
5576  auto *Rot = Builder.CreateOr(LShr, Shl);
5577  SI->replaceUsesOfWith(SI->getCondition(), Rot);
5578 
5579  for (auto Case : SI->cases()) {
5580  auto *Orig = Case.getCaseValue();
5581  auto Sub = Orig->getValue() - APInt(Ty->getBitWidth(), Base);
5582  Case.setValue(
5583  cast<ConstantInt>(ConstantInt::get(Ty, Sub.lshr(ShiftC->getValue()))));
5584  }
5585  return true;
5586 }
5587 
5588 bool SimplifyCFGOpt::SimplifySwitch(SwitchInst *SI, IRBuilder<> &Builder) {
5589  BasicBlock *BB = SI->getParent();
5590 
5591  if (isValueEqualityComparison(SI)) {
5592  // If we only have one predecessor, and if it is a branch on this value,
5593  // see if that predecessor totally determines the outcome of this switch.
5594  if (BasicBlock *OnlyPred = BB->getSinglePredecessor())
5595  if (SimplifyEqualityComparisonWithOnlyPredecessor(SI, OnlyPred, Builder))
5596  return requestResimplify();
5597 
5598  Value *Cond = SI->getCondition();
5599  if (SelectInst *Select = dyn_cast<SelectInst>(Cond))
5600  if (SimplifySwitchOnSelect(SI, Select))
5601  return requestResimplify();
5602 
5603  // If the block only contains the switch, see if we can fold the block
5604  // away into any preds.
5605  if (SI == &*BB->instructionsWithoutDebug().begin())
5606  if (FoldValueComparisonIntoPredecessors(SI, Builder))
5607  return requestResimplify();
5608  }
5609 
5610  // Try to transform the switch into an icmp and a branch.
5611  if (TurnSwitchRangeIntoICmp(SI, Builder))
5612  return requestResimplify();
5613 
5614  // Remove unreachable cases.
5615  if (eliminateDeadSwitchCases(SI, Options.AC, DL))
5616  return requestResimplify();
5617 
5618  if (switchToSelect(SI, Builder, DL, TTI))
5619  return requestResimplify();
5620 
5621  if (Options.ForwardSwitchCondToPhi && ForwardSwitchConditionToPHI(SI))
5622  return requestResimplify();
5623 
5624  // The conversion from switch to lookup tables results in difficult-to-analyze
5625  // code and makes pruning branches much harder. This is a problem if the
5626  // switch expression itself can still be restricted as a result of inlining or
5627  // CVP. Therefore, only apply this transformation during late stages of the
5628  // optimisation pipeline.
5629  if (Options.ConvertSwitchToLookupTable &&
5630  SwitchToLookupTable(SI, Builder, DL, TTI))
5631  return requestResimplify();
5632 
5633  if (ReduceSwitchRange(SI, Builder, DL, TTI))
5634  return requestResimplify();
5635 
5636  return false;
5637 }
5638 
5639 bool SimplifyCFGOpt::SimplifyIndirectBr(IndirectBrInst *IBI) {
5640  BasicBlock *BB = IBI->getParent();
5641  bool Changed = false;
5642 
5643  // Eliminate redundant destinations.
5645  for (unsigned i = 0, e = IBI->getNumDestinations(); i != e; ++i) {
5646  BasicBlock *Dest = IBI->getDestination(i);
5647  if (!Dest->hasAddressTaken() || !Succs.insert(Dest).second) {
5648  Dest->removePredecessor(BB);
5649  IBI->removeDestination(i);
5650  --i;
5651  --e;
5652  Changed = true;
5653  }
5654  }
5655 
5656  if (IBI->getNumDestinations() == 0) {
5657  // If the indirectbr has no successors, change it to unreachable.
5658  new UnreachableInst(IBI->getContext(), IBI);
5660  return true;
5661  }
5662 
5663  if (IBI->getNumDestinations() == 1) {
5664  // If the indirectbr has one successor, change it to a direct branch.
5665  BranchInst::Create(IBI->getDestination(0), IBI);
5667  return true;
5668  }
5669 
5670  if (SelectInst *SI = dyn_cast<SelectInst>(IBI->getAddress())) {
5671  if (SimplifyIndirectBrOnSelect(IBI, SI))
5672  return requestResimplify();
5673  }
5674  return Changed;
5675 }
5676 
5677 /// Given an block with only a single landing pad and a unconditional branch
5678 /// try to find another basic block which this one can be merged with. This
5679 /// handles cases where we have multiple invokes with unique landing pads, but
5680 /// a shared handler.
5681 ///
5682 /// We specifically choose to not worry about merging non-empty blocks
5683 /// here. That is a PRE/scheduling problem and is best solved elsewhere. In
5684 /// practice, the optimizer produces empty landing pad blocks quite frequently
5685 /// when dealing with exception dense code. (see: instcombine, gvn, if-else
5686 /// sinking in this file)
5687 ///
5688 /// This is primarily a code size optimization. We need to avoid performing
5689 /// any transform which might inhibit optimization (such as our ability to
5690 /// specialize a particular handler via tail commoning). We do this by not
5691 /// merging any blocks which require us to introduce a phi. Since the same
5692 /// values are flowing through both blocks, we don't lose any ability to
5693 /// specialize. If anything, we make such specialization more likely.
5694 ///
5695 /// TODO - This transformation could remove entries from a phi in the target
5696 /// block when the inputs in the phi are the same for the two blocks being
5697 /// merged. In some cases, this could result in removal of the PHI entirely.
5699  BasicBlock *BB) {
5700  auto Succ = BB->getUniqueSuccessor();
5701  assert(Succ);
5702  // If there's a phi in the successor block, we'd likely have to introduce
5703  // a phi into the merged landing pad block.
5704  if (isa<PHINode>(*Succ->begin()))
5705  return false;
5706 
5707  for (BasicBlock *OtherPred : predecessors(Succ)) {
5708  if (BB == OtherPred)
5709  continue;
5710  BasicBlock::iterator I = OtherPred->begin();
5712  if (!LPad2 || !LPad2->isIdenticalTo(LPad))
5713  continue;
5714  for (++I; isa<DbgInfoIntrinsic>(I); ++I)
5715  ;
5716  BranchInst *BI2 = dyn_cast<BranchInst>(I);
5717  if (!BI2 || !BI2->isIdenticalTo(BI))
5718  continue;
5719 
5720  // We've found an identical block. Update our predecessors to take that
5721  // path instead and make ourselves dead.
5723  Preds.insert(pred_begin(BB), pred_end(BB));
5724  for (BasicBlock *Pred : Preds) {
5725  InvokeInst *II = cast<InvokeInst>(Pred->getTerminator());
5726  assert(II->getNormalDest() != BB && II->getUnwindDest() == BB &&
5727  "unexpected successor");
5728  II->setUnwindDest(OtherPred);
5729  }
5730 
5731  // The debug info in OtherPred doesn't cover the merged control flow that
5732  // used to go through BB. We need to delete it or update it.
5733  for (auto I = OtherPred->begin(), E = OtherPred->end(); I != E;) {
5734  Instruction &Inst = *I;
5735  I++;
5736  if (isa<DbgInfoIntrinsic>(Inst))
5737  Inst.eraseFromParent();
5738  }
5739 
5741  Succs.insert(succ_begin(BB), succ_end(BB));
5742  for (BasicBlock *Succ : Succs) {
5743  Succ->removePredecessor(BB);
5744  }
5745 
5746  IRBuilder<> Builder(BI);
5747  Builder.CreateUnreachable();
5748  BI->eraseFromParent();
5749  return true;
5750  }
5751  return false;
5752 }
5753 
5754 bool SimplifyCFGOpt::SimplifyUncondBranch(BranchInst *BI,
5755  IRBuilder<> &Builder) {
5756  BasicBlock *BB = BI->getParent();
5757  BasicBlock *Succ = BI->getSuccessor(0);
5758 
5759  // If the Terminator is the only non-phi instruction, simplify the block.
5760  // If LoopHeader is provided, check if the block or its successor is a loop
5761  // header. (This is for early invocations before loop simplify and
5762  // vectorization to keep canonical loop forms for nested loops. These blocks
5763  // can be eliminated when the pass is invoked later in the back-end.)
5764  // Note that if BB has only one predecessor then we do not introduce new
5765  // backedge, so we can eliminate BB.
5766  bool NeedCanonicalLoop =
5767  Options.NeedCanonicalLoop &&
5768  (LoopHeaders && BB->hasNPredecessorsOrMore(2) &&
5769  (LoopHeaders->count(BB) || LoopHeaders->count(Succ)));
5771  if (I->isTerminator() && BB != &BB->getParent()->getEntryBlock() &&
5772  !NeedCanonicalLoop && TryToSimplifyUncondBranchFromEmptyBlock(BB))
5773  return true;
5774 
5775  // If the only instruction in the block is a seteq/setne comparison against a
5776  // constant, try to simplify the block.
5777  if (ICmpInst *ICI = dyn_cast<ICmpInst>(I))
5778  if (ICI->isEquality() && isa<ConstantInt>(ICI->getOperand(1))) {
5779  for (++I; isa<DbgInfoIntrinsic>(I); ++I)
5780  ;
5781  if (I->isTerminator() &&
5782  tryToSimplifyUncondBranchWithICmpInIt(ICI, Builder))
5783  return true;
5784  }
5785 
5786  // See if we can merge an empty landing pad block with another which is
5787  // equivalent.
5788  if (LandingPadInst *LPad = dyn_cast<LandingPadInst>(I)) {
5789  for (++I; isa<DbgInfoIntrinsic>(I); ++I)
5790  ;
5791  if (I->isTerminator() && TryToMergeLandingPad(LPad, BI, BB))
5792  return true;
5793  }
5794 
5795  // If this basic block is ONLY a compare and a branch, and if a predecessor
5796  // branches to us and our successor, fold the comparison into the
5797  // predecessor and use logical operations to update the incoming value
5798  // for PHI nodes in common successor.
5799  if (FoldBranchToCommonDest(BI, Options.BonusInstThreshold))
5800  return requestResimplify();
5801  return false;
5802 }
5803 
5805  BasicBlock *PredPred = nullptr;
5806  for (auto *P : predecessors(BB)) {
5807  BasicBlock *PPred = P->getSinglePredecessor();
5808  if (!PPred || (PredPred && PredPred != PPred))
5809  return nullptr;
5810  PredPred = PPred;
5811  }
5812  return PredPred;
5813 }
5814 
5815 bool SimplifyCFGOpt::SimplifyCondBranch(BranchInst *BI, IRBuilder<> &Builder) {
5816  BasicBlock *BB = BI->getParent();
5817  const Function *Fn = BB->getParent();
5819  return false;
5820 
5821  // Conditional branch
5822  if (isValueEqualityComparison(BI)) {
5823  // If we only have one predecessor, and if it is a branch on this value,
5824  // see if that predecessor totally determines the outcome of this
5825  // switch.
5826  if (BasicBlock *OnlyPred = BB->getSinglePredecessor())
5827  if (SimplifyEqualityComparisonWithOnlyPredecessor(BI, OnlyPred, Builder))
5828  return requestResimplify();
5829 
5830  // This block must be empty, except for the setcond inst, if it exists.
5831  // Ignore dbg intrinsics.
5832  auto I = BB->instructionsWithoutDebug().begin();
5833  if (&*I == BI) {
5834  if (FoldValueComparisonIntoPredecessors(BI, Builder))
5835  return requestResimplify();
5836  } else if (&*I == cast<Instruction>(BI->getCondition())) {
5837  ++I;
5838  if (&*I == BI && FoldValueComparisonIntoPredecessors(BI, Builder))
5839  return requestResimplify();
5840  }
5841  }
5842 
5843  // Try to turn "br (X == 0 | X == 1), T, F" into a switch instruction.
5844  if (SimplifyBranchOnICmpChain(BI, Builder, DL))
5845  return true;
5846 
5847  // If this basic block has dominating predecessor blocks and the dominating
5848  // blocks' conditions imply BI's condition, we know the direction of BI.
5850  if (Imp) {
5851  // Turn this into a branch on constant.
5852  auto *OldCond = BI->getCondition();
5853  ConstantInt *TorF = *Imp ? ConstantInt::getTrue(BB->getContext())
5855  BI->setCondition(TorF);
5857  return requestResimplify();
5858  }
5859 
5860  // If this basic block is ONLY a compare and a branch, and if a predecessor
5861  // branches to us and one of our successors, fold the comparison into the
5862  // predecessor and use logical operations to pick the right destination.
5863  if (FoldBranchToCommonDest(BI, Options.BonusInstThreshold))
5864  return requestResimplify();
5865 
5866  // We have a conditional branch to two blocks that are only reachable
5867  // from BI. We know that the condbr dominates the two blocks, so see if
5868  // there is any identical code in the "then" and "else" blocks. If so, we
5869  // can hoist it up to the branching block.
5870  if (BI->getSuccessor(0)->getSinglePredecessor()) {
5871  if (BI->getSuccessor(1)->getSinglePredecessor()) {
5872  if (HoistThenElseCodeToIf(BI, TTI))
5873  return requestResimplify();
5874  } else {
5875  // If Successor #1 has multiple preds, we may be able to conditionally
5876  // execute Successor #0 if it branches to Successor #1.
5877  Instruction *Succ0TI = BI->getSuccessor(0)->getTerminator();
5878  if (Succ0TI->getNumSuccessors() == 1 &&
5879  Succ0TI->getSuccessor(0) == BI->getSuccessor(1))
5880  if (SpeculativelyExecuteBB(BI, BI->getSuccessor(0), TTI))
5881  return requestResimplify();
5882  }
5883  } else if (BI->getSuccessor(1)->getSinglePredecessor()) {
5884  // If Successor #0 has multiple preds, we may be able to conditionally
5885  // execute Successor #1 if it branches to Successor #0.
5886  Instruction *Succ1TI = BI->getSuccessor(1)->getTerminator();
5887  if (Succ1TI->getNumSuccessors() == 1 &&
5888  Succ1TI->getSuccessor(0) == BI->getSuccessor(0))
5889  if (SpeculativelyExecuteBB(BI, BI->getSuccessor(1), TTI))
5890  return requestResimplify();
5891  }
5892 
5893  // If this is a branch on a phi node in the current block, thread control
5894  // through this block if any PHI node entries are constants.
5895  if (PHINode *PN = dyn_cast<PHINode>(BI->getCondition()))
5896  if (PN->getParent() == BI->getParent())
5897  if (FoldCondBranchOnPHI(BI, DL, Options.AC))
5898  return requestResimplify();
5899 
5900  // Scan predecessor blocks for conditional branches.
5901  for (pred_iterator PI = pred_begin(BB), E = pred_end(BB); PI != E; ++PI)
5902  if (BranchInst *PBI = dyn_cast<BranchInst>((*PI)->getTerminator()))
5903  if (PBI != BI && PBI->isConditional())
5904  if (SimplifyCondBranchToCondBranch(PBI, BI, DL))
5905  return requestResimplify();
5906 
5907  // Look for diamond patterns.
5908  if (MergeCondStores)
5910  if (BranchInst *PBI = dyn_cast<BranchInst>(PrevBB->getTerminator()))
5911  if (PBI != BI && PBI->isConditional())
5912  if (mergeConditionalStores(PBI, BI, DL))
5913  return requestResimplify();
5914 
5915  return false;
5916 }
5917 
5918 /// Check if passing a value to an instruction will cause undefined behavior.
5920  Constant *C = dyn_cast<Constant>(V);
5921  if (!C)
5922  return false;
5923 
5924  if (I->use_empty())
5925  return false;
5926 
5927  if (C->isNullValue() || isa<UndefValue>(C)) {
5928  // Only look at the first use, avoid hurting compile time with long uselists
5929  User *Use = *I->user_begin();
5930 
5931  // Now make sure that there are no instructions in between that can alter
5932  // control flow (eg. calls)
5934  i = ++BasicBlock::iterator(I),
5935  UI = BasicBlock::iterator(dyn_cast<Instruction>(Use));
5936  i != UI; ++i)
5937  if (i == I->getParent()->end() || i->mayHaveSideEffects())
5938  return false;
5939 
5940  // Look through GEPs. A load from a GEP derived from NULL is still undefined
5941  if (GetElementPtrInst *GEP = dyn_cast<GetElementPtrInst>(Use))
5942  if (GEP->getPointerOperand() == I)
5944 
5945  // Look through bitcasts.
5946  if (BitCastInst *BC = dyn_cast<BitCastInst>(Use))
5947  return passingValueIsAlwaysUndefined(V, BC);
5948 
5949  // Load from null is undefined.
5950  if (LoadInst *LI = dyn_cast<LoadInst>(Use))
5951  if (!LI->isVolatile())
5952  return !NullPointerIsDefined(LI->getFunction(),
5953  LI->getPointerAddressSpace());
5954 
5955  // Store to null is undefined.
5956  if (StoreInst *SI = dyn_cast<StoreInst>(Use))
5957  if (!SI->isVolatile())
5958  return (!NullPointerIsDefined(SI->getFunction(),
5959  SI->getPointerAddressSpace())) &&
5960  SI->getPointerOperand() == I;
5961 
5962  // A call to null is undefined.
5963  if (auto CS = CallSite(Use))
5964  return !NullPointerIsDefined(CS->getFunction()) &&
5965  CS.getCalledValue() == I;
5966  }
5967  return false;
5968 }
5969 
5970 /// If BB has an incoming value that will always trigger undefined behavior
5971 /// (eg. null pointer dereference), remove the branch leading here.
5973  for (PHINode &PHI : BB->phis())
5974  for (unsigned i = 0, e = PHI.getNumIncomingValues(); i != e; ++i)
5975  if (passingValueIsAlwaysUndefined(PHI.getIncomingValue(i), &PHI)) {
5976  Instruction *T = PHI.getIncomingBlock(i)->getTerminator();
5977  IRBuilder<> Builder(T);
5978  if (BranchInst *BI = dyn_cast<BranchInst>(T)) {
5979  BB->removePredecessor(PHI.getIncomingBlock(i));
5980  // Turn uncoditional branches into unreachables and remove the dead
5981  // destination from conditional branches.
5982  if (BI->isUnconditional())
5983  Builder.CreateUnreachable();
5984  else
5985  Builder.CreateBr(BI->getSuccessor(0) == BB ? BI->getSuccessor(1)
5986  : BI->getSuccessor(0));
5987  BI->eraseFromParent();
5988  return true;
5989  }
5990  // TODO: SwitchInst.
5991  }
5992 
5993  return false;
5994 }
5995 
5996 bool SimplifyCFGOpt::simplifyOnce(BasicBlock *BB) {
5997  bool Changed = false;
5998 
5999  assert(BB && BB->getParent() && "Block not embedded in function!");
6000  assert(BB->getTerminator() && "Degenerate basic block encountered!");
6001 
6002  // Remove basic blocks that have no predecessors (except the entry block)...
6003  // or that just have themself as a predecessor. These are unreachable.
6004  if ((pred_empty(BB) && BB != &BB->getParent()->getEntryBlock()) ||
6005  BB->getSinglePredecessor() == BB) {
6006  LLVM_DEBUG(dbgs() << "Removing BB: \n" << *BB);
6007  DeleteDeadBlock(BB);
6008  return true;
6009  }
6010 
6011  // Check to see if we can constant propagate this terminator instruction
6012  // away...
6013  Changed |= ConstantFoldTerminator(BB, true);
6014 
6015  // Check for and eliminate duplicate PHI nodes in this block.
6016  Changed |= EliminateDuplicatePHINodes(BB);
6017 
6018  // Check for and remove branches that will always cause undefined behavior.
6019  Changed |= removeUndefIntroducingPredecessor(BB);
6020 
6021  // Merge basic blocks into their predecessor if there is only one distinct
6022  // pred, and if there is only one distinct successor of the predecessor, and
6023  // if there are no PHI nodes.
6024  if (MergeBlockIntoPredecessor(BB))
6025  return true;
6026 
6027  if (SinkCommon && Options.SinkCommonInsts)
6028  Changed |= SinkCommonCodeFromPredecessors(BB);
6029 
6030  IRBuilder<> Builder(BB);
6031 
6032  // If there is a trivial two-entry PHI node in this basic block, and we can
6033  // eliminate it, do so now.
6034  if (auto *PN = dyn_cast<PHINode>(BB->begin()))
6035  if (PN->getNumIncomingValues() == 2)
6036  Changed |= FoldTwoEntryPHINode(PN, TTI, DL);
6037 
6038  Builder.SetInsertPoint(BB->getTerminator());
6039  if (auto *BI = dyn_cast<BranchInst>(BB->getTerminator())) {
6040  if (BI->isUnconditional()) {
6041  if (SimplifyUncondBranch(BI, Builder))
6042  return true;
6043  } else {
6044  if (SimplifyCondBranch(BI, Builder))
6045  return true;
6046  }
6047  } else if (auto *RI = dyn_cast<ReturnInst>(BB->getTerminator())) {
6048  if (SimplifyReturn(RI, Builder))
6049  return true;
6050  } else if (auto *RI = dyn_cast<ResumeInst>(BB->getTerminator())) {
6051  if (SimplifyResume(RI, Builder))
6052  return true;
6053  } else if (auto *RI = dyn_cast<CleanupReturnInst>(BB->getTerminator())) {
6054  if (SimplifyCleanupReturn(RI))
6055  return true;
6056  } else if (auto *SI = dyn_cast<SwitchInst>(BB->getTerminator())) {
6057  if (SimplifySwitch(SI, Builder))
6058  return true;
6059  } else if (auto *UI = dyn_cast<UnreachableInst>(BB->getTerminator())) {
6060  if (SimplifyUnreachable(UI))
6061  return true;
6062  } else if (auto *IBI = dyn_cast<IndirectBrInst>(BB->getTerminator())) {
6063  if (SimplifyIndirectBr(IBI))
6064  return true;
6065  }
6066 
6067  return Changed;
6068 }
6069 
6070 bool SimplifyCFGOpt::run(BasicBlock *BB) {
6071  bool Changed = false;
6072 
6073  // Repeated simplify BB as long as resimplification is requested.
6074  do {
6075  Resimplify = false;
6076 
6077  // Perform one round of simplifcation. Resimplify flag will be set if
6078  // another iteration is requested.
6079  Changed |= simplifyOnce(BB);
6080  } while (Resimplify);
6081 
6082  return Changed;
6083 }
6084 
6086  const SimplifyCFGOptions &Options,
6087  SmallPtrSetImpl<BasicBlock *> *LoopHeaders) {
6088  return SimplifyCFGOpt(TTI, BB->getModule()->getDataLayout(), LoopHeaders,
6089  Options)
6090  .run(BB);
6091 }
const T & front() const
front - Get the first element.
Definition: ArrayRef.h:152
Value * CreateInBoundsGEP(Value *Ptr, ArrayRef< Value *> IdxList, const Twine &Name="")
Definition: IRBuilder.h:1477
BinaryOp_match< LHS, RHS, Instruction::And > m_And(const LHS &L, const RHS &R)
Definition: PatternMatch.h:749
uint64_t CallInst * C
Return a value (possibly void), from a function.
void computeKnownBits(const Value *V, KnownBits &Known, const DataLayout &DL, unsigned Depth=0, AssumptionCache *AC=nullptr, const Instruction *CxtI=nullptr, const DominatorTree *DT=nullptr, OptimizationRemarkEmitter *ORE=nullptr, bool UseInstrInfo=true)
Determine which bits of V are known to be either zero or one and return them in the KnownZero/KnownOn...
Value * getValueOperand()
Definition: Instructions.h:410
unsigned getNumCases() const
Return the number of &#39;cases&#39; in this switch instruction, excluding the default case.
SymbolTableList< Instruction >::iterator eraseFromParent()
This method unlinks &#39;this&#39; from the containing basic block and deletes it.
Definition: Instruction.cpp:68
IntegerType * getType() const
getType - Specialize the getType() method to always return an IntegerType, which reduces the amount o...
Definition: Constants.h:172
A parsed version of the target data layout string in and methods for querying it. ...
Definition: DataLayout.h:111
static ConstantInt * getFalse(LLVMContext &Context)
Definition: Constants.cpp:585
BranchInst * CreateCondBr(Value *Cond, BasicBlock *True, BasicBlock *False, MDNode *BranchWeights=nullptr, MDNode *Unpredictable=nullptr)
Create a conditional &#39;br Cond, TrueDest, FalseDest&#39; instruction.
Definition: IRBuilder.h:854
class_match< Value > m_Value()
Match an arbitrary value and ignore it.
Definition: PatternMatch.h:71
bool cannotDuplicate() const
Determine if the invoke cannot be duplicated.
Definition: InstrTypes.h:1561
CaseIt case_end()
Returns a read/write iterator that points one past the last in the SwitchInst.
This class is the base class for the comparison instructions.
Definition: InstrTypes.h:636
iterator_range< use_iterator > uses()
Definition: Value.h:355
void removePredecessor(BasicBlock *Pred, bool DontDeleteUselessPHIs=false)
Notify the BasicBlock that the predecessor Pred is no longer able to reach it.
Definition: BasicBlock.cpp:302
bool isAllOnesValue() const
Return true if this is the value that would be returned by getAllOnesValue.
Definition: Constants.cpp:100
static IntegerType * getInt1Ty(LLVMContext &C)
Definition: Type.cpp:173
bool hasNPredecessors(unsigned N) const
Return true if this block has exactly N predecessors.
Definition: BasicBlock.cpp:261
CleanupPadInst * getCleanupPad() const
Convenience accessor.
void addIncoming(Value *V, BasicBlock *BB)
Add an incoming value to the end of the PHI list.
PointerUnion< const Value *, const PseudoSourceValue * > ValueType
uint64_t getZExtValue() const
Get zero extended value.
Definition: APInt.h:1563
Value * CreateBinOp(Instruction::BinaryOps Opc, Value *LHS, Value *RHS, const Twine &Name="", MDNode *FPMathTag=nullptr)
Definition: IRBuilder.h:1298
GCNRegPressure max(const GCNRegPressure &P1, const GCNRegPressure &P2)
iterator_range< CaseIt > cases()
Iteration adapter for range-for loops.
const T & back() const
back - Get the last element.
Definition: ArrayRef.h:158
DiagnosticInfoOptimizationBase::Argument NV
bool isSameOperationAs(const Instruction *I, unsigned flags=0) const
This function determines if the specified instruction executes the same operation as the current one...
uint64_t GreatestCommonDivisor64(uint64_t A, uint64_t B)
Return the greatest common divisor of the values using Euclid&#39;s algorithm.
Definition: MathExtras.h:563
Value * CreateZExtOrTrunc(Value *V, Type *DestTy, const Twine &Name="")
Create a ZExt or Trunc from the integer value V to DestTy.
Definition: IRBuilder.h:1669
This class represents lattice values for constants.
Definition: AllocatorList.h:24
const APInt & getUpper() const
Return the upper value for this range.
void swapSuccessors()
Swap the successors of this branch instruction.
Value * CreateICmpULT(Value *LHS, Value *RHS, const Twine &Name="")
Definition: IRBuilder.h:1855
bool ConstantFoldTerminator(BasicBlock *BB, bool DeleteDeadConditions=false, const TargetLibraryInfo *TLI=nullptr, DomTreeUpdater *DTU=nullptr)
If a terminator instruction is predicated on a constant value, convert it into an unconditional branc...
Definition: Local.cpp:106
LoadInst * CreateLoad(Type *Ty, Value *Ptr, const char *Name)
Provided to resolve &#39;CreateLoad(Ty, Ptr, "...")&#39; correctly, instead of converting the string to &#39;bool...
Definition: IRBuilder.h:1357
A Module instance is used to store all the information related to an LLVM module. ...
Definition: Module.h:65
void dropUnknownNonDebugMetadata(ArrayRef< unsigned > KnownIDs)
Drop all unknown metadata except for debug locations.
Definition: Metadata.cpp:1199
bool MergeBlockIntoPredecessor(BasicBlock *BB, DomTreeUpdater *DTU=nullptr, LoopInfo *LI=nullptr, MemorySSAUpdater *MSSAU=nullptr, MemoryDependenceResults *MemDep=nullptr)
Attempts to merge a block into its predecessor, if possible.
bool isConvergent() const
Determine if the invoke is convergent.
Definition: InstrTypes.h:1567
BasicBlock * getSuccessor(unsigned Idx) const
Return the specified successor. This instruction must be a terminator.
Optional< bool > isImpliedByDomCondition(const Value *Cond, const Instruction *ContextI, const DataLayout &DL)
Return the boolean condition value in the context of the given instruction if it is known based on do...
std::error_code remove(const Twine &path, bool IgnoreNonExisting=true)
Remove path.
bool isUnordered() const
Definition: Instructions.h:404
static bool isProfitableToFoldUnconditional(BranchInst *SI1, BranchInst *SI2, Instruction *Cond, SmallVectorImpl< PHINode *> &PhiNodes)
Return true if it is safe and profitable to merge these two terminator instructions together...
static bool removeUndefIntroducingPredecessor(BasicBlock *BB)
If BB has an incoming value that will always trigger undefined behavior (eg.
void addCase(ConstantInt *OnVal, BasicBlock *Dest)
Add an entry to the switch instruction.
APInt zext(unsigned width) const
Zero extend to a new width.
Definition: APInt.cpp:858
bool slt(const APInt &RHS) const
Signed less than comparison.
Definition: APInt.h:1204
This class represents a function call, abstracting a target machine&#39;s calling convention.
This file contains the declarations for metadata subclasses.
static bool GetCaseResults(SwitchInst *SI, ConstantInt *CaseVal, BasicBlock *CaseDest, BasicBlock **CommonDest, SmallVectorImpl< std::pair< PHINode *, Constant *>> &Res, const DataLayout &DL, const TargetTransformInfo &TTI)
Try to determine the resulting constant values in phi nodes at the common destination basic block...
bool isSizeLargerThan(uint64_t MaxSize) const
Value * getCondition() const
static bool isSafeToHoistInvoke(BasicBlock *BB1, BasicBlock *BB2, Instruction *I1, Instruction *I2)
static bool mergeCleanupPad(CleanupReturnInst *RI)
const Value * getTrueValue() const
CaseIt case_begin()
Returns a read/write iterator that points to the first case in the SwitchInst.
bool isSubsetOf(const APInt &RHS) const
This operation checks that all bits set in this APInt are also set in RHS.
Definition: APInt.h:1329
A cache of @llvm.assume calls within a function.
Like Internal, but omit from symbol table.
Definition: GlobalValue.h:57
Function Alias Analysis Results
void DeleteDeadBlock(BasicBlock *BB, DomTreeUpdater *DTU=nullptr)
Delete the specified block, which must have no predecessors.
LLVMContext & getContext() const
All values hold a context through their type.
Definition: Value.cpp:705
bool isTerminator() const
Definition: Instruction.h:129
static bool SimplifyCondBranchToCondBranch(BranchInst *PBI, BranchInst *BI, const DataLayout &DL)
If we have a conditional branch as a predecessor of another block, this function tries to simplify it...
void deleteValue()
Delete a pointer to a generic Value.
Definition: Value.cpp:98
bool hasFnAttribute(Attribute::AttrKind Kind) const
Return true if the function has the attribute.
Definition: Function.h:321
bool sgt(const APInt &RHS) const
Signed greather than comparison.
Definition: APInt.h:1274
static bool SimplifySwitchOnSelect(SwitchInst *SI, SelectInst *Select)
const Use & getOperandUse(unsigned i) const
Definition: User.h:183
unsigned second
static bool eliminateDeadSwitchCases(SwitchInst *SI, AssumptionCache *AC, const DataLayout &DL)
Compute masked bits for the condition of a switch and use it to remove dead cases.
bool all_of(R &&range, UnaryPredicate P)
Provide wrappers to std::all_of which take ranges instead of having to pass begin/end explicitly...
Definition: STLExtras.h:1186
static bool isEquality(Predicate P)
Return true if this predicate is either EQ or NE.
BasicBlock * getSuccessor(unsigned i) const
STATISTIC(NumFunctions, "Total number of functions")
static unsigned ComputeSpeculationCost(const Instruction *I, const TargetTransformInfo &TTI)
Metadata node.
Definition: Metadata.h:864
static StoreInst * findUniqueStoreInBlocks(BasicBlock *BB1, BasicBlock *BB2)
const MDOperand & getOperand(unsigned I) const
Definition: Metadata.h:1069
An instruction for reading from memory.
Definition: Instructions.h:168
Hexagon Common GEP
Value * getCondition() const
BasicBlock * getUnwindDest() const
const Instruction * getTerminator() const LLVM_READONLY
Returns the terminator instruction if the block is well formed or null if the block is not well forme...
Definition: BasicBlock.cpp:138
void setSuccessor(unsigned Idx, BasicBlock *BB)
Update the specified successor to point at the provided block.
static ConstantRange makeAllowedICmpRegion(CmpInst::Predicate Pred, const ConstantRange &Other)
Produce the smallest range such that all values that may satisfy the given predicate with any value c...
This defines the Use class.
std::size_t countLeadingZeros(T Val, ZeroBehavior ZB=ZB_Width)
Count number of 0&#39;s from the most significant bit to the least stopping at the first 1...
Definition: MathExtras.h:189
LLVMContext & getContext() const
Get the context in which this basic block lives.
Definition: BasicBlock.cpp:33
static bool ValidLookupTableConstant(Constant *C, const TargetTransformInfo &TTI)
Return true if the backend will be able to handle initializing an array of constants like C...
op_iterator op_begin()
Definition: User.h:230
ConstantInt * findCaseDest(BasicBlock *BB)
Finds the unique case value for a given successor.
static Constant * get(ArrayType *T, ArrayRef< Constant *> V)
Definition: Constants.cpp:983
unsigned getNumDestinations() const
return the number of possible destinations in this indirectbr instruction.
static bool extractPredSuccWeights(BranchInst *PBI, BranchInst *BI, uint64_t &PredTrueWeight, uint64_t &PredFalseWeight, uint64_t &SuccTrueWeight, uint64_t &SuccFalseWeight)
Return true if either PBI or BI has branch weight available, and store the weights in {Pred|Succ}{Tru...
static bool mergeConditionalStores(BranchInst *PBI, BranchInst *QBI, const DataLayout &DL)
LLVMContext & getContext() const
Return the LLVMContext in which this type was uniqued.
Definition: Type.h:130
static ConstantInt * GetConstantInt(Value *V, const DataLayout &DL)
Extract ConstantInt from value, looking through IntToPtr and PointerNullValue.
static bool passingValueIsAlwaysUndefined(Value *V, Instruction *I)
Check if passing a value to an instruction will cause undefined behavior.
A templated base class for SmallPtrSet which provides the typesafe interface that is common across al...
Definition: SmallPtrSet.h:344
Value * CreateNot(Value *V, const Twine &Name="")
Definition: IRBuilder.h:1334
iterator begin()
Instruction iterator methods.
Definition: BasicBlock.h:269
bool isIdenticalTo(const Instruction *I) const
Return true if the specified instruction is exactly identical to the current one. ...
The address of a basic block.
Definition: Constants.h:840
bool match(Val *V, const Pattern &P)
Definition: PatternMatch.h:48
const Module * getModule() const
Return the module owning the function this basic block belongs to, or nullptr if the function does no...
Definition: BasicBlock.cpp:134
void hoistAllInstructionsInto(BasicBlock *DomBlock, Instruction *InsertPt, BasicBlock *BB)
Hoist all of the instructions in the IfBlock to the dominant block DomBlock, by moving its instructio...
Definition: Local.cpp:2529
static Constant * getIntegerCast(Constant *C, Type *Ty, bool isSigned)
Create a ZExt, Bitcast or Trunc for integer -> integer casts.
Definition: Constants.cpp:1613
Value * removeIncomingValue(unsigned Idx, bool DeletePHIIfEmpty=true)
Remove an incoming value.
This class represents the LLVM &#39;select&#39; instruction.
Predicate getInversePredicate() const
For example, EQ -> NE, UGT -> ULE, SLT -> SGE, OEQ -> UNE, UGT -> OLE, OLT -> UGE, etc.
Definition: InstrTypes.h:745
const DataLayout & getDataLayout() const
Get the data layout for the module&#39;s target platform.
Definition: Module.cpp:371
int getBasicBlockIndex(const BasicBlock *BB) const
Return the first index of the specified basic block in the value list for this PHI.
bool shouldBuildLookupTablesForConstant(Constant *C) const
Return true if switches should be turned into lookup tables containing this constant value for the ta...
#define Fail
static bool InitializeUniqueCases(SwitchInst *SI, PHINode *&PHI, BasicBlock *&CommonDest, SwitchCaseResultVectorTy &UniqueResults, Constant *&DefaultResult, const DataLayout &DL, const TargetTransformInfo &TTI, uintptr_t MaxUniqueResults, uintptr_t MaxCasesPerResult)
static void GetBranchWeights(Instruction *TI, SmallVectorImpl< uint64_t > &Weights)
Get Weights of a given terminator, the default weight is at the front of the vector.
LLVMContext & getContext() const
Get the global data context.
Definition: Module.h:244
A Use represents the edge between a Value definition and its users.
Definition: Use.h:56
This class consists of common code factored out of the SmallVector class to reduce code duplication b...
Definition: APFloat.h:42
static int ConstantIntSortPredicate(ConstantInt *const *P1, ConstantInt *const *P2)
ReturnInst * CreateRet(Value *V)
Create a &#39;ret <val>&#39; instruction.
Definition: IRBuilder.h:829
bool isIntegerTy() const
True if this is an instance of IntegerType.
Definition: Type.h:197
This provides a uniform API for creating instructions and inserting them into a basic block: either a...
Definition: IRBuilder.h:743
This file contains the simple types necessary to represent the attributes associated with functions a...
bool shouldBuildLookupTables() const
Return true if switches should be turned into lookup tables for the target.
static bool SimplifyIndirectBrOnSelect(IndirectBrInst *IBI, SelectInst *SI)
Value * CreateAdd(Value *LHS, Value *RHS, const Twine &Name="", bool HasNUW=false, bool HasNSW=false)
Definition: IRBuilder.h:1014
void setName(const Twine &Name)
Change the name of the value.
Definition: Value.cpp:285
static bool BlockIsSimpleEnoughToThreadThrough(BasicBlock *BB)
Return true if we can thread a branch across this block.
static Value * isSafeToSpeculateStore(Instruction *I, BasicBlock *BrBB, BasicBlock *StoreBB, BasicBlock *EndBB)
Determine if we can hoist sink a sole store instruction out of a conditional block.
BasicBlock * getDestination(unsigned i)
Return the specified destination.
APInt operator*(APInt a, uint64_t RHS)
Definition: APInt.h:2091
This file implements a class to represent arbitrary precision integral constant values and operations...
BinaryOp_match< LHS, RHS, Instruction::Add > m_Add(const LHS &L, const RHS &R)
Definition: PatternMatch.h:642
This class represents a cast from a pointer to an integer.
Interval::succ_iterator succ_begin(Interval *I)
succ_begin/succ_end - define methods so that Intervals may be used just like BasicBlocks can with the...
Definition: Interval.h:103
ReturnInst * FoldReturnIntoUncondBranch(ReturnInst *RI, BasicBlock *BB, BasicBlock *Pred, DomTreeUpdater *DTU=nullptr)
This method duplicates the specified return instruction into a predecessor which ends in an unconditi...
void assign(size_type NumElts, const T &Elt)
Definition: SmallVector.h:423
auto reverse(ContainerTy &&C, typename std::enable_if< has_rbegin< ContainerTy >::value >::type *=nullptr) -> decltype(make_range(C.rbegin(), C.rend()))
Definition: STLExtras.h:267
void setUnwindDest(BasicBlock *B)
bool isOne() const
This is just a convenience method to make client code smaller for a common case.
Definition: Constants.h:201
Instruction * clone() const
Create a copy of &#39;this&#39; instruction that is identical in all ways except the following: ...
bool isNullValue() const
Return true if this is the value that would be returned by getNullValue.
Definition: Constants.cpp:85
User * getUser() const LLVM_READONLY
Returns the User that contains this Use.
Definition: Use.cpp:41
A constant value that is initialized with an expression using other constant values.
Definition: Constants.h:889
#define UINT64_MAX
Definition: DataTypes.h:83
static cl::opt< unsigned > MaxSpeculationDepth("max-speculation-depth", cl::Hidden, cl::init(10), cl::desc("Limit maximum recursion depth when calculating costs of " "speculatively executed instructions"))
static bool isSwitchDense(ArrayRef< int64_t > Values)
Type * getType() const
All values are typed, get the type of this value.
Definition: Value.h:245
static bool SimplifyCondBranchToTwoReturns(BranchInst *BI, IRBuilder<> &Builder)
If we found a conditional branch that goes to two returning blocks, try to merge them together into o...
bool insert(const value_type &X)
Insert a new element into the SetVector.
Definition: SetVector.h:142
static uintptr_t MapCaseToResult(ConstantInt *CaseVal, SwitchCaseResultVectorTy &UniqueResults, Constant *Result)
bool TryToSimplifyUncondBranchFromEmptyBlock(BasicBlock *BB, DomTreeUpdater *DTU=nullptr)
BB is known to contain an unconditional branch, and contains no instructions other than PHI nodes...
Definition: Local.cpp:960
#define T
unsigned getNumSuccessors() const
const BasicBlock * getUniquePredecessor() const
Return the predecessor of this block if it has a unique predecessor block.
Definition: BasicBlock.cpp:247
Class to represent array types.
Definition: DerivedTypes.h:369
void andIRFlags(const Value *V)
Logical &#39;and&#39; of any supported wrapping, exact, and fast-math flags of V and this instruction...
const BasicBlock * getSingleSuccessor() const
Return the successor of this block if it has a single successor.
Definition: BasicBlock.cpp:269
static void setBranchWeights(SwitchInst *SI, ArrayRef< uint32_t > Weights)
This class represents a no-op cast from one type to another.
static cl::opt< bool > SinkCommon("simplifycfg-sink-common", cl::Hidden, cl::init(true), cl::desc("Sink common instructions down to the end block"))
MDNode * getMetadata(unsigned KindID) const
Get the metadata of given kind attached to this Instruction.
Definition: Instruction.h:221
void combineMetadata(Instruction *K, const Instruction *J, ArrayRef< unsigned > KnownIDs, bool DoesKMove)
Combine the metadata of two instructions so that K can replace J.
Definition: Local.cpp:2274
const APInt & getValue() const
Return the constant as an APInt value reference.
Definition: Constants.h:138
static Value * ConvertTwoCaseSwitch(const SwitchCaseResultVectorTy &ResultVector, Constant *DefaultResult, Value *Condition, IRBuilder<> &Builder)
unsigned getOpcode() const
Returns a member of one of the enums like Instruction::Add.
Definition: Instruction.h:126
BasicBlock * getBasicBlock() const
Definition: Constants.h:867
Value * CreateSub(Value *LHS, Value *RHS, const Twine &Name="", bool HasNUW=false, bool HasNSW=false)
Definition: IRBuilder.h:1031
static void EliminateBlockCases(BasicBlock *BB, std::vector< ValueEqualityComparisonCase > &Cases)
Given a vector of bb/value pairs, remove any entries in the list that match the specified block...
An instruction for storing to memory.
Definition: Instructions.h:321
void SetCurrentDebugLocation(DebugLoc L)
Set location information used by debugging information.
Definition: IRBuilder.h:151
void replaceAllUsesWith(Value *V)
Change all uses of this to point to a new Value.
Definition: Value.cpp:429
BasicBlock * getSuccessor(unsigned idx) const
Value * CreateZExt(Value *V, Type *DestTy, const Twine &Name="")
Definition: IRBuilder.h:1659
bool EliminateDuplicatePHINodes(BasicBlock *BB)
Check for and eliminate duplicate PHI nodes in this block.
Definition: Local.cpp:1079
unsigned getBitWidth() const
Get the number of bits in this IntegerType.
Definition: DerivedTypes.h:66
void takeName(Value *V)
Transfer the name from V to this value.
Definition: Value.cpp:291
static bool SinkCommonCodeFromPredecessors(BasicBlock *BB)
Check whether BB&#39;s predecessors end with unconditional branches.
void SetInsertPoint(BasicBlock *TheBB)
This specifies that created instructions should be appended to the end of the specified block...
Definition: IRBuilder.h:127
unsigned getNumSuccessors() const
Return the number of successors that this instruction has.
Value * getOperand(unsigned i) const
Definition: User.h:170
If this flag is set, the remapper knows that only local values within a function (such as an instruct...
Definition: ValueMapper.h:73
auto count(R &&Range, const E &Element) -> typename std::iterator_traits< decltype(adl_begin(Range))>::difference_type
Wrapper function around std::count to count the number of times an element Element occurs in the give...
Definition: STLExtras.h:1252
Interval::succ_iterator succ_end(Interval *I)
Definition: Interval.h:106
void replaceUsesOfWith(Value *From, Value *To)
Replace uses of one Value with another.
Definition: User.cpp:21
Value * CreateOr(Value *LHS, Value *RHS, const Twine &Name="")
Definition: IRBuilder.h:1182
static cl::opt< bool > HoistCondStores("simplifycfg-hoist-cond-stores", cl::Hidden, cl::init(true), cl::desc("Hoist conditional stores if an unconditional store precedes"))
bool isTypeLegal(Type *Ty) const
Return true if this type is legal.
bool isVoidTy() const
Return true if this is &#39;void&#39;.
Definition: Type.h:141
bool isThreadDependent() const
Return true if the value can vary between threads.
Definition: Constants.cpp:463
const BasicBlock & getEntryBlock() const
Definition: Function.h:640
an instruction for type-safe pointer arithmetic to access elements of arrays and structs ...
Definition: Instructions.h:854
IntegerType * getIntPtrType(LLVMContext &C, unsigned AddressSpace=0) const
Returns an integer type with size at least as big as that of a pointer in the given address space...
Definition: DataLayout.cpp:750
void getAAMetadata(AAMDNodes &N, bool Merge=false) const
Fills the AAMDNodes structure with AA metadata from this instruction.
#define P(N)
unsigned ComputeNumSignBits(const Value *Op, const DataLayout &DL, unsigned Depth=0, AssumptionCache *AC=nullptr, const Instruction *CxtI=nullptr, const DominatorTree *DT=nullptr, bool UseInstrInfo=true)
Return the number of times the sign bit of the register is replicated into the other bits...
BasicBlock * SplitBlockPredecessors(BasicBlock *BB, ArrayRef< BasicBlock *> Preds, const char *Suffix, DominatorTree *DT=nullptr, LoopInfo *LI=nullptr, MemorySSAUpdater *MSSAU=nullptr, bool PreserveLCSSA=false)
This method introduces at least one new basic block into the function and moves some of the predecess...
initializer< Ty > init(const Ty &Val)
Definition: CommandLine.h:423
static bool tryCSEWithPredecessor(Instruction *Inst, BasicBlock *PB)
Return true if the given instruction is available in its predecessor block.
bool FoldBranchToCommonDest(BranchInst *BI, unsigned BonusInstThreshold=1)
If this basic block is ONLY a setcc and a branch, and if a predecessor branches to us and one of our ...
void array_pod_sort(IteratorTy Start, IteratorTy End)
array_pod_sort - This sorts an array with the specified start and end extent.
Definition: STLExtras.h:1083
static bool SwitchToLookupTable(SwitchInst *SI, IRBuilder<> &Builder, const DataLayout &DL, const TargetTransformInfo &TTI)
If the switch is only used to initialize one or more phi nodes in a common successor block with diffe...
The landingpad instruction holds all of the information necessary to generate correct exception handl...
const Instruction * getFirstNonPHI() const
Returns a pointer to the first instruction in this block that is not a PHINode instruction.
Definition: BasicBlock.cpp:190
uint64_t getZExtValue() const
Return the constant as a 64-bit unsigned integer value after it has been zero extended as appropriate...
Definition: Constants.h:149
static GCRegistry::Add< OcamlGC > B("ocaml", "ocaml 3.10-compatible GC")
bool hasNUses(unsigned N) const
Return true if this Value has exactly N users.
Definition: Value.cpp:131
apint_match m_APInt(const APInt *&Res)
Match a ConstantInt or splatted ConstantVector, binding the specified pointer to the contained APInt...
Definition: PatternMatch.h:176
const_iterator getFirstInsertionPt() const
Returns an iterator to the first instruction in this block that is suitable for inserting a non-PHI i...
Definition: BasicBlock.cpp:217
void setDebugLoc(DebugLoc Loc)
Set the debug location information for this instruction.
Definition: Instruction.h:308
static bool sinkLastInstruction(ArrayRef< BasicBlock *> Blocks)
const BasicBlock * getSinglePredecessor() const
Return the predecessor of this block if it has a single predecessor block.
Definition: BasicBlock.cpp:234
bool isIdenticalToWhenDefined(const Instruction *I) const
This is like isIdenticalTo, except that it ignores the SubclassOptionalData flags, which may specify conditions under which the instruction&#39;s result is undefined.
MutableArrayRef - Represent a mutable reference to an array (0 or more elements consecutively in memo...
Definition: ArrayRef.h:291
static Value * ensureValueAvailableInSuccessor(Value *V, BasicBlock *BB, Value *AlternativeV=nullptr)
void set(Value *Val)
Definition: Value.h:671
void set_intersect(S1Ty &S1, const S2Ty &S2)
set_intersect(A, B) - Compute A := A ^ B Identical to set_intersection, except that it works on set<>...
Definition: SetOperations.h:40
static bool HasBranchWeights(const Instruction *I)
void insertBefore(Instruction *InsertPos)
Insert an unlinked instruction into a basic block immediately before the specified instruction...
Definition: Instruction.cpp:74
void setAAMetadata(const AAMDNodes &N)
Sets the metadata on this instruction from the AAMDNodes structure.
Definition: Metadata.cpp:1265
LLVM Basic Block Representation.
Definition: BasicBlock.h:58
The instances of the Type class are immutable: once they are created, they are never changed...
Definition: Type.h:46
BinaryOp_match< LHS, RHS, Instruction::Or > m_Or(const LHS &L, const RHS &R)
Definition: PatternMatch.h:755
UnreachableInst * CreateUnreachable()
Definition: IRBuilder.h:978
Conditional or Unconditional Branch instruction.
iterator_range< filter_iterator< BasicBlock::const_iterator, std::function< bool(const Instruction &)> > > instructionsWithoutDebug() const
Return a const iterator range over the instructions in the block, skipping any debug instructions...
Definition: BasicBlock.cpp:95
static bool TurnSwitchRangeIntoICmp(SwitchInst *SI, IRBuilder<> &Builder)
Turn a switch with two reachable destinations into an integer range comparison and branch...
bool ult(const APInt &RHS) const
Unsigned less than comparison.
Definition: APInt.h:1185
size_t size() const
size - Get the array size.
Definition: ArrayRef.h:149
This function has undefined behavior.
static GCRegistry::Add< CoreCLRGC > E("coreclr", "CoreCLR-compatible GC")
This is an important base class in LLVM.
Definition: Constant.h:42
LLVM_NODISCARD bool empty() const
Definition: SmallPtrSet.h:92
LLVM_ATTRIBUTE_ALWAYS_INLINE iterator begin()
Definition: SmallVector.h:129
Resume the propagation of an exception.
bool canReplaceOperandWithVariable(const Instruction *I, unsigned OpIdx)
Given an instruction, is it legal to set operand OpIdx to a non-constant value?
Definition: Local.cpp:2833
Value * getIncomingValueForBlock(const BasicBlock *BB) const
This file contains the declarations for the subclasses of Constant, which represent the different fla...
Value * CreateSelect(Value *C, Value *True, Value *False, const Twine &Name="", Instruction *MDFrom=nullptr)
Definition: IRBuilder.h:2021
bool isPointerTy() const
True if this is an instance of PointerType.
Definition: Type.h:224
const Instruction & front() const
Definition: BasicBlock.h:281
Indirect Branch Instruction.
std::pair< iterator, bool > insert(PtrType Ptr)
Inserts Ptr if and only if there is no element in the container equal to Ptr.
Definition: SmallPtrSet.h:371
bool mayHaveSideEffects() const
Return true if the instruction may have side effects.
Definition: Instruction.h:562
static cl::opt< unsigned > PHINodeFoldingThreshold("phi-node-folding-threshold", cl::Hidden, cl::init(2), cl::desc("Control the amount of phi node folding to perform (default = 2)"))
size_t size() const
Definition: BasicBlock.h:279
Interval::pred_iterator pred_begin(Interval *I)
pred_begin/pred_end - define methods so that Intervals may be used just like BasicBlocks can with the...
Definition: Interval.h:113
BasicBlock * getDefaultDest() const
bool isDLLImportDependent() const
Return true if the value is dependent on a dllimport variable.
Definition: Constants.cpp:470
unsigned getPrefTypeAlignment(Type *Ty) const
Returns the preferred stack/global alignment for the specified type.
Definition: DataLayout.cpp:740
EHPersonality classifyEHPersonality(const Value *Pers)
See if the given exception handling personality function is one that we understand.
constexpr bool isPowerOf2_64(uint64_t Value)
Return true if the argument is a power of two > 0 (64 bit edition.)
Definition: MathExtras.h:434
op_iterator op_end()
Definition: User.h:232
static cl::opt< bool > MergeCondStoresAggressively("simplifycfg-merge-cond-stores-aggressively", cl::Hidden, cl::init(false), cl::desc("When merging conditional stores, do so even if the resultant " "basic blocks are unlikely to be if-converted as a result"))
void splice(iterator where, iplist_impl &L2)
Definition: ilist.h:329
bool any_of(R &&range, UnaryPredicate P)
Provide wrappers to std::any_of which take ranges instead of having to pass begin/end explicitly...
Definition: STLExtras.h:1193
This instruction compares its operands according to the predicate given to the constructor.
static bool SimplifyTerminatorOnSelect(Instruction *OldTerm, Value *Cond, BasicBlock *TrueBB, BasicBlock *FalseBB, uint32_t TrueWeight, uint32_t FalseWeight)
Interval::pred_iterator pred_end(Interval *I)
Definition: Interval.h:116
static BasicBlock * Create(LLVMContext &Context, const Twine &Name="", Function *Parent=nullptr, BasicBlock *InsertBefore=nullptr)
Creates a new BasicBlock.
Definition: BasicBlock.h:100
Value * CreateICmpEQ(Value *LHS, Value *RHS, const Twine &Name="")
Definition: IRBuilder.h:1839
static Constant * getICmp(unsigned short pred, Constant *LHS, Constant *RHS, bool OnlyIfReduced=false)
get* - Return some common constants without having to specify the full Instruction::OPCODE identifier...
Definition: Constants.cpp:2053
size_type count(ConstPtrType Ptr) const
count - Return 1 if the specified pointer is in the set, 0 otherwise.
Definition: SmallPtrSet.h:382
self_iterator getIterator()
Definition: ilist_node.h:82
Class to represent integer types.
Definition: DerivedTypes.h:40
static cl::opt< bool > MergeCondStores("simplifycfg-merge-cond-stores", cl::Hidden, cl::init(true), cl::desc("Hoist conditional stores even if an unconditional store does not " "precede - hoist multiple conditional stores into a single " "predicated store"))
bool pred_empty(const BasicBlock *BB)
Definition: CFG.h:117
static bool FoldTwoEntryPHINode(PHINode *PN, const TargetTransformInfo &TTI, const DataLayout &DL)
Given a BB that starts with the specified two-entry PHI node, see if we can eliminate it...
const Function * getFunction() const
Return the function this instruction belongs to.
Definition: Instruction.cpp:60
CaseIt removeCase(CaseIt I)
This method removes the specified case and its successor from the switch instruction.
const Value * getCondition() const
bool RecursivelyDeleteTriviallyDeadInstructions(Value *V, const TargetLibraryInfo *TLI=nullptr, MemorySSAUpdater *MSSAU=nullptr)
If the specified value is a trivially dead instruction, delete it.
Definition: Local.cpp:430
static UndefValue * get(Type *T)
Static factory methods - Return an &#39;undef&#39; object of the specified type.
Definition: Constants.cpp:1415
uint64_t NextPowerOf2(uint64_t A)
Returns the next power of two (in 64-bits) that is strictly greater than A.
Definition: MathExtras.h:640
iterator erase(const_iterator CI)
Definition: SmallVector.h:445
bool isExceptionalTerminator() const
Definition: Instruction.h:136
Value(Type *Ty, unsigned scid)
Definition: Value.cpp:53
size_t size() const
Definition: SmallVector.h:53
Value * getIncomingValue(unsigned i) const
Return incoming value number x.
Constant * ConstantFoldCompareInstOperands(unsigned Predicate, Constant *LHS, Constant *RHS, const DataLayout &DL, const TargetLibraryInfo *TLI=nullptr)
ConstantFoldCompareInstOperands - Attempt to constant fold a compare instruction (icmp/fcmp) with the...
#define llvm_unreachable(msg)
Marks that the current location is not supposed to be reachable.
void setMetadata(unsigned KindID, MDNode *Node)
Set the metadata of the specified kind to the specified node.
Definition: Metadata.cpp:1226
Value * CreateMul(Value *LHS, Value *RHS, const Twine &Name="", bool HasNUW=false, bool HasNSW=false)
Definition: IRBuilder.h:1048
Value * CreateTrunc(Value *V, Type *DestTy, const Twine &Name="")
Definition: IRBuilder.h:1655
ConstantRange subtract(const APInt &CI) const
Subtract the specified constant from the endpoints of this constant range.
unsigned first
void setSuccessor(unsigned idx, BasicBlock *NewSucc)
void sort(IteratorTy Start, IteratorTy End)
Definition: STLExtras.h:1116
static bool FoldCondBranchOnPHI(BranchInst *BI, const DataLayout &DL, AssumptionCache *AC)
If we have a conditional branch on a PHI node value that is defined in the same block as the branch a...
hexagon gen pred
constexpr bool empty(const T &RangeOrContainer)
Test whether RangeOrContainer is empty. Similar to C++17 std::empty.
Definition: STLExtras.h:210
Intrinsic::ID getIntrinsicID() const
Return the intrinsic ID of this intrinsic.
Definition: IntrinsicInst.h:51
bool isEmptySet() const
Return true if this set contains no members.
bool isProfitableToHoist(Instruction *I) const
Return true if it is profitable to hoist instruction in the then/else to before if.
static Constant * ConstantFold(Instruction *I, const DataLayout &DL, const SmallDenseMap< Value *, Constant *> &ConstantPool)
Try to fold instruction I into a constant.
bool hasAddressTaken() const
Returns true if there are any uses of this basic block other than direct branches, switches, etc.
Definition: BasicBlock.h:392
bool hasNPredecessorsOrMore(unsigned N) const
Return true if this block has N predecessors or more.
Definition: BasicBlock.cpp:265
BasicBlock * getNormalDest() const
const InstListType & getInstList() const
Return the underlying instruction list container.
Definition: BasicBlock.h:334
static IntegerType * get(LLVMContext &C, unsigned NumBits)
This static method is the primary way of constructing an IntegerType.
Definition: Type.cpp:240
A SetVector that performs no allocations if smaller than a certain size.
Definition: SetVector.h:298
Iterator for intrusive lists based on ilist_node.
unsigned getNumOperands() const
Definition: User.h:192
SmallPtrSet - This class implements a set which is optimized for holding SmallSize or less elements...
Definition: SmallPtrSet.h:418
unsigned countPopulation(T Value)
Count the number of set bits in a value.
Definition: MathExtras.h:520
This is the shared class of boolean and integer constants.
Definition: Constants.h:84
static bool SafeToMergeTerminators(Instruction *SI1, Instruction *SI2, SmallSetVector< BasicBlock *, 4 > *FailBlocks=nullptr)
Return true if it is safe to merge these two terminator instructions together.
This pass provides access to the codegen interfaces that are needed for IR-level transformations.
static cl::opt< bool > SpeculateOneExpensiveInst("speculate-one-expensive-inst", cl::Hidden, cl::init(true), cl::desc("Allow exactly one expensive instruction to be speculatively " "executed"))
iterator end()
Definition: BasicBlock.h:271
Value * CreateIntCast(Value *V, Type *DestTy, bool isSigned, const Twine &Name="")
Definition: IRBuilder.h:1801
static bool SimplifyBranchOnICmpChain(BranchInst *BI, IRBuilder<> &Builder, const DataLayout &DL)
The specified branch is a conditional branch.
This is a &#39;vector&#39; (really, a variable-sized array), optimized for the case when the array is small...
Definition: SmallVector.h:847
Module.h This file contains the declarations for the Module class.
Instruction * user_back()
Specialize the methods defined in Value, as we know that an instruction can only be used by other ins...
Definition: Instruction.h:64
This class represents a range of values.
Definition: ConstantRange.h:47
This is the common base class for debug info intrinsics.
Definition: IntrinsicInst.h:67
unsigned getABITypeAlignment(Type *Ty) const
Returns the minimum ABI-required alignment for the specified type.
Definition: DataLayout.cpp:730
Value * GetIfCondition(BasicBlock *BB, BasicBlock *&IfTrue, BasicBlock *&IfFalse)
Check whether BB is the merge point of a if-region.
A collection of metadata nodes that might be associated with a memory access used by the alias-analys...
Definition: Metadata.h:644
LLVM_NODISCARD T pop_back_val()
Definition: SmallVector.h:381
ConstantInt * getInt32(uint32_t C)
Get a constant 32-bit value.
Definition: IRBuilder.h:307
static Constant * get(Type *Ty, uint64_t V, bool isSigned=false)
If Ty is a vector type, return a Constant with a splat of the given value.
Definition: Constants.cpp:622
static BranchInst * Create(BasicBlock *IfTrue, Instruction *InsertBefore=nullptr)
bool isConditional() const
static PHINode * Create(Type *Ty, unsigned NumReservedValues, const Twine &NameStr="", Instruction *InsertBefore=nullptr)
Constructors - NumReservedValues is a hint for the number of incoming edges that this phi node will h...
void applyMergedLocation(const DILocation *LocA, const DILocation *LocB)
Merge 2 debug locations and apply it to the Instruction.
Definition: DebugInfo.cpp:689
pred_range predecessors(BasicBlock *BB)
Definition: CFG.h:125
unsigned getNumIncomingValues() const
Return the number of incoming edges.
static void reuseTableCompare(User *PhiUser, BasicBlock *PhiBlock, BranchInst *RangeCheckBranch, Constant *DefaultValue, const SmallVectorImpl< std::pair< ConstantInt *, Constant *>> &Values)
Try to reuse the switch table index compare.
static bool canSinkInstructions(ArrayRef< Instruction *> Insts, DenseMap< Instruction *, SmallVector< Value *, 4 >> &PHIOperands)
CaseIt findCaseValue(const ConstantInt *C)
Search all of the case values for the specified constant.
bool NullPointerIsDefined(const Function *F, unsigned AS=0)
Check whether null pointer dereferencing is considered undefined behavior for a given function or an ...
Definition: Function.cpp:1437
static ConstantInt * getTrue(LLVMContext &Context)
Definition: Constants.cpp:578
void setSuccessor(unsigned idx, BasicBlock *NewSucc)
void setPredicate(Predicate P)
Set the predicate for this instruction to the specified value.
Definition: InstrTypes.h:726
void setOperand(unsigned i, Value *Val)
Definition: User.h:175
raw_ostream & dbgs()
dbgs() - This returns a reference to a raw_ostream for debugging messages.
Definition: Debug.cpp:133
The access may modify the value stored in memory.
void swap(llvm::BitVector &LHS, llvm::BitVector &RHS)
Implement std::swap in terms of BitVector swap.
Definition: BitVector.h:941
Class for arbitrary precision integers.
Definition: APInt.h:70
static bool HoistThenElseCodeToIf(BranchInst *BI, const TargetTransformInfo &TTI)
Given a conditional branch that goes to BB1 and BB2, hoist any common code in the two blocks up into ...
void removeUnwindEdge(BasicBlock *BB, DomTreeUpdater *DTU=nullptr)
Replace &#39;BB&#39;s terminator with one that does not have an unwind successor block.
Definition: Local.cpp:2161
static cl::opt< bool > DupRet("simplifycfg-dup-ret", cl::Hidden, cl::init(false), cl::desc("Duplicate return instructions into unconditional branches"))
bool isPowerOf2() const
Check if this APInt&#39;s value is a power of two greater than zero.
Definition: APInt.h:464
static bool CasesAreContiguous(SmallVectorImpl< ConstantInt *> &Cases)
iterator_range< user_iterator > users()
Definition: Value.h:400
void RemapInstruction(Instruction *I, ValueToValueMapTy &VM, RemapFlags Flags=RF_None, ValueMapTypeRemapper *TypeMapper=nullptr, ValueMaterializer *Materializer=nullptr)
Convert the instruction operands from referencing the current values into those specified by VM...
Definition: ValueMapper.h:251
InstListType::iterator iterator
Instruction iterators...
Definition: BasicBlock.h:90
Value * CreateShl(Value *LHS, Value *RHS, const Twine &Name="", bool HasNUW=false, bool HasNSW=false)
Definition: IRBuilder.h:1103
iterator begin() const
Definition: ArrayRef.h:331
void FoldSingleEntryPHINodes(BasicBlock *BB, MemoryDependenceResults *MemDep=nullptr)
We know that BB has one predecessor.
iterator insert(iterator I, T &&Elt)
Definition: SmallVector.h:478
const Value * getFalseValue() const
If this flag is set, the remapper ignores missing function-local entries (Argument, Instruction, BasicBlock) that are not in the value map.
Definition: ValueMapper.h:91
Instruction * SplitBlockAndInsertIfThen(Value *Cond, Instruction *SplitBefore, bool Unreachable, MDNode *BranchWeights=nullptr, DominatorTree *DT=nullptr, LoopInfo *LI=nullptr)
Split the containing block at the specified instruction - everything before SplitBefore stays in the ...
SwitchInst * CreateSwitch(Value *V, BasicBlock *Dest, unsigned NumCases=10, MDNode *BranchWeights=nullptr, MDNode *Unpredictable=nullptr)
Create a switch instruction with the specified value, default dest, and with a hint for the number of...
Definition: IRBuilder.h:877
static cl::opt< ITMode > IT(cl::desc("IT block support"), cl::Hidden, cl::init(DefaultIT), cl::ZeroOrMore, cl::values(clEnumValN(DefaultIT, "arm-default-it", "Generate IT block based on arch"), clEnumValN(RestrictedIT, "arm-restrict-it", "Disallow deprecated IT based on ARMv8"), clEnumValN(NoRestrictedIT, "arm-no-restrict-it", "Allow IT blocks based on ARMv7")))
static Constant * getNeg(Constant *C, bool HasNUW=false, bool HasNSW=false)
Definition: Constants.cpp:2219
ReturnInst * CreateRetVoid()
Create a &#39;ret void&#39; instruction.
Definition: IRBuilder.h:824
Predicate getPredicate() const
Return the predicate for this instruction.
Definition: InstrTypes.h:721
This file provides various utilities for inspecting and working with the control flow graph in LLVM I...
LLVM_ATTRIBUTE_ALWAYS_INLINE iterator end()
Definition: SmallVector.h:133
static bool isTrivial(const DICompositeType *DCTy)
static bool mergeConditionalStoreToAddress(BasicBlock *PTB, BasicBlock *PFB, BasicBlock *QTB, BasicBlock *QFB, BasicBlock *PostBB, Value *Address, bool InvertPCond, bool InvertQCond, const DataLayout &DL)
iterator insert(iterator where, pointer New)
Definition: ilist.h:228
const DebugLoc & getDebugLoc() const
Return the debug location for this node as a DebugLoc.
Definition: Instruction.h:311
bool isInlineAsm() const
Check if this call is an inline asm statement.
bool intersects(const APInt &RHS) const
This operation tests if there are any pairs of corresponding bits between this APInt and RHS that are...
Definition: APInt.h:1321
void registerAssumption(CallInst *CI)
Add an @llvm.assume intrinsic to this function&#39;s cache.
unsigned getIntegerBitWidth() const
Definition: DerivedTypes.h:97
int getUserCost(const User *U, ArrayRef< const Value *> Operands) const
Estimate the cost of a given IR user when lowered.
LLVM_NODISCARD bool empty() const
Definition: SmallVector.h:56
uint64_t getLimitedValue(uint64_t Limit=UINT64_MAX) const
If this value is smaller than the specified limit, return it, otherwise return the limit value...
Definition: APInt.h:482
bool isTokenTy() const
Return true if this is &#39;token&#39;.
Definition: Type.h:194
StringRef getName() const
Return a constant reference to the value&#39;s name.
Definition: Value.cpp:214
BasicBlock * getIncomingBlock(unsigned i) const
Return incoming basic block number i.
const Function * getParent() const
Return the enclosing method, or null if none.
Definition: BasicBlock.h:107
unsigned pred_size(const BasicBlock *BB)
Get the number of predecessors of BB.
Definition: CFG.h:122
SymbolTableList< BasicBlock >::iterator eraseFromParent()
Unlink &#39;this&#39; from the containing function and delete it.
Definition: BasicBlock.cpp:115
const APInt & getLower() const
Return the lower value for this range.
#define I(x, y, z)
Definition: MD5.cpp:58
Value * getValue() const
Convenience accessor.
#define N
bool empty() const
Determine if the SetVector is empty or not.
Definition: SetVector.h:73
static bool removeEmptyCleanup(CleanupReturnInst *RI)
static ArrayType * get(Type *ElementType, uint64_t NumElements)
This static method is the primary way to construct an ArrayType.
Definition: Type.cpp:581
LLVM_NODISCARD std::enable_if<!is_simple_type< Y >::value, typename cast_retty< X, const Y >::ret_type >::type dyn_cast(const Y &Val)
Definition: Casting.h:323
static bool DominatesMergePoint(Value *V, BasicBlock *BB, SmallPtrSetImpl< Instruction *> &AggressiveInsts, unsigned &CostRemaining, const TargetTransformInfo &TTI, unsigned Depth=0)
If we have a merge point of an "if condition" as accepted above, return true if the specified value d...
uint32_t Size
Definition: Profile.cpp:47
Constant * ConstantFoldInstOperands(Instruction *I, ArrayRef< Constant *> Ops, const DataLayout &DL, const TargetLibraryInfo *TLI=nullptr)
ConstantFoldInstOperands - Attempt to constant fold an instruction with the specified operands...
static bool ValuesOverlap(std::vector< ValueEqualityComparisonCase > &C1, std::vector< ValueEqualityComparisonCase > &C2)
Return true if there are any keys in C1 that exist in C2 as well.
iterator_range< const_phi_iterator > phis() const
Returns a range that iterates over the phis in the basic block.
Definition: BasicBlock.h:325
BasicBlock * splitBasicBlock(iterator I, const Twine &BBName="")
Split the basic block into two basic blocks at the specified instruction.
Definition: BasicBlock.cpp:408
Value * getReturnValue() const
Convenience accessor. Returns null if there is no return value.
CaseIt case_default()
Returns an iterator that points to the default case.
bool isUnconditional() const
static void RemoveSwitchAfterSelectConversion(SwitchInst *SI, PHINode *PHI, Value *SelectValue, IRBuilder<> &Builder)
size_type count(const_arg_type_t< KeyT > Val) const
Return 1 if the specified key is in the map, 0 otherwise.
Definition: DenseMap.h:171
static bool SpeculativelyExecuteBB(BranchInst *BI, BasicBlock *ThenBB, const TargetTransformInfo &TTI)
Speculate a conditional basic block flattening the CFG.
unsigned getAlignment() const
Return the alignment of the access that is being performed.
Definition: Instructions.h:366
ValueT lookup(const_arg_type_t< KeyT > Val) const
lookup - Return the entry for the specified key, or a default constructed value if no such entry exis...
Definition: DenseMap.h:211
Value * CreatePtrToInt(Value *V, Type *DestTy, const Twine &Name="")
Definition: IRBuilder.h:1722
static bool switchToSelect(SwitchInst *SI, IRBuilder<> &Builder, const DataLayout &DL, const TargetTransformInfo &TTI)
If the switch is only used to initialize one or more phi nodes in a common successor block with only ...
void setCondition(Value *V)
static BasicBlock * allPredecessorsComeFromSameSource(BasicBlock *BB)
const unsigned Kind
Multiway switch.
static bool ReduceSwitchRange(SwitchInst *SI, IRBuilder<> &Builder, const DataLayout &DL, const TargetTransformInfo &TTI)
Try to transform a switch that has "holes" in it to a contiguous sequence of cases.
assert(ImpDefSCC.getReg()==AMDGPU::SCC &&ImpDefSCC.isDef())
unsigned getMinSignedBits() const
Get the minimum bit size for this signed APInt.
Definition: APInt.h:1552
user_iterator user_begin()
Definition: Value.h:376
The cost of a typical &#39;add&#39; instruction.
LLVM_NODISCARD char front() const
front - Get the first character in the string.
Definition: StringRef.h:142
bool isSafeToSpeculativelyExecute(const Value *V, const Instruction *CtxI=nullptr, const DominatorTree *DT=nullptr)
Return true if the instruction does not have any effects besides calculating the result and does not ...
bool operator<(int64_t V1, const APSInt &V2)
Definition: APSInt.h:326
BasicBlock * getUnwindDest() const
unsigned getPrimitiveSizeInBits() const LLVM_READONLY
Return the basic size of this type if it is a primitive type.
Definition: Type.cpp:115
static bool ForwardSwitchConditionToPHI(SwitchInst *SI)
Try to forward the condition of a switch instruction to a phi node dominated by the switch...
Module * getParent()
Get the module that this global value is contained inside of...
Definition: GlobalValue.h:566
LLVM Value Representation.
Definition: Value.h:73
void setAlignment(unsigned Align)
Constant * getPersonalityFn() const
Get the personality function associated with this function.
Definition: Function.cpp:1299
void setDefaultDest(BasicBlock *DefaultCase)
succ_range successors(Instruction *I)
Definition: CFG.h:264
unsigned getOpcode() const
Return the opcode for this Instruction or ConstantExpr.
Definition: Operator.h:41
BranchInst * CreateBr(BasicBlock *Dest)
Create an unconditional &#39;br label X&#39; instruction.
Definition: IRBuilder.h:848
std::underlying_type< E >::type Mask()
Get a bitmask with 1s in all places up to the high-order bit of E&#39;s largest value.
Definition: BitmaskEnum.h:81
static const Function * getParent(const Value *V)
void moveBefore(Instruction *MovePos)
Unlink this instruction from its current basic block and insert it into the basic block that MovePos ...
Definition: Instruction.cpp:87
iterator end() const
Definition: ArrayRef.h:332
BasicBlock * SplitBlock(BasicBlock *Old, Instruction *SplitPt, DominatorTree *DT=nullptr, LoopInfo *LI=nullptr, MemorySSAUpdater *MSSAU=nullptr)
Split the specified block at the specified instruction - everything before SplitPt stays in Old and e...
Value * CreateLShr(Value *LHS, Value *RHS, const Twine &Name="", bool isExact=false)
Definition: IRBuilder.h:1124
Invoke instruction.
void combineMetadataForCSE(Instruction *K, const Instruction *J, bool DoesKMove)
Combine the metadata of two instructions so that K can replace J.
Definition: Local.cpp:2352
bool isEHPad() const
Return true if the instruction is a variety of EH-block.
Definition: Instruction.h:573
static PHINode * FindPHIForConditionForwarding(ConstantInt *CaseValue, BasicBlock *BB, int *PhiIndex)
If BB would be eligible for simplification by TryToSimplifyUncondBranchFromEmptyBlock (i...
bool hasOneUse() const
Return true if there is exactly one user of this value.
Definition: Value.h:413
StringRef - Represent a constant reference to a string, i.e.
Definition: StringRef.h:49
A single uniqued string.
Definition: Metadata.h:604
const Instruction * getFirstNonPHIOrDbg() const
Returns a pointer to the first instruction in this block that is not a PHINode or a debug intrinsic...
Definition: BasicBlock.cpp:197
bool fitsInLegalInteger(unsigned Width) const
Returns true if the specified type fits in a native integer type supported by the CPU...
Definition: DataLayout.h:317
bool simplifyCFG(BasicBlock *BB, const TargetTransformInfo &TTI, const SimplifyCFGOptions &Options={}, SmallPtrSetImpl< BasicBlock *> *LoopHeaders=nullptr)
This function is used to do simplification of a CFG.
static void EraseTerminatorAndDCECond(Instruction *TI)
A set of parameters used to control the transforms in the SimplifyCFG pass.
Definition: Local.h:65
This pass exposes codegen information to IR-level passes.
bool operator==(uint64_t V1, const APInt &V2)
Definition: APInt.h:1967
static void FitWeights(MutableArrayRef< uint64_t > Weights)
Keep halving the weights until all can fit in uint32_t.
bool isSimple() const
Definition: Instructions.h:402
void setIncomingValue(unsigned i, Value *V)
unsigned getNumOperands() const
Return number of MDNode operands.
Definition: Metadata.h:1075
#define LLVM_DEBUG(X)
Definition: Debug.h:123
bool extractProfMetadata(uint64_t &TrueVal, uint64_t &FalseVal) const
Retrieve the raw weight values of a conditional branch or select.
Definition: Metadata.cpp:1315
ConstantRange inverse() const
Return a new range that is the logical not of the current set.
Value * SimplifyInstruction(Instruction *I, const SimplifyQuery &Q, OptimizationRemarkEmitter *ORE=nullptr)
See if we can compute a simplified version of this instruction.
Value * getPointerOperand()
Definition: Instructions.h:413
static bool ShouldBuildLookupTable(SwitchInst *SI, uint64_t TableSize, const TargetTransformInfo &TTI, const DataLayout &DL, const SmallDenseMap< PHINode *, Type *> &ResultTypes)
Determine whether a lookup table should be built for this switch, based on the number of cases...
static void AddPredecessorToBlock(BasicBlock *Succ, BasicBlock *NewPred, BasicBlock *ExistPred)
Update PHI nodes in Succ to indicate that there will now be entries in it from the &#39;NewPred&#39; block...
void removeDestination(unsigned i)
This method removes the specified successor from the indirectbr instruction.
bool use_empty() const
Definition: Value.h:323
unsigned Log2_64(uint64_t Value)
Return the floor log base 2 of the specified value, -1 if the value is zero.
Definition: MathExtras.h:545
A wrapper class for inspecting calls to intrinsic functions.
Definition: IntrinsicInst.h:44
const BasicBlock * getParent() const
Definition: Instruction.h:67
A discriminated union of two pointer types, with the discriminator in the low bit of the pointer...
Definition: PointerUnion.h:87
static bool TryToMergeLandingPad(LandingPadInst *LPad, BranchInst *BI, BasicBlock *BB)
Given an block with only a single landing pad and a unconditional branch try to find another basic bl...
bool mayReadOrWriteMemory() const
Return true if this instruction may read or write memory.
Definition: Instruction.h:522
const BasicBlock * getUniqueSuccessor() const
Return the successor of this block if it has a unique successor.
Definition: BasicBlock.cpp:277
static Constant * LookupConstant(Value *V, const SmallDenseMap< Value *, Constant *> &ConstantPool)
If V is a Constant, return it.