1 //===- Local.cpp - Functions to perform local transformations -------------===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 //
10 // This family of functions perform various local transformations to the
11 // program.
12 //
13 //===----------------------------------------------------------------------===//
14 
15 #include "llvm/Analysis/Utils/Local.h"
16 #include "llvm/ADT/APInt.h"
17 #include "llvm/ADT/DenseMap.h"
18 #include "llvm/ADT/DenseMapInfo.h"
19 #include "llvm/ADT/DenseSet.h"
20 #include "llvm/ADT/Hashing.h"
21 #include "llvm/ADT/None.h"
22 #include "llvm/ADT/Optional.h"
23 #include "llvm/ADT/STLExtras.h"
24 #include "llvm/ADT/SetVector.h"
25 #include "llvm/ADT/SmallPtrSet.h"
26 #include "llvm/ADT/SmallVector.h"
27 #include "llvm/ADT/Statistic.h"
28 #include "llvm/ADT/TinyPtrVector.h"
29 #include "llvm/Analysis/ConstantFolding.h"
30 #include "llvm/Analysis/EHPersonalities.h"
31 #include "llvm/Analysis/InstructionSimplify.h"
32 #include "llvm/Analysis/LazyValueInfo.h"
33 #include "llvm/Analysis/MemoryBuiltins.h"
34 #include "llvm/Analysis/TargetLibraryInfo.h"
35 #include "llvm/Analysis/ValueTracking.h"
36 #include "llvm/BinaryFormat/Dwarf.h"
37 #include "llvm/IR/Argument.h"
38 #include "llvm/IR/Attributes.h"
39 #include "llvm/IR/BasicBlock.h"
40 #include "llvm/IR/CFG.h"
41 #include "llvm/IR/CallSite.h"
42 #include "llvm/IR/Constant.h"
43 #include "llvm/IR/ConstantRange.h"
44 #include "llvm/IR/Constants.h"
45 #include "llvm/IR/DIBuilder.h"
46 #include "llvm/IR/DataLayout.h"
47 #include "llvm/IR/DebugInfoMetadata.h"
48 #include "llvm/IR/DebugLoc.h"
49 #include "llvm/IR/DerivedTypes.h"
50 #include "llvm/IR/Dominators.h"
51 #include "llvm/IR/Function.h"
52 #include "llvm/IR/GetElementPtrTypeIterator.h"
53 #include "llvm/IR/GlobalObject.h"
54 #include "llvm/IR/IRBuilder.h"
55 #include "llvm/IR/InstrTypes.h"
56 #include "llvm/IR/Instruction.h"
57 #include "llvm/IR/Instructions.h"
58 #include "llvm/IR/IntrinsicInst.h"
59 #include "llvm/IR/Intrinsics.h"
60 #include "llvm/IR/LLVMContext.h"
61 #include "llvm/IR/MDBuilder.h"
62 #include "llvm/IR/Metadata.h"
63 #include "llvm/IR/Module.h"
64 #include "llvm/IR/Operator.h"
65 #include "llvm/IR/PatternMatch.h"
66 #include "llvm/IR/Type.h"
67 #include "llvm/IR/Use.h"
68 #include "llvm/IR/User.h"
69 #include "llvm/IR/Value.h"
70 #include "llvm/IR/ValueHandle.h"
71 #include "llvm/Support/Casting.h"
72 #include "llvm/Support/Debug.h"
73 #include "llvm/Support/ErrorHandling.h"
74 #include "llvm/Support/KnownBits.h"
75 #include "llvm/Support/raw_ostream.h"
76 #include "llvm/Transforms/Utils/ValueMapper.h"
77 #include <algorithm>
78 #include <cassert>
79 #include <climits>
80 #include <cstdint>
81 #include <iterator>
82 #include <map>
83 #include <utility>
84 
85 using namespace llvm;
86 using namespace llvm::PatternMatch;
87 
88 #define DEBUG_TYPE "local"
89 
90 STATISTIC(NumRemoved, "Number of unreachable basic blocks removed");
91 
92 //===----------------------------------------------------------------------===//
93 //  Local constant propagation.
94 //
95 
96 /// ConstantFoldTerminator - If a terminator instruction is predicated on a
97 /// constant value, convert it into an unconditional branch to the constant
98 /// destination.  This is a nontrivial operation because the successors of this
99 /// basic block must have their PHI nodes updated.
100 /// Also calls RecursivelyDeleteTriviallyDeadInstructions() on any branch/switch
101 /// conditions and indirectbr addresses this might make dead if
102 /// DeleteDeadConditions is true.
103 bool llvm::ConstantFoldTerminator(BasicBlock *BB, bool DeleteDeadConditions,
104                                   const TargetLibraryInfo *TLI,
105                                   DeferredDominance *DDT) {
106   TerminatorInst *T = BB->getTerminator();
107   IRBuilder<> Builder(T);
108 
109   // Branch - See if we are conditional jumping on constant
110   if (auto *BI = dyn_cast<BranchInst>(T)) {
111     if (BI->isUnconditional()) return false;  // Can't optimize uncond branch
112     BasicBlock *Dest1 = BI->getSuccessor(0);
113     BasicBlock *Dest2 = BI->getSuccessor(1);
114 
115     if (auto *Cond = dyn_cast<ConstantInt>(BI->getCondition())) {
116       // Are we branching on constant?
117       // YES.  Change to unconditional branch...
118       BasicBlock *Destination = Cond->getZExtValue() ? Dest1 : Dest2;
119       BasicBlock *OldDest     = Cond->getZExtValue() ? Dest2 : Dest1;
120 
121       // Let the basic block know that we are letting go of it.  Based on this,
122       // it will adjust it's PHI nodes.
123       OldDest->removePredecessor(BB);
124 
125       // Replace the conditional branch with an unconditional one.
126       Builder.CreateBr(Destination);
127       BI->eraseFromParent();
128       if (DDT)
129         DDT->deleteEdge(BB, OldDest);
130       return true;
131     }
132 
133     if (Dest2 == Dest1) {       // Conditional branch to same location?
134       // This branch matches something like this:
135       //     br bool %cond, label %Dest, label %Dest
136       // and changes it into:  br label %Dest
137 
138       // Let the basic block know that we are letting go of one copy of it.
139       assert(BI->getParent() && "Terminator not inserted in block!");
140       Dest1->removePredecessor(BI->getParent());
141 
142       // Replace the conditional branch with an unconditional one.
143       Builder.CreateBr(Dest1);
144       Value *Cond = BI->getCondition();
145       BI->eraseFromParent();
146       if (DeleteDeadConditions)
147         RecursivelyDeleteTriviallyDeadInstructions(Cond, TLI);
148       return true;
149     }
150     return false;
151   }
152 
153   if (auto *SI = dyn_cast<SwitchInst>(T)) {
154     // If we are switching on a constant, we can convert the switch to an
155     // unconditional branch.
156     auto *CI = dyn_cast<ConstantInt>(SI->getCondition());
157     BasicBlock *DefaultDest = SI->getDefaultDest();
158     BasicBlock *TheOnlyDest = DefaultDest;
159 
160     // If the default is unreachable, ignore it when searching for TheOnlyDest.
161     if (isa<UnreachableInst>(DefaultDest->getFirstNonPHIOrDbg()) &&
162         SI->getNumCases() > 0) {
163       TheOnlyDest = SI->case_begin()->getCaseSuccessor();
164     }
165 
166     // Figure out which case it goes to.
167     for (auto i = SI->case_begin(), e = SI->case_end(); i != e;) {
168       // Found case matching a constant operand?
169       if (i->getCaseValue() == CI) {
170         TheOnlyDest = i->getCaseSuccessor();
171         break;
172       }
173 
174       // Check to see if this branch is going to the same place as the default
175       // dest.  If so, eliminate it as an explicit compare.
176       if (i->getCaseSuccessor() == DefaultDest) {
177         MDNode *MD = SI->getMetadata(LLVMContext::MD_prof);
178         unsigned NCases = SI->getNumCases();
179         // Fold the case metadata into the default if there will be any branches
180         // left, unless the metadata doesn't match the switch.
181         if (NCases > 1 && MD && MD->getNumOperands() == 2 + NCases) {
182           // Collect branch weights into a vector.
183           SmallVector<uint32_t, 8> Weights;
184           for (unsigned MD_i = 1, MD_e = MD->getNumOperands(); MD_i < MD_e;
185                ++MD_i) {
186             auto *CI = mdconst::extract<ConstantInt>(MD->getOperand(MD_i));
187             Weights.push_back(CI->getValue().getZExtValue());
188           }
189           // Merge weight of this case to the default weight.
190           unsigned idx = i->getCaseIndex();
191           Weights[0] += Weights[idx+1];
192           // Remove weight for this case.
193           std::swap(Weights[idx+1], Weights.back());
194           Weights.pop_back();
195           SI->setMetadata(LLVMContext::MD_prof,
196                           MDBuilder(BB->getContext()).
197                           createBranchWeights(Weights));
198         }
199         // Remove this entry.
200         BasicBlock *ParentBB = SI->getParent();
201         DefaultDest->removePredecessor(ParentBB);
202         i = SI->removeCase(i);
203         e = SI->case_end();
204         if (DDT)
205           DDT->deleteEdge(ParentBB, DefaultDest);
206         continue;
207       }
208 
209       // Otherwise, check to see if the switch only branches to one destination.
210       // We do this by reseting "TheOnlyDest" to null when we find two non-equal
211       // destinations.
212       if (i->getCaseSuccessor() != TheOnlyDest)
213         TheOnlyDest = nullptr;
214 
215       // Increment this iterator as we haven't removed the case.
216       ++i;
217     }
218 
219     if (CI && !TheOnlyDest) {
220       // Branching on a constant, but not any of the cases, go to the default
221       // successor.
222       TheOnlyDest = SI->getDefaultDest();
223     }
224 
225     // If we found a single destination that we can fold the switch into, do so
226     // now.
227     if (TheOnlyDest) {
228       // Insert the new branch.
229       Builder.CreateBr(TheOnlyDest);
230       BasicBlock *BB = SI->getParent();
231       std::vector <DominatorTree::UpdateType> Updates;
232       if (DDT)
233         Updates.reserve(SI->getNumSuccessors() - 1);
234 
235       // Remove entries from PHI nodes which we no longer branch to...
236       for (BasicBlock *Succ : SI->successors()) {
237         // Found case matching a constant operand?
238         if (Succ == TheOnlyDest) {
239           TheOnlyDest = nullptr; // Don't modify the first branch to TheOnlyDest
240         } else {
241           Succ->removePredecessor(BB);
242           if (DDT)
243             Updates.push_back({DominatorTree::Delete, BB, Succ});
244         }
245       }
246 
247       // Delete the old switch.
248       Value *Cond = SI->getCondition();
249       SI->eraseFromParent();
250       if (DeleteDeadConditions)
251         RecursivelyDeleteTriviallyDeadInstructions(Cond, TLI);
252       if (DDT)
253         DDT->applyUpdates(Updates);
254       return true;
255     }
256 
257     if (SI->getNumCases() == 1) {
258       // Otherwise, we can fold this switch into a conditional branch
259       // instruction if it has only one non-default destination.
260       auto FirstCase = *SI->case_begin();
261       Value *Cond = Builder.CreateICmpEQ(SI->getCondition(),
262           FirstCase.getCaseValue(), "cond");
263 
264       // Insert the new branch.
265       BranchInst *NewBr = Builder.CreateCondBr(Cond,
266                                                FirstCase.getCaseSuccessor(),
267                                                SI->getDefaultDest());
268       MDNode *MD = SI->getMetadata(LLVMContext::MD_prof);
269       if (MD && MD->getNumOperands() == 3) {
270         ConstantInt *SICase =
271             mdconst::dyn_extract<ConstantInt>(MD->getOperand(2));
272         ConstantInt *SIDef =
273             mdconst::dyn_extract<ConstantInt>(MD->getOperand(1));
274         assert(SICase && SIDef);
275         // The TrueWeight should be the weight for the single case of SI.
276         NewBr->setMetadata(LLVMContext::MD_prof,
277                         MDBuilder(BB->getContext()).
278                         createBranchWeights(SICase->getValue().getZExtValue(),
279                                             SIDef->getValue().getZExtValue()));
280       }
281 
282       // Update make.implicit metadata to the newly-created conditional branch.
283       MDNode *MakeImplicitMD = SI->getMetadata(LLVMContext::MD_make_implicit);
284       if (MakeImplicitMD)
285         NewBr->setMetadata(LLVMContext::MD_make_implicit, MakeImplicitMD);
286 
287       // Delete the old switch.
288       SI->eraseFromParent();
289       return true;
290     }
291     return false;
292   }
293 
294   if (auto *IBI = dyn_cast<IndirectBrInst>(T)) {
295     // indirectbr blockaddress(@F, @BB) -> br label @BB
296     if (auto *BA =
297           dyn_cast<BlockAddress>(IBI->getAddress()->stripPointerCasts())) {
298       BasicBlock *TheOnlyDest = BA->getBasicBlock();
299       std::vector <DominatorTree::UpdateType> Updates;
300       if (DDT)
301         Updates.reserve(IBI->getNumDestinations() - 1);
302 
303       // Insert the new branch.
304       Builder.CreateBr(TheOnlyDest);
305 
306       for (unsigned i = 0, e = IBI->getNumDestinations(); i != e; ++i) {
307         if (IBI->getDestination(i) == TheOnlyDest) {
308           TheOnlyDest = nullptr;
309         } else {
310           BasicBlock *ParentBB = IBI->getParent();
311           BasicBlock *DestBB = IBI->getDestination(i);
312           DestBB->removePredecessor(ParentBB);
313           if (DDT)
314             Updates.push_back({DominatorTree::Delete, ParentBB, DestBB});
315         }
316       }
317       Value *Address = IBI->getAddress();
318       IBI->eraseFromParent();
319       if (DeleteDeadConditions)
320         RecursivelyDeleteTriviallyDeadInstructions(Address, TLI);
321 
322       // If we didn't find our destination in the IBI successor list, then we
323       // have undefined behavior.  Replace the unconditional branch with an
324       // 'unreachable' instruction.
325       if (TheOnlyDest) {
326         BB->getTerminator()->eraseFromParent();
327         new UnreachableInst(BB->getContext(), BB);
328       }
329 
330       if (DDT)
331         DDT->applyUpdates(Updates);
332       return true;
333     }
334   }
335 
336   return false;
337 }
338 
339 //===----------------------------------------------------------------------===//
340 //  Local dead code elimination.
341 //
342 
343 /// isInstructionTriviallyDead - Return true if the result produced by the
344 /// instruction is not used, and the instruction has no side effects.
345 ///
346 bool llvm::isInstructionTriviallyDead(Instruction *I,
347                                       const TargetLibraryInfo *TLI) {
348   if (!I->use_empty())
349     return false;
350   return wouldInstructionBeTriviallyDead(I, TLI);
351 }
352 
353 bool llvm::wouldInstructionBeTriviallyDead(Instruction *I,
354                                            const TargetLibraryInfo *TLI) {
355   if (isa<TerminatorInst>(I))
356     return false;
357 
358   // We don't want the landingpad-like instructions removed by anything this
359   // general.
360   if (I->isEHPad())
361     return false;
362 
363   // We don't want debug info removed by anything this general, unless
364   // debug info is empty.
365   if (DbgDeclareInst *DDI = dyn_cast<DbgDeclareInst>(I)) {
366     if (DDI->getAddress())
367       return false;
368     return true;
369   }
370   if (DbgValueInst *DVI = dyn_cast<DbgValueInst>(I)) {
371     if (DVI->getValue())
372       return false;
373     return true;
374   }
375   if (DbgLabelInst *DLI = dyn_cast<DbgLabelInst>(I)) {
376     if (DLI->getLabel())
377       return false;
378     return true;
379   }
380 
381   if (!I->mayHaveSideEffects())
382     return true;
383 
384   // Special case intrinsics that "may have side effects" but can be deleted
385   // when dead.
386   if (IntrinsicInst *II = dyn_cast<IntrinsicInst>(I)) {
387     // Safe to delete llvm.stacksave if dead.
388     if (II->getIntrinsicID() == Intrinsic::stacksave)
389       return true;
390 
391     // Lifetime intrinsics are dead when their right-hand is undef.
392     if (II->getIntrinsicID() == Intrinsic::lifetime_start ||
393         II->getIntrinsicID() == Intrinsic::lifetime_end)
394       return isa<UndefValue>(II->getArgOperand(1));
395 
396     // Assumptions are dead if their condition is trivially true.  Guards on
397     // true are operationally no-ops.  In the future we can consider more
398     // sophisticated tradeoffs for guards considering potential for check
399     // widening, but for now we keep things simple.
400     if (II->getIntrinsicID() == Intrinsic::assume ||
401         II->getIntrinsicID() == Intrinsic::experimental_guard) {
402       if (ConstantInt *Cond = dyn_cast<ConstantInt>(II->getArgOperand(0)))
403         return !Cond->isZero();
404 
405       return false;
406     }
407   }
408 
409   if (isAllocLikeFn(I, TLI))
410     return true;
411 
412   if (CallInst *CI = isFreeCall(I, TLI))
413     if (Constant *C = dyn_cast<Constant>(CI->getArgOperand(0)))
414       return C->isNullValue() || isa<UndefValue>(C);
415 
416   if (CallSite CS = CallSite(I))
417     if (isMathLibCallNoop(CS, TLI))
418       return true;
419 
420   return false;
421 }
422 
423 /// RecursivelyDeleteTriviallyDeadInstructions - If the specified value is a
424 /// trivially dead instruction, delete it.  If that makes any of its operands
425 /// trivially dead, delete them too, recursively.  Return true if any
426 /// instructions were deleted.
427 bool
428 llvm::RecursivelyDeleteTriviallyDeadInstructions(Value *V,
429                                                  const TargetLibraryInfo *TLI) {
430   Instruction *I = dyn_cast<Instruction>(V);
431   if (!I || !I->use_empty() || !isInstructionTriviallyDead(I, TLI))
432     return false;
433 
434   SmallVector<Instruction*, 16> DeadInsts;
435   DeadInsts.push_back(I);
436 
437   do {
438     I = DeadInsts.pop_back_val();
439     salvageDebugInfo(*I);
440 
441     // Null out all of the instruction's operands to see if any operand becomes
442     // dead as we go.
443     for (unsigned i = 0, e = I->getNumOperands(); i != e; ++i) {
444       Value *OpV = I->getOperand(i);
445       I->setOperand(i, nullptr);
446 
447       if (!OpV->use_empty()) continue;
448 
449       // If the operand is an instruction that became dead as we nulled out the
450       // operand, and if it is 'trivially' dead, delete it in a future loop
451       // iteration.
452       if (Instruction *OpI = dyn_cast<Instruction>(OpV))
453         if (isInstructionTriviallyDead(OpI, TLI))
454           DeadInsts.push_back(OpI);
455     }
456 
457     I->eraseFromParent();
458   } while (!DeadInsts.empty());
459 
460   return true;
461 }
462 
463 /// areAllUsesEqual - Check whether the uses of a value are all the same.
464 /// This is similar to Instruction::hasOneUse() except this will also return
465 /// true when there are no uses or multiple uses that all refer to the same
466 /// value.
467 static bool areAllUsesEqual(Instruction *I) {
468   Value::user_iterator UI = I->user_begin();
469   Value::user_iterator UE = I->user_end();
470   if (UI == UE)
471     return true;
472 
473   User *TheUse = *UI;
474   for (++UI; UI != UE; ++UI) {
475     if (*UI != TheUse)
476       return false;
477   }
478   return true;
479 }
480 
481 /// RecursivelyDeleteDeadPHINode - If the specified value is an effectively
482 /// dead PHI node, due to being a def-use chain of single-use nodes that
483 /// either forms a cycle or is terminated by a trivially dead instruction,
484 /// delete it.  If that makes any of its operands trivially dead, delete them
485 /// too, recursively.  Return true if a change was made.
486 bool llvm::RecursivelyDeleteDeadPHINode(PHINode *PN,
487                                         const TargetLibraryInfo *TLI) {
488   SmallPtrSet<Instruction*, 4> Visited;
489   for (Instruction *I = PN; areAllUsesEqual(I) && !I->mayHaveSideEffects();
490        I = cast<Instruction>(*I->user_begin())) {
491     if (I->use_empty())
492       return RecursivelyDeleteTriviallyDeadInstructions(I, TLI);
493 
494     // If we find an instruction more than once, we're on a cycle that
495     // won't prove fruitful.
496     if (!Visited.insert(I).second) {
497       // Break the cycle and delete the instruction and its operands.
498       I->replaceAllUsesWith(UndefValue::get(I->getType()));
499       (void)RecursivelyDeleteTriviallyDeadInstructions(I, TLI);
500       return true;
501     }
502   }
503   return false;
504 }
505 
506 static bool
507 simplifyAndDCEInstruction(Instruction *I,
508                           SmallSetVector<Instruction *, 16> &WorkList,
509                           const DataLayout &DL,
510                           const TargetLibraryInfo *TLI) {
511   if (isInstructionTriviallyDead(I, TLI)) {
512     salvageDebugInfo(*I);
513 
514     // Null out all of the instruction's operands to see if any operand becomes
515     // dead as we go.
516     for (unsigned i = 0, e = I->getNumOperands(); i != e; ++i) {
517       Value *OpV = I->getOperand(i);
518       I->setOperand(i, nullptr);
519 
520       if (!OpV->use_empty() || I == OpV)
521         continue;
522 
523       // If the operand is an instruction that became dead as we nulled out the
524       // operand, and if it is 'trivially' dead, delete it in a future loop
525       // iteration.
526       if (Instruction *OpI = dyn_cast<Instruction>(OpV))
527         if (isInstructionTriviallyDead(OpI, TLI))
528           WorkList.insert(OpI);
529     }
530 
531     I->eraseFromParent();
532 
533     return true;
534   }
535 
536   if (Value *SimpleV = SimplifyInstruction(I, DL)) {
537     // Add the users to the worklist. CAREFUL: an instruction can use itself,
538     // in the case of a phi node.
539     for (User *U : I->users()) {
540       if (U != I) {
541         WorkList.insert(cast<Instruction>(U));
542       }
543     }
544 
545     // Replace the instruction with its simplified value.
546     bool Changed = false;
547     if (!I->use_empty()) {
548       I->replaceAllUsesWith(SimpleV);
549       Changed = true;
550     }
551     if (isInstructionTriviallyDead(I, TLI)) {
552       I->eraseFromParent();
553       Changed = true;
554     }
555     return Changed;
556   }
557   return false;
558 }
559 
560 /// SimplifyInstructionsInBlock - Scan the specified basic block and try to
561 /// simplify any instructions in it and recursively delete dead instructions.
562 ///
563 /// This returns true if it changed the code, note that it can delete
564 /// instructions in other blocks as well in this block.
565 bool llvm::SimplifyInstructionsInBlock(BasicBlock *BB,
566                                        const TargetLibraryInfo *TLI) {
567   bool MadeChange = false;
568   const DataLayout &DL = BB->getModule()->getDataLayout();
569 
570 #ifndef NDEBUG
571   // In debug builds, ensure that the terminator of the block is never replaced
572   // or deleted by these simplifications. The idea of simplification is that it
573   // cannot introduce new instructions, and there is no way to replace the
574   // terminator of a block without introducing a new instruction.
575   AssertingVH<Instruction> TerminatorVH(&BB->back());
576 #endif
577 
578   SmallSetVector<Instruction *, 16> WorkList;
579   // Iterate over the original function, only adding insts to the worklist
580   // if they actually need to be revisited. This avoids having to pre-init
581   // the worklist with the entire function's worth of instructions.
582   for (BasicBlock::iterator BI = BB->begin(), E = std::prev(BB->end());
583        BI != E;) {
584     assert(!BI->isTerminator());
585     Instruction *I = &*BI;
586     ++BI;
587 
588     // We're visiting this instruction now, so make sure it's not in the
589     // worklist from an earlier visit.
590     if (!WorkList.count(I))
591       MadeChange |= simplifyAndDCEInstruction(I, WorkList, DL, TLI);
592   }
593 
594   while (!WorkList.empty()) {
595     Instruction *I = WorkList.pop_back_val();
596     MadeChange |= simplifyAndDCEInstruction(I, WorkList, DL, TLI);
597   }
598   return MadeChange;
599 }
600 
601 //===----------------------------------------------------------------------===//
602 //  Control Flow Graph Restructuring.
603 //
604 
605 /// RemovePredecessorAndSimplify - Like BasicBlock::removePredecessor, this
606 /// method is called when we're about to delete Pred as a predecessor of BB.  If
607 /// BB contains any PHI nodes, this drops the entries in the PHI nodes for Pred.
608 ///
609 /// Unlike the removePredecessor method, this attempts to simplify uses of PHI
610 /// nodes that collapse into identity values.  For example, if we have:
611 ///   x = phi(1, 0, 0, 0)
612 ///   y = and x, z
613 ///
614 /// .. and delete the predecessor corresponding to the '1', this will attempt to
615 /// recursively fold the and to 0.
616 void llvm::RemovePredecessorAndSimplify(BasicBlock *BB, BasicBlock *Pred,
617                                         DeferredDominance *DDT) {
618   // This only adjusts blocks with PHI nodes.
619   if (!isa<PHINode>(BB->begin()))
620     return;
621 
622   // Remove the entries for Pred from the PHI nodes in BB, but do not simplify
623   // them down.  This will leave us with single entry phi nodes and other phis
624   // that can be removed.
625   BB->removePredecessor(Pred, true);
626 
627   WeakTrackingVH PhiIt = &BB->front();
628   while (PHINode *PN = dyn_cast<PHINode>(PhiIt)) {
629     PhiIt = &*++BasicBlock::iterator(cast<Instruction>(PhiIt));
630     Value *OldPhiIt = PhiIt;
631 
632     if (!recursivelySimplifyInstruction(PN))
633       continue;
634 
635     // If recursive simplification ended up deleting the next PHI node we would
636     // iterate to, then our iterator is invalid, restart scanning from the top
637     // of the block.
638     if (PhiIt != OldPhiIt) PhiIt = &BB->front();
639   }
640   if (DDT)
641     DDT->deleteEdge(Pred, BB);
642 }
643 
644 /// MergeBasicBlockIntoOnlyPred - DestBB is a block with one predecessor and its
645 /// predecessor is known to have one successor (DestBB!).  Eliminate the edge
646 /// between them, moving the instructions in the predecessor into DestBB and
647 /// deleting the predecessor block.
648 void llvm::MergeBasicBlockIntoOnlyPred(BasicBlock *DestBB, DominatorTree *DT,
649                                        DeferredDominance *DDT) {
650   assert(!(DT && DDT) && "Cannot call with both DT and DDT.");
651 
652   // If BB has single-entry PHI nodes, fold them.
653   while (PHINode *PN = dyn_cast<PHINode>(DestBB->begin())) {
654     Value *NewVal = PN->getIncomingValue(0);
655     // Replace self referencing PHI with undef, it must be dead.
656     if (NewVal == PN) NewVal = UndefValue::get(PN->getType());
657     PN->replaceAllUsesWith(NewVal);
658     PN->eraseFromParent();
659   }
660 
661   BasicBlock *PredBB = DestBB->getSinglePredecessor();
662   assert(PredBB && "Block doesn't have a single predecessor!");
663 
664   bool ReplaceEntryBB = false;
665   if (PredBB == &DestBB->getParent()->getEntryBlock())
666     ReplaceEntryBB = true;
667 
668   // Deferred DT update: Collect all the edges that enter PredBB. These
669   // dominator edges will be redirected to DestBB.
670   std::vector <DominatorTree::UpdateType> Updates;
671   if (DDT && !ReplaceEntryBB) {
672     Updates.reserve(1 +
673                     (2 * std::distance(pred_begin(PredBB), pred_end(PredBB))));
674     Updates.push_back({DominatorTree::Delete, PredBB, DestBB});
675     for (auto I = pred_begin(PredBB), E = pred_end(PredBB); I != E; ++I) {
676       Updates.push_back({DominatorTree::Delete, *I, PredBB});
677       // This predecessor of PredBB may already have DestBB as a successor.
678       if (llvm::find(successors(*I), DestBB) == succ_end(*I))
679         Updates.push_back({DominatorTree::Insert, *I, DestBB});
680     }
681   }
682 
683   // Zap anything that took the address of DestBB.  Not doing this will give the
684   // address an invalid value.
685   if (DestBB->hasAddressTaken()) {
686     BlockAddress *BA = BlockAddress::get(DestBB);
687     Constant *Replacement =
688       ConstantInt::get(Type::getInt32Ty(BA->getContext()), 1);
689     BA->replaceAllUsesWith(ConstantExpr::getIntToPtr(Replacement,
690                                                      BA->getType()));
691     BA->destroyConstant();
692   }
693 
694   // Anything that branched to PredBB now branches to DestBB.
695   PredBB->replaceAllUsesWith(DestBB);
696 
697   // Splice all the instructions from PredBB to DestBB.
698   PredBB->getTerminator()->eraseFromParent();
699   DestBB->getInstList().splice(DestBB->begin(), PredBB->getInstList());
700 
701   // If the PredBB is the entry block of the function, move DestBB up to
702   // become the entry block after we erase PredBB.
703   if (ReplaceEntryBB)
704     DestBB->moveAfter(PredBB);
705 
706   if (DT) {
707     // For some irreducible CFG we end up having forward-unreachable blocks
708     // so check if getNode returns a valid node before updating the domtree.
709     if (DomTreeNode *DTN = DT->getNode(PredBB)) {
710       BasicBlock *PredBBIDom = DTN->getIDom()->getBlock();
711       DT->changeImmediateDominator(DestBB, PredBBIDom);
712       DT->eraseNode(PredBB);
713     }
714   }
715 
716   if (DDT) {
717     DDT->deleteBB(PredBB); // Deferred deletion of BB.
718     if (ReplaceEntryBB)
719       // The entry block was removed and there is no external interface for the
720       // dominator tree to be notified of this change. In this corner-case we
721       // recalculate the entire tree.
722       DDT->recalculate(*(DestBB->getParent()));
723     else
724       DDT->applyUpdates(Updates);
725   } else {
726     PredBB->eraseFromParent(); // Nuke BB.
727   }
728 }
729 
730 /// CanMergeValues - Return true if we can choose one of these values to use
731 /// in place of the other. Note that we will always choose the non-undef
732 /// value to keep.
733 static bool CanMergeValues(Value *First, Value *Second) {
734   return First == Second || isa<UndefValue>(First) || isa<UndefValue>(Second);
735 }
736 
737 /// CanPropagatePredecessorsForPHIs - Return true if we can fold BB, an
738 /// almost-empty BB ending in an unconditional branch to Succ, into Succ.
739 ///
740 /// Assumption: Succ is the single successor for BB.
741 static bool CanPropagatePredecessorsForPHIs(BasicBlock *BB, BasicBlock *Succ) {
742   assert(*succ_begin(BB) == Succ && "Succ is not successor of BB!");
743 
744   DEBUG(dbgs() << "Looking to fold " << BB->getName() << " into "
745         << Succ->getName() << "\n");
746   // Shortcut, if there is only a single predecessor it must be BB and merging
747   // is always safe
748   if (Succ->getSinglePredecessor()) return true;
749 
750   // Make a list of the predecessors of BB
751   SmallPtrSet<BasicBlock*, 16> BBPreds(pred_begin(BB), pred_end(BB));
752 
753   // Look at all the phi nodes in Succ, to see if they present a conflict when
754   // merging these blocks
755   for (BasicBlock::iterator I = Succ->begin(); isa<PHINode>(I); ++I) {
756     PHINode *PN = cast<PHINode>(I);
757 
758     // If the incoming value from BB is again a PHINode in
759     // BB which has the same incoming value for *PI as PN does, we can
760     // merge the phi nodes and then the blocks can still be merged
761     PHINode *BBPN = dyn_cast<PHINode>(PN->getIncomingValueForBlock(BB));
762     if (BBPN && BBPN->getParent() == BB) {
763       for (unsigned PI = 0, PE = PN->getNumIncomingValues(); PI != PE; ++PI) {
764         BasicBlock *IBB = PN->getIncomingBlock(PI);
765         if (BBPreds.count(IBB) &&
766             !CanMergeValues(BBPN->getIncomingValueForBlock(IBB),
767                             PN->getIncomingValue(PI))) {
768           DEBUG(dbgs() << "Can't fold, phi node " << PN->getName() << " in "
769                 << Succ->getName() << " is conflicting with "
770                 << BBPN->getName() << " with regard to common predecessor "
771                 << IBB->getName() << "\n");
772           return false;
773         }
774       }
775     } else {
776       Value* Val = PN->getIncomingValueForBlock(BB);
777       for (unsigned PI = 0, PE = PN->getNumIncomingValues(); PI != PE; ++PI) {
778         // See if the incoming value for the common predecessor is equal to the
779         // one for BB, in which case this phi node will not prevent the merging
780         // of the block.
781         BasicBlock *IBB = PN->getIncomingBlock(PI);
782         if (BBPreds.count(IBB) &&
783             !CanMergeValues(Val, PN->getIncomingValue(PI))) {
784           DEBUG(dbgs() << "Can't fold, phi node " << PN->getName() << " in "
785                 << Succ->getName() << " is conflicting with regard to common "
786                 << "predecessor " << IBB->getName() << "\n");
787           return false;
788         }
789       }
790     }
791   }
792 
793   return true;
794 }
795 
796 using PredBlockVector = SmallVector<BasicBlock *, 16>;
797 using IncomingValueMap = DenseMap<BasicBlock *, Value *>;
798 
799 /// Determines the value to use as the phi node input for a block.
800 ///
801 /// Select between \p OldVal any value that we know flows from \p BB
802 /// to a particular phi on the basis of which one (if either) is not
803 /// undef. Update IncomingValues based on the selected value.
804 ///
805 /// \param OldVal The value we are considering selecting.
806 /// \param BB The block that the value flows in from.
807 /// \param IncomingValues A map from block-to-value for other phi inputs
808 /// that we have examined.
809 ///
810 /// \returns the selected value.
811 static Value *selectIncomingValueForBlock(Value *OldVal, BasicBlock *BB,
812                                           IncomingValueMap &IncomingValues) {
813   if (!isa<UndefValue>(OldVal)) {
814     assert((!IncomingValues.count(BB) ||
815             IncomingValues.find(BB)->second == OldVal) &&
816            "Expected OldVal to match incoming value from BB!");
817 
818     IncomingValues.insert(std::make_pair(BB, OldVal));
819     return OldVal;
820   }
821 
822   IncomingValueMap::const_iterator It = IncomingValues.find(BB);
823   if (It != IncomingValues.end()) return It->second;
824 
825   return OldVal;
826 }
827 
828 /// Create a map from block to value for the operands of a
829 /// given phi.
830 ///
831 /// Create a map from block to value for each non-undef value flowing
832 /// into \p PN.
833 ///
834 /// \param PN The phi we are collecting the map for.
835 /// \param IncomingValues [out] The map from block to value for this phi.
836 static void gatherIncomingValuesToPhi(PHINode *PN,
837                                       IncomingValueMap &IncomingValues) {
838   for (unsigned i = 0, e = PN->getNumIncomingValues(); i != e; ++i) {
839     BasicBlock *BB = PN->getIncomingBlock(i);
840     Value *V = PN->getIncomingValue(i);
841 
842     if (!isa<UndefValue>(V))
843       IncomingValues.insert(std::make_pair(BB, V));
844   }
845 }
846 
847 /// Replace the incoming undef values to a phi with the values
848 /// from a block-to-value map.
849 ///
850 /// \param PN The phi we are replacing the undefs in.
851 /// \param IncomingValues A map from block to value.
852 static void replaceUndefValuesInPhi(PHINode *PN,
853                                     const IncomingValueMap &IncomingValues) {
854   for (unsigned i = 0, e = PN->getNumIncomingValues(); i != e; ++i) {
855     Value *V = PN->getIncomingValue(i);
856 
857     if (!isa<UndefValue>(V)) continue;
858 
859     BasicBlock *BB = PN->getIncomingBlock(i);
860     IncomingValueMap::const_iterator It = IncomingValues.find(BB);
861     if (It == IncomingValues.end()) continue;
862 
863     PN->setIncomingValue(i, It->second);
864   }
865 }
866 
867 /// Replace a value flowing from a block to a phi with
868 /// potentially multiple instances of that value flowing from the
869 /// block's predecessors to the phi.
870 ///
871 /// \param BB The block with the value flowing into the phi.
872 /// \param BBPreds The predecessors of BB.
873 /// \param PN The phi that we are updating.
874 static void redirectValuesFromPredecessorsToPhi(BasicBlock *BB,
875                                                 const PredBlockVector &BBPreds,
876                                                 PHINode *PN) {
877   Value *OldVal = PN->removeIncomingValue(BB, false);
878   assert(OldVal && "No entry in PHI for Pred BB!");
879 
880   IncomingValueMap IncomingValues;
881 
882   // We are merging two blocks - BB, and the block containing PN - and
883   // as a result we need to redirect edges from the predecessors of BB
884   // to go to the block containing PN, and update PN
885   // accordingly. Since we allow merging blocks in the case where the
886   // predecessor and successor blocks both share some predecessors,
887   // and where some of those common predecessors might have undef
888   // values flowing into PN, we want to rewrite those values to be
889   // consistent with the non-undef values.
890 
891   gatherIncomingValuesToPhi(PN, IncomingValues);
892 
893   // If this incoming value is one of the PHI nodes in BB, the new entries
894   // in the PHI node are the entries from the old PHI.
895   if (isa<PHINode>(OldVal) && cast<PHINode>(OldVal)->getParent() == BB) {
896     PHINode *OldValPN = cast<PHINode>(OldVal);
897     for (unsigned i = 0, e = OldValPN->getNumIncomingValues(); i != e; ++i) {
898       // Note that, since we are merging phi nodes and BB and Succ might
899       // have common predecessors, we could end up with a phi node with
900       // identical incoming branches. This will be cleaned up later (and
901       // will trigger asserts if we try to clean it up now, without also
902       // simplifying the corresponding conditional branch).
903       BasicBlock *PredBB = OldValPN->getIncomingBlock(i);
904       Value *PredVal = OldValPN->getIncomingValue(i);
905       Value *Selected = selectIncomingValueForBlock(PredVal, PredBB,
906                                                     IncomingValues);
907 
908       // And add a new incoming value for this predecessor for the
909       // newly retargeted branch.
910       PN->addIncoming(Selected, PredBB);
911     }
912   } else {
913     for (unsigned i = 0, e = BBPreds.size(); i != e; ++i) {
914       // Update existing incoming values in PN for this
915       // predecessor of BB.
916       BasicBlock *PredBB = BBPreds[i];
917       Value *Selected = selectIncomingValueForBlock(OldVal, PredBB,
918                                                     IncomingValues);
919 
920       // And add a new incoming value for this predecessor for the
921       // newly retargeted branch.
922       PN->addIncoming(Selected, PredBB);
923     }
924   }
925 
926   replaceUndefValuesInPhi(PN, IncomingValues);
927 }
928 
929 /// TryToSimplifyUncondBranchFromEmptyBlock - BB is known to contain an
930 /// unconditional branch, and contains no instructions other than PHI nodes,
931 /// potential side-effect free intrinsics and the branch.  If possible,
932 /// eliminate BB by rewriting all the predecessors to branch to the successor
933 /// block and return true.  If we can't transform, return false.
934 bool llvm::TryToSimplifyUncondBranchFromEmptyBlock(BasicBlock *BB,
935                                                    DeferredDominance *DDT) {
936   assert(BB != &BB->getParent()->getEntryBlock() &&
937          "TryToSimplifyUncondBranchFromEmptyBlock called on entry block!");
938 
939   // We can't eliminate infinite loops.
940   BasicBlock *Succ = cast<BranchInst>(BB->getTerminator())->getSuccessor(0);
941   if (BB == Succ) return false;
942 
943   // Check to see if merging these blocks would cause conflicts for any of the
944   // phi nodes in BB or Succ. If not, we can safely merge.
945   if (!CanPropagatePredecessorsForPHIs(BB, Succ)) return false;
946 
947   // Check for cases where Succ has multiple predecessors and a PHI node in BB
948   // has uses which will not disappear when the PHI nodes are merged.  It is
949   // possible to handle such cases, but difficult: it requires checking whether
950   // BB dominates Succ, which is non-trivial to calculate in the case where
951   // Succ has multiple predecessors.  Also, it requires checking whether
952   // constructing the necessary self-referential PHI node doesn't introduce any
953   // conflicts; this isn't too difficult, but the previous code for doing this
954   // was incorrect.
955   //
956   // Note that if this check finds a live use, BB dominates Succ, so BB is
957   // something like a loop pre-header (or rarely, a part of an irreducible CFG);
958   // folding the branch isn't profitable in that case anyway.
959   if (!Succ->getSinglePredecessor()) {
960     BasicBlock::iterator BBI = BB->begin();
961     while (isa<PHINode>(*BBI)) {
962       for (Use &U : BBI->uses()) {
963         if (PHINode* PN = dyn_cast<PHINode>(U.getUser())) {
964           if (PN->getIncomingBlock(U) != BB)
965             return false;
966         } else {
967           return false;
968         }
969       }
970       ++BBI;
971     }
972   }
973 
974   DEBUG(dbgs() << "Killing Trivial BB: \n" << *BB);
975 
976   std::vector<DominatorTree::UpdateType> Updates;
977   if (DDT) {
978     Updates.reserve(1 + (2 * std::distance(pred_begin(BB), pred_end(BB))));
979     Updates.push_back({DominatorTree::Delete, BB, Succ});
980     // All predecessors of BB will be moved to Succ.
981     for (auto I = pred_begin(BB), E = pred_end(BB); I != E; ++I) {
982       Updates.push_back({DominatorTree::Delete, *I, BB});
983       // This predecessor of BB may already have Succ as a successor.
984       if (llvm::find(successors(*I), Succ) == succ_end(*I))
985         Updates.push_back({DominatorTree::Insert, *I, Succ});
986     }
987   }
988 
989   if (isa<PHINode>(Succ->begin())) {
990     // If there is more than one pred of succ, and there are PHI nodes in
991     // the successor, then we need to add incoming edges for the PHI nodes
992     //
993     const PredBlockVector BBPreds(pred_begin(BB), pred_end(BB));
994 
995     // Loop over all of the PHI nodes in the successor of BB.
996     for (BasicBlock::iterator I = Succ->begin(); isa<PHINode>(I); ++I) {
997       PHINode *PN = cast<PHINode>(I);
998 
999       redirectValuesFromPredecessorsToPhi(BB, BBPreds, PN);
1000     }
1001   }
1002 
1003   if (Succ->getSinglePredecessor()) {
1004     // BB is the only predecessor of Succ, so Succ will end up with exactly
1005     // the same predecessors BB had.
1006 
1007     // Copy over any phi, debug or lifetime instruction.
1008     BB->getTerminator()->eraseFromParent();
1009     Succ->getInstList().splice(Succ->getFirstNonPHI()->getIterator(),
1010                                BB->getInstList());
1011   } else {
1012     while (PHINode *PN = dyn_cast<PHINode>(&BB->front())) {
1013       // We explicitly check for such uses in CanPropagatePredecessorsForPHIs.
1014       assert(PN->use_empty() && "There shouldn't be any uses here!");
1015       PN->eraseFromParent();
1016     }
1017   }
1018 
1019   // If the unconditional branch we replaced contains llvm.loop metadata, we
1020   // add the metadata to the branch instructions in the predecessors.
1021   unsigned LoopMDKind = BB->getContext().getMDKindID("llvm.loop");
1022   Instruction *TI = BB->getTerminator();
1023   if (TI)
1024     if (MDNode *LoopMD = TI->getMetadata(LoopMDKind))
1025       for (pred_iterator PI = pred_begin(BB), E = pred_end(BB); PI != E; ++PI) {
1026         BasicBlock *Pred = *PI;
1027         Pred->getTerminator()->setMetadata(LoopMDKind, LoopMD);
1028       }
1029 
1030   // Everything that jumped to BB now goes to Succ.
1031   BB->replaceAllUsesWith(Succ);
1032   if (!Succ->hasName()) Succ->takeName(BB);
1033 
1034   if (DDT) {
1035     DDT->deleteBB(BB); // Deferred deletion of the old basic block.
1036     DDT->applyUpdates(Updates);
1037   } else {
1038     BB->eraseFromParent(); // Delete the old basic block.
1039   }
1040   return true;
1041 }
1042 
1043 /// EliminateDuplicatePHINodes - Check for and eliminate duplicate PHI
1044 /// nodes in this block. This doesn't try to be clever about PHI nodes
1045 /// which differ only in the order of the incoming values, but instcombine
1046 /// orders them so it usually won't matter.
1047 bool llvm::EliminateDuplicatePHINodes(BasicBlock *BB) {
1048   // This implementation doesn't currently consider undef operands
1049   // specially. Theoretically, two phis which are identical except for
1050   // one having an undef where the other doesn't could be collapsed.
1051 
1052   struct PHIDenseMapInfo {
1053     static PHINode *getEmptyKey() {
1054       return DenseMapInfo<PHINode *>::getEmptyKey();
1055     }
1056 
1057     static PHINode *getTombstoneKey() {
1058       return DenseMapInfo<PHINode *>::getTombstoneKey();
1059     }
1060 
1061     static unsigned getHashValue(PHINode *PN) {
1062       // Compute a hash value on the operands. Instcombine will likely have
1063       // sorted them, which helps expose duplicates, but we have to check all
1064       // the operands to be safe in case instcombine hasn't run.
1065       return static_cast<unsigned>(hash_combine(
1066           hash_combine_range(PN->value_op_begin(), PN->value_op_end()),
1067           hash_combine_range(PN->block_begin(), PN->block_end())));
1068     }
1069 
1070     static bool isEqual(PHINode *LHS, PHINode *RHS) {
1071       if (LHS == getEmptyKey() || LHS == getTombstoneKey() ||
1072           RHS == getEmptyKey() || RHS == getTombstoneKey())
1073         return LHS == RHS;
1074       return LHS->isIdenticalTo(RHS);
1075     }
1076   };
1077 
1078   // Set of unique PHINodes.
1079   DenseSet<PHINode *, PHIDenseMapInfo> PHISet;
1080 
1081   // Examine each PHI.
1082   bool Changed = false;
1083   for (auto I = BB->begin(); PHINode *PN = dyn_cast<PHINode>(I++);) {
1084     auto Inserted = PHISet.insert(PN);
1085     if (!Inserted.second) {
1086       // A duplicate. Replace this PHI with its duplicate.
1087       PN->replaceAllUsesWith(*Inserted.first);
1088       PN->eraseFromParent();
1089       Changed = true;
1090 
1091       // The RAUW can change PHIs that we already visited. Start over from the
1092       // beginning.
1093       PHISet.clear();
1094       I = BB->begin();
1095     }
1096   }
1097 
1098   return Changed;
1099 }
1100 
1101 /// enforceKnownAlignment - If the specified pointer points to an object that
1102 /// we control, modify the object's alignment to PrefAlign. This isn't
1103 /// often possible though. If alignment is important, a more reliable approach
1104 /// is to simply align all global variables and allocation instructions to
1105 /// their preferred alignment from the beginning.
1106 static unsigned enforceKnownAlignment(Value *V, unsigned Align,
1107                                       unsigned PrefAlign,
1108                                       const DataLayout &DL) {
1109   assert(PrefAlign > Align);
1110 
1111   V = V->stripPointerCasts();
1112 
1113   if (AllocaInst *AI = dyn_cast<AllocaInst>(V)) {
1114     // TODO: ideally, computeKnownBits ought to have used
1115     // AllocaInst::getAlignment() in its computation already, making
1116     // the below max redundant. But, as it turns out,
1117     // stripPointerCasts recurses through infinite layers of bitcasts,
1118     // while computeKnownBits is not allowed to traverse more than 6
1119     // levels.
1120     Align = std::max(AI->getAlignment(), Align);
1121     if (PrefAlign <= Align)
1122       return Align;
1123 
1124     // If the preferred alignment is greater than the natural stack alignment
1125     // then don't round up. This avoids dynamic stack realignment.
1126     if (DL.exceedsNaturalStackAlignment(PrefAlign))
1127       return Align;
1128     AI->setAlignment(PrefAlign);
1129     return PrefAlign;
1130   }
1131 
1132   if (auto *GO = dyn_cast<GlobalObject>(V)) {
1133     // TODO: as above, this shouldn't be necessary.
1134     Align = std::max(GO->getAlignment(), Align);
1135     if (PrefAlign <= Align)
1136       return Align;
1137 
1138     // If there is a large requested alignment and we can, bump up the alignment
1139     // of the global.  If the memory we set aside for the global may not be the
1140     // memory used by the final program then it is impossible for us to reliably
1141     // enforce the preferred alignment.
1142     if (!GO->canIncreaseAlignment())
1143       return Align;
1144 
1145     GO->setAlignment(PrefAlign);
1146     return PrefAlign;
1147   }
1148 
1149   return Align;
1150 }
1151 
1152 unsigned llvm::getOrEnforceKnownAlignment(Value *V, unsigned PrefAlign,
1153                                           const DataLayout &DL,
1154                                           const Instruction *CxtI,
1155                                           AssumptionCache *AC,
1156                                           const DominatorTree *DT) {
1157   assert(V->getType()->isPointerTy() &&
1158          "getOrEnforceKnownAlignment expects a pointer!");
1159 
1160   KnownBits Known = computeKnownBits(V, DL, 0, AC, CxtI, DT);
1161   unsigned TrailZ = Known.countMinTrailingZeros();
1162 
1163   // Avoid trouble with ridiculously large TrailZ values, such as
1164   // those computed from a null pointer.
1165   TrailZ = std::min(TrailZ, unsigned(sizeof(unsigned) * CHAR_BIT - 1));
1166 
1167   unsigned Align = 1u << std::min(Known.getBitWidth() - 1, TrailZ);
1168 
1169   // LLVM doesn't support alignments larger than this currently.
1170   Align = std::min(Align, +Value::MaximumAlignment);
1171 
1172   if (PrefAlign > Align)
1173     Align = enforceKnownAlignment(V, Align, PrefAlign, DL);
1174 
1175   // We don't need to make any adjustment.
1176   return Align;
1177 }
1178 
1179 ///===---------------------------------------------------------------------===//
1180 ///  Dbg Intrinsic utilities
1181 ///
1182 
1183 /// See if there is a dbg.value intrinsic for DIVar before I.
1184 static bool LdStHasDebugValue(DILocalVariable *DIVar, DIExpression *DIExpr,
1185                               Instruction *I) {
1186   // Since we can't guarantee that the original dbg.declare instrinsic
1187   // is removed by LowerDbgDeclare(), we need to make sure that we are
1188   // not inserting the same dbg.value intrinsic over and over.
1189   BasicBlock::InstListType::iterator PrevI(I);
1190   if (PrevI != I->getParent()->getInstList().begin()) {
1191     --PrevI;
1192     if (DbgValueInst *DVI = dyn_cast<DbgValueInst>(PrevI))
1193       if (DVI->getValue() == I->getOperand(0) &&
1194           DVI->getVariable() == DIVar &&
1195           DVI->getExpression() == DIExpr)
1196         return true;
1197   }
1198   return false;
1199 }
1200 
1201 /// See if there is a dbg.value intrinsic for DIVar for the PHI node.
1202 static bool PhiHasDebugValue(DILocalVariable *DIVar,
1203                              DIExpression *DIExpr,
1204                              PHINode *APN) {
1205   // Since we can't guarantee that the original dbg.declare instrinsic
1206   // is removed by LowerDbgDeclare(), we need to make sure that we are
1207   // not inserting the same dbg.value intrinsic over and over.
1208   SmallVector<DbgValueInst *, 1> DbgValues;
1209   findDbgValues(DbgValues, APN);
1210   for (auto *DVI : DbgValues) {
1211     assert(DVI->getValue() == APN);
1212     if ((DVI->getVariable() == DIVar) && (DVI->getExpression() == DIExpr))
1213       return true;
1214   }
1215   return false;
1216 }
1217 
1218 /// Inserts a llvm.dbg.value intrinsic before a store to an alloca'd value
1219 /// that has an associated llvm.dbg.declare or llvm.dbg.addr intrinsic.
1220 void llvm::ConvertDebugDeclareToDebugValue(DbgInfoIntrinsic *DII,
1221                                            StoreInst *SI, DIBuilder &Builder) {
1222   assert(DII->isAddressOfVariable());
1223   auto *DIVar = DII->getVariable();
1224   assert(DIVar && "Missing variable");
1225   auto *DIExpr = DII->getExpression();
1226   Value *DV = SI->getOperand(0);
1227 
1228   // If an argument is zero extended then use argument directly. The ZExt
1229   // may be zapped by an optimization pass in future.
1230   Argument *ExtendedArg = nullptr;
1231   if (ZExtInst *ZExt = dyn_cast<ZExtInst>(SI->getOperand(0)))
1232     ExtendedArg = dyn_cast<Argument>(ZExt->getOperand(0));
1233   if (SExtInst *SExt = dyn_cast<SExtInst>(SI->getOperand(0)))
1234     ExtendedArg = dyn_cast<Argument>(SExt->getOperand(0));
1235   if (ExtendedArg) {
1236     // If this DII was already describing only a fragment of a variable, ensure
1237     // that fragment is appropriately narrowed here.
1238     // But if a fragment wasn't used, describe the value as the original
1239     // argument (rather than the zext or sext) so that it remains described even
1240     // if the sext/zext is optimized away. This widens the variable description,
1241     // leaving it up to the consumer to know how the smaller value may be
1242     // represented in a larger register.
1243     if (auto Fragment = DIExpr->getFragmentInfo()) {
1244       unsigned FragmentOffset = Fragment->OffsetInBits;
1245       SmallVector<uint64_t, 3> Ops(DIExpr->elements_begin(),
1246                                    DIExpr->elements_end() - 3);
1247       Ops.push_back(dwarf::DW_OP_LLVM_fragment);
1248       Ops.push_back(FragmentOffset);
1249       const DataLayout &DL = DII->getModule()->getDataLayout();
1250       Ops.push_back(DL.getTypeSizeInBits(ExtendedArg->getType()));
1251       DIExpr = Builder.createExpression(Ops);
1252     }
1253     DV = ExtendedArg;
1254   }
1255   if (!LdStHasDebugValue(DIVar, DIExpr, SI))
1256     Builder.insertDbgValueIntrinsic(DV, DIVar, DIExpr, DII->getDebugLoc(),
1257                                     SI);
1258 }
1259 
1260 /// Inserts a llvm.dbg.value intrinsic before a load of an alloca'd value
1261 /// that has an associated llvm.dbg.declare or llvm.dbg.addr intrinsic.
1262 void llvm::ConvertDebugDeclareToDebugValue(DbgInfoIntrinsic *DII,
1263                                            LoadInst *LI, DIBuilder &Builder) {
1264   auto *DIVar = DII->getVariable();
1265   auto *DIExpr = DII->getExpression();
1266   assert(DIVar && "Missing variable");
1267 
1268   if (LdStHasDebugValue(DIVar, DIExpr, LI))
1269     return;
1270 
1271   // We are now tracking the loaded value instead of the address. In the
1272   // future if multi-location support is added to the IR, it might be
1273   // preferable to keep tracking both the loaded value and the original
1274   // address in case the alloca can not be elided.
1275   Instruction *DbgValue = Builder.insertDbgValueIntrinsic(
1276       LI, DIVar, DIExpr, DII->getDebugLoc(), (Instruction *)nullptr);
1277   DbgValue->insertAfter(LI);
1278 }
1279 
1280 /// Inserts a llvm.dbg.value intrinsic after a phi that has an associated
1281 /// llvm.dbg.declare or llvm.dbg.addr intrinsic.
1282 void llvm::ConvertDebugDeclareToDebugValue(DbgInfoIntrinsic *DII,
1283                                            PHINode *APN, DIBuilder &Builder) {
1284   auto *DIVar = DII->getVariable();
1285   auto *DIExpr = DII->getExpression();
1286   assert(DIVar && "Missing variable");
1287 
1288   if (PhiHasDebugValue(DIVar, DIExpr, APN))
1289     return;
1290 
1291   BasicBlock *BB = APN->getParent();
1292   auto InsertionPt = BB->getFirstInsertionPt();
1293 
1294   // The block may be a catchswitch block, which does not have a valid
1295   // insertion point.
1296   // FIXME: Insert dbg.value markers in the successors when appropriate.
1297   if (InsertionPt != BB->end())
1298     Builder.insertDbgValueIntrinsic(APN, DIVar, DIExpr, DII->getDebugLoc(),
1299                                     &*InsertionPt);
1300 }
1301 
1302 /// Determine whether this alloca is either a VLA or an array.
1303 static bool isArray(AllocaInst *AI) {
1304   return AI->isArrayAllocation() ||
1305     AI->getType()->getElementType()->isArrayTy();
1306 }
1307 
1308 /// LowerDbgDeclare - Lowers llvm.dbg.declare intrinsics into appropriate set
1309 /// of llvm.dbg.value intrinsics.
1310 bool llvm::LowerDbgDeclare(Function &F) {
1311   DIBuilder DIB(*F.getParent(), /*AllowUnresolved*/ false);
1312   SmallVector<DbgDeclareInst *, 4> Dbgs;
1313   for (auto &FI : F)
1314     for (Instruction &BI : FI)
1315       if (auto DDI = dyn_cast<DbgDeclareInst>(&BI))
1316         Dbgs.push_back(DDI);
1317 
1318   if (Dbgs.empty())
1319     return false;
1320 
1321   for (auto &I : Dbgs) {
1322     DbgDeclareInst *DDI = I;
1323     AllocaInst *AI = dyn_cast_or_null<AllocaInst>(DDI->getAddress());
1324     // If this is an alloca for a scalar variable, insert a dbg.value
1325     // at each load and store to the alloca and erase the dbg.declare.
1326     // The dbg.values allow tracking a variable even if it is not
1327     // stored on the stack, while the dbg.declare can only describe
1328     // the stack slot (and at a lexical-scope granularity). Later
1329     // passes will attempt to elide the stack slot.
1330     if (!AI || isArray(AI))
1331       continue;
1332 
1333     // A volatile load/store means that the alloca can't be elided anyway.
1334     if (llvm::any_of(AI->users(), [](User *U) -> bool {
1335           if (LoadInst *LI = dyn_cast<LoadInst>(U))
1336             return LI->isVolatile();
1337           if (StoreInst *SI = dyn_cast<StoreInst>(U))
1338             return SI->isVolatile();
1339           return false;
1340         }))
1341       continue;
1342 
1343     for (auto &AIUse : AI->uses()) {
1344       User *U = AIUse.getUser();
1345       if (StoreInst *SI = dyn_cast<StoreInst>(U)) {
1346         if (AIUse.getOperandNo() == 1)
1347           ConvertDebugDeclareToDebugValue(DDI, SI, DIB);
1348       } else if (LoadInst *LI = dyn_cast<LoadInst>(U)) {
1349         ConvertDebugDeclareToDebugValue(DDI, LI, DIB);
1350       } else if (CallInst *CI = dyn_cast<CallInst>(U)) {
1351         // This is a call by-value or some other instruction that
1352         // takes a pointer to the variable. Insert a *value*
1353         // intrinsic that describes the alloca.
1354         DIB.insertDbgValueIntrinsic(AI, DDI->getVariable(),
1355                                     DDI->getExpression(), DDI->getDebugLoc(),
1356                                     CI);
1357       }
1358     }
1359     DDI->eraseFromParent();
1360   }
1361   return true;
1362 }
1363 
1364 /// Propagate dbg.value intrinsics through the newly inserted PHIs.
1365 void llvm::insertDebugValuesForPHIs(BasicBlock *BB,
1366                                     SmallVectorImpl<PHINode *> &InsertedPHIs) {
1367   assert(BB && "No BasicBlock to clone dbg.value(s) from.");
1368   if (InsertedPHIs.size() == 0)
1369     return;
1370 
1371   // Map existing PHI nodes to their dbg.values.
1372   ValueToValueMapTy DbgValueMap;
1373   for (auto &I : *BB) {
1374     if (auto DbgII = dyn_cast<DbgInfoIntrinsic>(&I)) {
1375       if (auto *Loc = dyn_cast_or_null<PHINode>(DbgII->getVariableLocation()))
1376         DbgValueMap.insert({Loc, DbgII});
1377     }
1378   }
1379   if (DbgValueMap.size() == 0)
1380     return;
1381 
1382   // Then iterate through the new PHIs and look to see if they use one of the
1383   // previously mapped PHIs. If so, insert a new dbg.value intrinsic that will
1384   // propagate the info through the new PHI.
1385   LLVMContext &C = BB->getContext();
1386   for (auto PHI : InsertedPHIs) {
1387     BasicBlock *Parent = PHI->getParent();
1388     // Avoid inserting an intrinsic into an EH block.
1389     if (Parent->getFirstNonPHI()->isEHPad())
1390       continue;
1391     auto PhiMAV = MetadataAsValue::get(C, ValueAsMetadata::get(PHI));
1392     for (auto VI : PHI->operand_values()) {
1393       auto V = DbgValueMap.find(VI);
1394       if (V != DbgValueMap.end()) {
1395         auto *DbgII = cast<DbgInfoIntrinsic>(V->second);
1396         Instruction *NewDbgII = DbgII->clone();
1397         NewDbgII->setOperand(0, PhiMAV);
1398         auto InsertionPt = Parent->getFirstInsertionPt();
1399         assert(InsertionPt != Parent->end() && "Ill-formed basic block");
1400         NewDbgII->insertBefore(&*InsertionPt);
1401       }
1402     }
1403   }
1404 }
1405 
1406 /// Finds all intrinsics declaring local variables as living in the memory that
1407 /// 'V' points to. This may include a mix of dbg.declare and
1408 /// dbg.addr intrinsics.
1409 TinyPtrVector<DbgInfoIntrinsic *> llvm::FindDbgAddrUses(Value *V) {
1410   auto *L = LocalAsMetadata::getIfExists(V);
1411   if (!L)
1412     return {};
1413   auto *MDV = MetadataAsValue::getIfExists(V->getContext(), L);
1414   if (!MDV)
1415     return {};
1416 
1417   TinyPtrVector<DbgInfoIntrinsic *> Declares;
1418   for (User *U : MDV->users()) {
1419     if (auto *DII = dyn_cast<DbgInfoIntrinsic>(U))
1420       if (DII->isAddressOfVariable())
1421         Declares.push_back(DII);
1422   }
1423 
1424   return Declares;
1425 }
1426 
1427 void llvm::findDbgValues(SmallVectorImpl<DbgValueInst *> &DbgValues, Value *V) {
1428   if (auto *L = LocalAsMetadata::getIfExists(V))
1429     if (auto *MDV = MetadataAsValue::getIfExists(V->getContext(), L))
1430       for (User *U : MDV->users())
1431         if (DbgValueInst *DVI = dyn_cast<DbgValueInst>(U))
1432           DbgValues.push_back(DVI);
1433 }
1434 
1435 void llvm::findDbgUsers(SmallVectorImpl<DbgInfoIntrinsic *> &DbgUsers,
1436                         Value *V) {
1437   if (auto *L = LocalAsMetadata::getIfExists(V))
1438     if (auto *MDV = MetadataAsValue::getIfExists(V->getContext(), L))
1439       for (User *U : MDV->users())
1440         if (DbgInfoIntrinsic *DII = dyn_cast<DbgInfoIntrinsic>(U))
1441           DbgUsers.push_back(DII);
1442 }
1443 
1444 bool llvm::replaceDbgDeclare(Value *Address, Value *NewAddress,
1445                              Instruction *InsertBefore, DIBuilder &Builder,
1446                              bool DerefBefore, int Offset, bool DerefAfter) {
1447   auto DbgAddrs = FindDbgAddrUses(Address);
1448   for (DbgInfoIntrinsic *DII : DbgAddrs) {
1449     DebugLoc Loc = DII->getDebugLoc();
1450     auto *DIVar = DII->getVariable();
1451     auto *DIExpr = DII->getExpression();
1452     assert(DIVar && "Missing variable");
1453     DIExpr = DIExpression::prepend(DIExpr, DerefBefore, Offset, DerefAfter);
1454     // Insert llvm.dbg.declare immediately after InsertBefore, and remove old
1455     // llvm.dbg.declare.
1456     Builder.insertDeclare(NewAddress, DIVar, DIExpr, Loc, InsertBefore);
1457     if (DII == InsertBefore)
1458       InsertBefore = &*std::next(InsertBefore->getIterator());
1459     DII->eraseFromParent();
1460   }
1461   return !DbgAddrs.empty();
1462 }
1463 
1464 bool llvm::replaceDbgDeclareForAlloca(AllocaInst *AI, Value *NewAllocaAddress,
1465                                       DIBuilder &Builder, bool DerefBefore,
1466                                       int Offset, bool DerefAfter) {
1467   return replaceDbgDeclare(AI, NewAllocaAddress, AI->getNextNode(), Builder,
1468                            DerefBefore, Offset, DerefAfter);
1469 }
1470 
1471 static void replaceOneDbgValueForAlloca(DbgValueInst *DVI, Value *NewAddress,
1472                                         DIBuilder &Builder, int Offset) {
1473   DebugLoc Loc = DVI->getDebugLoc();
1474   auto *DIVar = DVI->getVariable();
1475   auto *DIExpr = DVI->getExpression();
1476   assert(DIVar && "Missing variable");
1477 
1478   // This is an alloca-based llvm.dbg.value. The first thing it should do with
1479   // the alloca pointer is dereference it. Otherwise we don't know how to handle
1480   // it and give up.
1481   if (!DIExpr || DIExpr->getNumElements() < 1 ||
1482       DIExpr->getElement(0) != dwarf::DW_OP_deref)
1483     return;
1484 
1485   // Insert the offset immediately after the first deref.
1486   // We could just change the offset argument of dbg.value, but it's unsigned...
1487   if (Offset) {
1488     SmallVector<uint64_t, 4> Ops;
1489     Ops.push_back(dwarf::DW_OP_deref);
1490     DIExpression::appendOffset(Ops, Offset);
1491     Ops.append(DIExpr->elements_begin() + 1, DIExpr->elements_end());
1492     DIExpr = Builder.createExpression(Ops);
1493   }
1494 
1495   Builder.insertDbgValueIntrinsic(NewAddress, DIVar, DIExpr, Loc, DVI);
1496   DVI->eraseFromParent();
1497 }
1498 
1499 void llvm::replaceDbgValueForAlloca(AllocaInst *AI, Value *NewAllocaAddress,
1500                                     DIBuilder &Builder, int Offset) {
1501   if (auto *L = LocalAsMetadata::getIfExists(AI))
1502     if (auto *MDV = MetadataAsValue::getIfExists(AI->getContext(), L))
1503       for (auto UI = MDV->use_begin(), UE = MDV->use_end(); UI != UE;) {
1504         Use &U = *UI++;
1505         if (auto *DVI = dyn_cast<DbgValueInst>(U.getUser()))
1506           replaceOneDbgValueForAlloca(DVI, NewAllocaAddress, Builder, Offset);
1507       }
1508 }
1509 
1510 void llvm::salvageDebugInfo(Instruction &I) {
1511   // This function is hot. An early check to determine whether the instruction
1512   // has any metadata to save allows it to return earlier on average.
1513   if (!I.isUsedByMetadata())
1514     return;
1515 
1516   SmallVector<DbgInfoIntrinsic *, 1> DbgUsers;
1517   findDbgUsers(DbgUsers, &I);
1518   if (DbgUsers.empty())
1519     return;
1520 
1521   auto &M = *I.getModule();
1522   auto &DL = M.getDataLayout();
1523 
1524   auto wrapMD = [&](Value *V) {
1525     return MetadataAsValue::get(I.getContext(), ValueAsMetadata::get(V));
1526   };
1527 
1528   auto doSalvage = [&](DbgInfoIntrinsic *DII, SmallVectorImpl<uint64_t> &Ops) {
1529     auto *DIExpr = DII->getExpression();
1530     DIExpr =
1531         DIExpression::prependOpcodes(DIExpr, Ops, DIExpression::WithStackValue);
1532     DII->setOperand(0, wrapMD(I.getOperand(0)));
1533     DII->setOperand(2, MetadataAsValue::get(I.getContext(), DIExpr));
1534     DEBUG(dbgs() << "SALVAGE: " << *DII << '\n');
1535   };
1536 
1537   auto applyOffset = [&](DbgInfoIntrinsic *DII, uint64_t Offset) {
1538     SmallVector<uint64_t, 8> Ops;
1539     DIExpression::appendOffset(Ops, Offset);
1540     doSalvage(DII, Ops);
1541   };
1542 
1543   auto applyOps = [&](DbgInfoIntrinsic *DII,
1544                       std::initializer_list<uint64_t> Opcodes) {
1545     SmallVector<uint64_t, 8> Ops(Opcodes);
1546     doSalvage(DII, Ops);
1547   };
1548 
1549   if (auto *CI = dyn_cast<CastInst>(&I)) {
1550     if (!CI->isNoopCast(DL))
1551       return;
1552 
1553     // No-op casts are irrelevant for debug info.
1554     MetadataAsValue *CastSrc = wrapMD(I.getOperand(0));
1555     for (auto *DII : DbgUsers) {
1556       DII->setOperand(0, CastSrc);
1557       DEBUG(dbgs() << "SALVAGE: " << *DII << '\n');
1558     }
1559   } else if (auto *GEP = dyn_cast<GetElementPtrInst>(&I)) {
1560     unsigned BitWidth =
1561         M.getDataLayout().getIndexSizeInBits(GEP->getPointerAddressSpace());
1562     // Rewrite a constant GEP into a DIExpression.  Since we are performing
1563     // arithmetic to compute the variable's *value* in the DIExpression, we
1564     // need to mark the expression with a DW_OP_stack_value.
1565     APInt Offset(BitWidth, 0);
1566     if (GEP->accumulateConstantOffset(M.getDataLayout(), Offset))
1567       for (auto *DII : DbgUsers)
1568         applyOffset(DII, Offset.getSExtValue());
1569   } else if (auto *BI = dyn_cast<BinaryOperator>(&I)) {
1570     // Rewrite binary operations with constant integer operands.
1571     auto *ConstInt = dyn_cast<ConstantInt>(I.getOperand(1));
1572     if (!ConstInt || ConstInt->getBitWidth() > 64)
1573       return;
1574 
1575     uint64_t Val = ConstInt->getSExtValue();
1576     for (auto *DII : DbgUsers) {
1577       switch (BI->getOpcode()) {
1578       case Instruction::Add:
1579         applyOffset(DII, Val);
1580         break;
1581       case Instruction::Sub:
1582         applyOffset(DII, -int64_t(Val));
1583         break;
1584       case Instruction::Mul:
1585         applyOps(DII, {dwarf::DW_OP_constu, Val, dwarf::DW_OP_mul});
1586         break;
1587       case Instruction::SDiv:
1588         applyOps(DII, {dwarf::DW_OP_constu, Val, dwarf::DW_OP_div});
1589         break;
1590       case Instruction::SRem:
1591         applyOps(DII, {dwarf::DW_OP_constu, Val, dwarf::DW_OP_mod});
1592         break;
1593       case Instruction::Or:
1594         applyOps(DII, {dwarf::DW_OP_constu, Val, dwarf::DW_OP_or});
1595         break;
1596       case Instruction::And:
1597         applyOps(DII, {dwarf::DW_OP_constu, Val, dwarf::DW_OP_and});
1598         break;
1599       case Instruction::Xor:
1600         applyOps(DII, {dwarf::DW_OP_constu, Val, dwarf::DW_OP_xor});
1601         break;
1602       case Instruction::Shl:
1603         applyOps(DII, {dwarf::DW_OP_constu, Val, dwarf::DW_OP_shl});
1604         break;
1605       case Instruction::LShr:
1606         applyOps(DII, {dwarf::DW_OP_constu, Val, dwarf::DW_OP_shr});
1607         break;
1608       case Instruction::AShr:
1609         applyOps(DII, {dwarf::DW_OP_constu, Val, dwarf::DW_OP_shra});
1610         break;
1611       default:
1612         // TODO: Salvage constants from each kind of binop we know about.
1613         continue;
1614       }
1615     }
1616   } else if (isa<LoadInst>(&I)) {
1617     MetadataAsValue *AddrMD = wrapMD(I.getOperand(0));
1618     for (auto *DII : DbgUsers) {
1619       // Rewrite the load into DW_OP_deref.
1620       auto *DIExpr = DII->getExpression();
1621       DIExpr = DIExpression::prepend(DIExpr, DIExpression::WithDeref);
1622       DII->setOperand(0, AddrMD);
1623       DII->setOperand(2, MetadataAsValue::get(I.getContext(), DIExpr));
1624       DEBUG(dbgs() << "SALVAGE:  " << *DII << '\n');
1625     }
1626   }
1627 }
1628 
1629 unsigned llvm::removeAllNonTerminatorAndEHPadInstructions(BasicBlock *BB) {
1630   unsigned NumDeadInst = 0;
1631   // Delete the instructions backwards, as it has a reduced likelihood of
1632   // having to update as many def-use and use-def chains.
1633   Instruction *EndInst = BB->getTerminator(); // Last not to be deleted.
1634   while (EndInst != &BB->front()) {
1635     // Delete the next to last instruction.
1636     Instruction *Inst = &*--EndInst->getIterator();
1637     if (!Inst->use_empty() && !Inst->getType()->isTokenTy())
1638       Inst->replaceAllUsesWith(UndefValue::get(Inst->getType()));
1639     if (Inst->isEHPad() || Inst->getType()->isTokenTy()) {
1640       EndInst = Inst;
1641       continue;
1642     }
1643     if (!isa<DbgInfoIntrinsic>(Inst))
1644       ++NumDeadInst;
1645     Inst->eraseFromParent();
1646   }
1647   return NumDeadInst;
1648 }
1649 
1650 unsigned llvm::changeToUnreachable(Instruction *I, bool UseLLVMTrap,
1651                                    bool PreserveLCSSA, DeferredDominance *DDT) {
1652   BasicBlock *BB = I->getParent();
1653   std::vector <DominatorTree::UpdateType> Updates;
1654 
1655   // Loop over all of the successors, removing BB's entry from any PHI
1656   // nodes.
1657   if (DDT)
1658     Updates.reserve(BB->getTerminator()->getNumSuccessors());
1659   for (BasicBlock *Successor : successors(BB)) {
1660     Successor->removePredecessor(BB, PreserveLCSSA);
1661     if (DDT)
1662       Updates.push_back({DominatorTree::Delete, BB, Successor});
1663   }
1664   // Insert a call to llvm.trap right before this.  This turns the undefined
1665   // behavior into a hard fail instead of falling through into random code.
1666   if (UseLLVMTrap) {
1667     Function *TrapFn =
1668       Intrinsic::getDeclaration(BB->getParent()->getParent(), Intrinsic::trap);
1669     CallInst *CallTrap = CallInst::Create(TrapFn, "", I);
1670     CallTrap->setDebugLoc(I->getDebugLoc());
1671   }
1672   new UnreachableInst(I->getContext(), I);
1673 
1674   // All instructions after this are dead.
1675   unsigned NumInstrsRemoved = 0;
1676   BasicBlock::iterator BBI = I->getIterator(), BBE = BB->end();
1677   while (BBI != BBE) {
1678     if (!BBI->use_empty())
1679       BBI->replaceAllUsesWith(UndefValue::get(BBI->getType()));
1680     BB->getInstList().erase(BBI++);
1681     ++NumInstrsRemoved;
1682   }
1683   if (DDT)
1684     DDT->applyUpdates(Updates);
1685   return NumInstrsRemoved;
1686 }
1687 
1688 /// changeToCall - Convert the specified invoke into a normal call.
1689 static void changeToCall(InvokeInst *II, DeferredDominance *DDT = nullptr) {
1690   SmallVector<Value*, 8> Args(II->arg_begin(), II->arg_end());
1691   SmallVector<OperandBundleDef, 1> OpBundles;
1692   II->getOperandBundlesAsDefs(OpBundles);
1693   CallInst *NewCall = CallInst::Create(II->getCalledValue(), Args, OpBundles,
1694                                        "", II);
1695   NewCall->takeName(II);
1696   NewCall->setCallingConv(II->getCallingConv());
1697   NewCall->setAttributes(II->getAttributes());
1698   NewCall->setDebugLoc(II->getDebugLoc());
1699   II->replaceAllUsesWith(NewCall);
1700 
1701   // Follow the call by a branch to the normal destination.
1702   BasicBlock *NormalDestBB = II->getNormalDest();
1703   BranchInst::Create(NormalDestBB, II);
1704 
1705   // Update PHI nodes in the unwind destination
1706   BasicBlock *BB = II->getParent();
1707   BasicBlock *UnwindDestBB = II->getUnwindDest();
1708   UnwindDestBB->removePredecessor(BB);
1709   II->eraseFromParent();
1710   if (DDT)
1711     DDT->deleteEdge(BB, UnwindDestBB);
1712 }
1713 
1714 BasicBlock *llvm::changeToInvokeAndSplitBasicBlock(CallInst *CI,
1715                                                    BasicBlock *UnwindEdge) {
1716   BasicBlock *BB = CI->getParent();
1717 
1718   // Convert this function call into an invoke instruction.  First, split the
1719   // basic block.
1720   BasicBlock *Split =
1721       BB->splitBasicBlock(CI->getIterator(), CI->getName() + ".noexc");
1722 
1723   // Delete the unconditional branch inserted by splitBasicBlock
1724   BB->getInstList().pop_back();
1725 
1726   // Create the new invoke instruction.
1727   SmallVector<Value *, 8> InvokeArgs(CI->arg_begin(), CI->arg_end());
1728   SmallVector<OperandBundleDef, 1> OpBundles;
1729 
1730   CI->getOperandBundlesAsDefs(OpBundles);
1731 
1732   // Note: we're round tripping operand bundles through memory here, and that
1733   // can potentially be avoided with a cleverer API design that we do not have
1734   // as of this time.
1735 
1736   InvokeInst *II = InvokeInst::Create(CI->getCalledValue(), Split, UnwindEdge,
1737                                       InvokeArgs, OpBundles, CI->getName(), BB);
1738   II->setDebugLoc(CI->getDebugLoc());
1739   II->setCallingConv(CI->getCallingConv());
1740   II->setAttributes(CI->getAttributes());
1741 
1742   // Make sure that anything using the call now uses the invoke!  This also
1743   // updates the CallGraph if present, because it uses a WeakTrackingVH.
1744   CI->replaceAllUsesWith(II);
1745 
1746   // Delete the original call
1747   Split->getInstList().pop_front();
1748   return Split;
1749 }
1750 
1751 static bool markAliveBlocks(Function &F,
1752                             SmallPtrSetImpl<BasicBlock*> &Reachable,
1753                             DeferredDominance *DDT = nullptr) {
1754   SmallVector<BasicBlock*, 128> Worklist;
1755   BasicBlock *BB = &F.front();
1756   Worklist.push_back(BB);
1757   Reachable.insert(BB);
1758   bool Changed = false;
1759   do {
1760     BB = Worklist.pop_back_val();
1761 
1762     // Do a quick scan of the basic block, turning any obviously unreachable
1763     // instructions into LLVM unreachable insts.  The instruction combining pass
1764     // canonicalizes unreachable insts into stores to null or undef.
1765     for (Instruction &I : *BB) {
1766       // Assumptions that are known to be false are equivalent to unreachable.
1767       // Also, if the condition is undefined, then we make the choice most
1768       // beneficial to the optimizer, and choose that to also be unreachable.
1769       if (auto *II = dyn_cast<IntrinsicInst>(&I)) {
1770         if (II->getIntrinsicID() == Intrinsic::assume) {
1771           if (match(II->getArgOperand(0), m_CombineOr(m_Zero(), m_Undef()))) {
1772             // Don't insert a call to llvm.trap right before the unreachable.
1773             changeToUnreachable(II, false, false, DDT);
1774             Changed = true;
1775             break;
1776           }
1777         }
1778 
1779         if (II->getIntrinsicID() == Intrinsic::experimental_guard) {
1780           // A call to the guard intrinsic bails out of the current compilation
1781           // unit if the predicate passed to it is false.  If the predicate is a
1782           // constant false, then we know the guard will bail out of the current
1783           // compile unconditionally, so all code following it is dead.
1784           //
1785           // Note: unlike in llvm.assume, it is not "obviously profitable" for
1786           // guards to treat `undef` as `false` since a guard on `undef` can
1787           // still be useful for widening.
1788           if (match(II->getArgOperand(0), m_Zero()))
1789             if (!isa<UnreachableInst>(II->getNextNode())) {
1790               changeToUnreachable(II->getNextNode(), /*UseLLVMTrap=*/false,
1791                                   false, DDT);
1792               Changed = true;
1793               break;
1794             }
1795         }
1796       }
1797 
1798       if (auto *CI = dyn_cast<CallInst>(&I)) {
1799         Value *Callee = CI->getCalledValue();
1800         if (isa<ConstantPointerNull>(Callee) || isa<UndefValue>(Callee)) {
1801           changeToUnreachable(CI, /*UseLLVMTrap=*/false, false, DDT);
1802           Changed = true;
1803           break;
1804         }
1805         if (CI->doesNotReturn()) {
1806           // If we found a call to a no-return function, insert an unreachable
1807           // instruction after it.  Make sure there isn't *already* one there
1808           // though.
1809           if (!isa<UnreachableInst>(CI->getNextNode())) {
1810             // Don't insert a call to llvm.trap right before the unreachable.
1811             changeToUnreachable(CI->getNextNode(), false, false, DDT);
1812             Changed = true;
1813           }
1814           break;
1815         }
1816       }
1817 
1818       // Store to undef and store to null are undefined and used to signal that
1819       // they should be changed to unreachable by passes that can't modify the
1820       // CFG.
1821       if (auto *SI = dyn_cast<StoreInst>(&I)) {
1822         // Don't touch volatile stores.
1823         if (SI->isVolatile()) continue;
1824 
1825         Value *Ptr = SI->getOperand(1);
1826 
1827         if (isa<UndefValue>(Ptr) ||
1828             (isa<ConstantPointerNull>(Ptr) &&
1829              SI->getPointerAddressSpace() == 0)) {
1830           changeToUnreachable(SI, true, false, DDT);
1831           Changed = true;
1832           break;
1833         }
1834       }
1835     }
1836 
1837     TerminatorInst *Terminator = BB->getTerminator();
1838     if (auto *II = dyn_cast<InvokeInst>(Terminator)) {
1839       // Turn invokes that call 'nounwind' functions into ordinary calls.
1840       Value *Callee = II->getCalledValue();
1841       if (isa<ConstantPointerNull>(Callee) || isa<UndefValue>(Callee)) {
1842         changeToUnreachable(II, true, false, DDT);
1843         Changed = true;
1844       } else if (II->doesNotThrow() && canSimplifyInvokeNoUnwind(&F)) {
1845         if (II->use_empty() && II->onlyReadsMemory()) {
1846           // jump to the normal destination branch.
1847           BasicBlock *NormalDestBB = II->getNormalDest();
1848           BasicBlock *UnwindDestBB = II->getUnwindDest();
1849           BranchInst::Create(NormalDestBB, II);
1850           UnwindDestBB->removePredecessor(II->getParent());
1851           II->eraseFromParent();
1852           if (DDT)
1853             DDT->deleteEdge(BB, UnwindDestBB);
1854         } else
1855           changeToCall(II, DDT);
1856         Changed = true;
1857       }
1858     } else if (auto *CatchSwitch = dyn_cast<CatchSwitchInst>(Terminator)) {
1859       // Remove catchpads which cannot be reached.
1860       struct CatchPadDenseMapInfo {
1861         static CatchPadInst *getEmptyKey() {
1862           return DenseMapInfo<CatchPadInst *>::getEmptyKey();
1863         }
1864 
1865         static CatchPadInst *getTombstoneKey() {
1866           return DenseMapInfo<CatchPadInst *>::getTombstoneKey();
1867         }
1868 
1869         static unsigned getHashValue(CatchPadInst *CatchPad) {
1870           return static_cast<unsigned>(hash_combine_range(
1871               CatchPad->value_op_begin(), CatchPad->value_op_end()));
1872         }
1873 
1874         static bool isEqual(CatchPadInst *LHS, CatchPadInst *RHS) {
1875           if (LHS == getEmptyKey() || LHS == getTombstoneKey() ||
1876               RHS == getEmptyKey() || RHS == getTombstoneKey())
1877             return LHS == RHS;
1878           return LHS->isIdenticalTo(RHS);
1879         }
1880       };
1881 
1882       // Set of unique CatchPads.
1883       SmallDenseMap<CatchPadInst *, detail::DenseSetEmpty, 4,
1884                     CatchPadDenseMapInfo, detail::DenseSetPair<CatchPadInst *>>
1885           HandlerSet;
1886       detail::DenseSetEmpty Empty;
1887       for (CatchSwitchInst::handler_iterator I = CatchSwitch->handler_begin(),
1888                                              E = CatchSwitch->handler_end();
1889            I != E; ++I) {
1890         BasicBlock *HandlerBB = *I;
1891         auto *CatchPad = cast<CatchPadInst>(HandlerBB->getFirstNonPHI());
1892         if (!HandlerSet.insert({CatchPad, Empty}).second) {
1893           CatchSwitch->removeHandler(I);
1894           --I;
1895           --E;
1896           Changed = true;
1897         }
1898       }
1899     }
1900 
1901     Changed |= ConstantFoldTerminator(BB, true, nullptr, DDT);
1902     for (BasicBlock *Successor : successors(BB))
1903       if (Reachable.insert(Successor).second)
1904         Worklist.push_back(Successor);
1905   } while (!Worklist.empty());
1906   return Changed;
1907 }
1908 
1909 void llvm::removeUnwindEdge(BasicBlock *BB, DeferredDominance *DDT) {
1910   TerminatorInst *TI = BB->getTerminator();
1911 
1912   if (auto *II = dyn_cast<InvokeInst>(TI)) {
1913     changeToCall(II, DDT);
1914     return;
1915   }
1916 
1917   TerminatorInst *NewTI;
1918   BasicBlock *UnwindDest;
1919 
1920   if (auto *CRI = dyn_cast<CleanupReturnInst>(TI)) {
1921     NewTI = CleanupReturnInst::Create(CRI->getCleanupPad(), nullptr, CRI);
1922     UnwindDest = CRI->getUnwindDest();
1923   } else if (auto *CatchSwitch = dyn_cast<CatchSwitchInst>(TI)) {
1924     auto *NewCatchSwitch = CatchSwitchInst::Create(
1925         CatchSwitch->getParentPad(), nullptr, CatchSwitch->getNumHandlers(),
1926         CatchSwitch->getName(), CatchSwitch);
1927     for (BasicBlock *PadBB : CatchSwitch->handlers())
1928       NewCatchSwitch->addHandler(PadBB);
1929 
1930     NewTI = NewCatchSwitch;
1931     UnwindDest = CatchSwitch->getUnwindDest();
1932   } else {
1933     llvm_unreachable("Could not find unwind successor");
1934   }
1935 
1936   NewTI->takeName(TI);
1937   NewTI->setDebugLoc(TI->getDebugLoc());
1938   UnwindDest->removePredecessor(BB);
1939   TI->replaceAllUsesWith(NewTI);
1940   TI->eraseFromParent();
1941   if (DDT)
1942     DDT->deleteEdge(BB, UnwindDest);
1943 }
1944 
1945 /// removeUnreachableBlocks - Remove blocks that are not reachable, even
1946 /// if they are in a dead cycle.  Return true if a change was made, false
1947 /// otherwise. If `LVI` is passed, this function preserves LazyValueInfo
1948 /// after modifying the CFG.
1949 bool llvm::removeUnreachableBlocks(Function &F, LazyValueInfo *LVI,
1950                                    DeferredDominance *DDT) {
1951   SmallPtrSet<BasicBlock*, 16> Reachable;
1952   bool Changed = markAliveBlocks(F, Reachable, DDT);
1953 
1954   // If there are unreachable blocks in the CFG...
1955   if (Reachable.size() == F.size())
1956     return Changed;
1957 
1958   assert(Reachable.size() < F.size());
1959   NumRemoved += F.size()-Reachable.size();
1960 
1961   // Loop over all of the basic blocks that are not reachable, dropping all of
1962   // their internal references. Update DDT and LVI if available.
1963   std::vector <DominatorTree::UpdateType> Updates;
1964   for (Function::iterator I = ++F.begin(), E = F.end(); I != E; ++I) {
1965     auto *BB = &*I;
1966     if (Reachable.count(BB))
1967       continue;
1968     for (BasicBlock *Successor : successors(BB)) {
1969       if (Reachable.count(Successor))
1970         Successor->removePredecessor(BB);
1971       if (DDT)
1972         Updates.push_back({DominatorTree::Delete, BB, Successor});
1973     }
1974     if (LVI)
1975       LVI->eraseBlock(BB);
1976     BB->dropAllReferences();
1977   }
1978 
1979   for (Function::iterator I = ++F.begin(); I != F.end();) {
1980     auto *BB = &*I;
1981     if (Reachable.count(BB)) {
1982       ++I;
1983       continue;
1984     }
1985     if (DDT) {
1986       DDT->deleteBB(BB); // deferred deletion of BB.
1987       ++I;
1988     } else {
1989       I = F.getBasicBlockList().erase(I);
1990     }
1991   }
1992 
1993   if (DDT)
1994     DDT->applyUpdates(Updates);
1995   return true;
1996 }
1997 
1998 void llvm::combineMetadata(Instruction *K, const Instruction *J,
1999                            ArrayRef<unsigned> KnownIDs) {
2000   SmallVector<std::pair<unsigned, MDNode *>, 4> Metadata;
2001   K->dropUnknownNonDebugMetadata(KnownIDs);
2002   K->getAllMetadataOtherThanDebugLoc(Metadata);
2003   for (const auto &MD : Metadata) {
2004     unsigned Kind = MD.first;
2005     MDNode *JMD = J->getMetadata(Kind);
2006     MDNode *KMD = MD.second;
2007 
2008     switch (Kind) {
2009       default:
2010         K->setMetadata(Kind, nullptr); // Remove unknown metadata
2011         break;
2012       case LLVMContext::MD_dbg:
2013         llvm_unreachable("getAllMetadataOtherThanDebugLoc returned a MD_dbg");
2014       case LLVMContext::MD_tbaa:
2015         K->setMetadata(Kind, MDNode::getMostGenericTBAA(JMD, KMD));
2016         break;
2017       case LLVMContext::MD_alias_scope:
2018         K->setMetadata(Kind, MDNode::getMostGenericAliasScope(JMD, KMD));
2019         break;
2020       case LLVMContext::MD_noalias:
2021       case LLVMContext::MD_mem_parallel_loop_access:
2022         K->setMetadata(Kind, MDNode::intersect(JMD, KMD));
2023         break;
2024       case LLVMContext::MD_range:
2025         K->setMetadata(Kind, MDNode::getMostGenericRange(JMD, KMD));
2026         break;
2027       case LLVMContext::MD_fpmath:
2028         K->setMetadata(Kind, MDNode::getMostGenericFPMath(JMD, KMD));
2029         break;
2030       case LLVMContext::MD_invariant_load:
2031         // Only set the !invariant.load if it is present in both instructions.
2032         K->setMetadata(Kind, JMD);
2033         break;
2034       case LLVMContext::MD_nonnull:
2035         // Only set the !nonnull if it is present in both instructions.
2036         K->setMetadata(Kind, JMD);
2037         break;
2038       case LLVMContext::MD_invariant_group:
2039         // Preserve !invariant.group in K.
2040         break;
2041       case LLVMContext::MD_align:
2042         K->setMetadata(Kind,
2043           MDNode::getMostGenericAlignmentOrDereferenceable(JMD, KMD));
2044         break;
2045       case LLVMContext::MD_dereferenceable:
2046       case LLVMContext::MD_dereferenceable_or_null:
2047         K->setMetadata(Kind,
2048           MDNode::getMostGenericAlignmentOrDereferenceable(JMD, KMD));
2049         break;
2050     }
2051   }
2052   // Set !invariant.group from J if J has it. If both instructions have it
2053   // then we will just pick it from J - even when they are different.
2054   // Also make sure that K is load or store - f.e. combining bitcast with load
2055   // could produce bitcast with invariant.group metadata, which is invalid.
2056   // FIXME: we should try to preserve both invariant.group md if they are
2057   // different, but right now instruction can only have one invariant.group.
2058   if (auto *JMD = J->getMetadata(LLVMContext::MD_invariant_group))
2059     if (isa<LoadInst>(K) || isa<StoreInst>(K))
2060       K->setMetadata(LLVMContext::MD_invariant_group, JMD);
2061 }
2062 
2063 void llvm::combineMetadataForCSE(Instruction *K, const Instruction *J) {
2064   unsigned KnownIDs[] = {
2065       LLVMContext::MD_tbaa,            LLVMContext::MD_alias_scope,
2066       LLVMContext::MD_noalias,         LLVMContext::MD_range,
2067       LLVMContext::MD_invariant_load,  LLVMContext::MD_nonnull,
2068       LLVMContext::MD_invariant_group, LLVMContext::MD_align,
2069       LLVMContext::MD_dereferenceable,
2070       LLVMContext::MD_dereferenceable_or_null};
2071   combineMetadata(K, J, KnownIDs);
2072 }
2073 
2074 template <typename RootType, typename DominatesFn>
2075 static unsigned replaceDominatedUsesWith(Value *From, Value *To,
2076                                          const RootType &Root,
2077                                          const DominatesFn &Dominates) {
2078   assert(From->getType() == To->getType());
2079 
2080   unsigned Count = 0;
2081   for (Value::use_iterator UI = From->use_begin(), UE = From->use_end();
2082        UI != UE;) {
2083     Use &U = *UI++;
2084     if (!Dominates(Root, U))
2085       continue;
2086     U.set(To);
2087     DEBUG(dbgs() << "Replace dominated use of '" << From->getName() << "' as "
2088                  << *To << " in " << *U << "\n");
2089     ++Count;
2090   }
2091   return Count;
2092 }
2093 
2094 unsigned llvm::replaceNonLocalUsesWith(Instruction *From, Value *To) {
2095    assert(From->getType() == To->getType());
2096    auto *BB = From->getParent();
2097    unsigned Count = 0;
2098 
2099   for (Value::use_iterator UI = From->use_begin(), UE = From->use_end();
2100        UI != UE;) {
2101     Use &U = *UI++;
2102     auto *I = cast<Instruction>(U.getUser());
2103     if (I->getParent() == BB)
2104       continue;
2105     U.set(To);
2106     ++Count;
2107   }
2108   return Count;
2109 }
2110 
2111 unsigned llvm::replaceDominatedUsesWith(Value *From, Value *To,
2112                                         DominatorTree &DT,
2113                                         const BasicBlockEdge &Root) {
2114   auto Dominates = [&DT](const BasicBlockEdge &Root, const Use &U) {
2115     return DT.dominates(Root, U);
2116   };
2117   return ::replaceDominatedUsesWith(From, To, Root, Dominates);
2118 }
2119 
2120 unsigned llvm::replaceDominatedUsesWith(Value *From, Value *To,
2121                                         DominatorTree &DT,
2122                                         const BasicBlock *BB) {
2123   auto ProperlyDominates = [&DT](const BasicBlock *BB, const Use &U) {
2124     auto *I = cast<Instruction>(U.getUser())->getParent();
2125     return DT.properlyDominates(BB, I);
2126   };
2127   return ::replaceDominatedUsesWith(From, To, BB, ProperlyDominates);
2128 }
2129 
2130 bool llvm::callsGCLeafFunction(ImmutableCallSite CS,
2131                                const TargetLibraryInfo &TLI) {
2132   // Check if the function is specifically marked as a gc leaf function.
2133   if (CS.hasFnAttr("gc-leaf-function"))
2134     return true;
2135   if (const Function *F = CS.getCalledFunction()) {
2136     if (F->hasFnAttribute("gc-leaf-function"))
2137       return true;
2138 
2139     if (auto IID = F->getIntrinsicID())
2140       // Most LLVM intrinsics do not take safepoints.
2141       return IID != Intrinsic::experimental_gc_statepoint &&
2142              IID != Intrinsic::experimental_deoptimize;
2143   }
2144 
2145   // Lib calls can be materialized by some passes, and won't be
2146   // marked as 'gc-leaf-function.' All available Libcalls are
2147   // GC-leaf.
2148   LibFunc LF;
2149   if (TLI.getLibFunc(CS, LF)) {
2150     return TLI.has(LF);
2151   }
2152 
2153   return false;
2154 }
2155 
2156 void llvm::copyNonnullMetadata(const LoadInst &OldLI, MDNode *N,
2157                                LoadInst &NewLI) {
2158   auto *NewTy = NewLI.getType();
2159 
2160   // This only directly applies if the new type is also a pointer.
2161   if (NewTy->isPointerTy()) {
2162     NewLI.setMetadata(LLVMContext::MD_nonnull, N);
2163     return;
2164   }
2165 
2166   // The only other translation we can do is to integral loads with !range
2167   // metadata.
2168   if (!NewTy->isIntegerTy())
2169     return;
2170 
2171   MDBuilder MDB(NewLI.getContext());
2172   const Value *Ptr = OldLI.getPointerOperand();
2173   auto *ITy = cast<IntegerType>(NewTy);
2174   auto *NullInt = ConstantExpr::getPtrToInt(
2175       ConstantPointerNull::get(cast<PointerType>(Ptr->getType())), ITy);
2176   auto *NonNullInt = ConstantExpr::getAdd(NullInt, ConstantInt::get(ITy, 1));
2177   NewLI.setMetadata(LLVMContext::MD_range,
2178                     MDB.createRange(NonNullInt, NullInt));
2179 }
2180 
2181 void llvm::copyRangeMetadata(const DataLayout &DL, const LoadInst &OldLI,
2182                              MDNode *N, LoadInst &NewLI) {
2183   auto *NewTy = NewLI.getType();
2184 
2185   // Give up unless it is converted to a pointer where there is a single very
2186   // valuable mapping we can do reliably.
2187   // FIXME: It would be nice to propagate this in more ways, but the type
2188   // conversions make it hard.
2189   if (!NewTy->isPointerTy())
2190     return;
2191 
2192   unsigned BitWidth = DL.getIndexTypeSizeInBits(NewTy);
2193   if (!getConstantRangeFromMetadata(*N).contains(APInt(BitWidth, 0))) {
2194     MDNode *NN = MDNode::get(OldLI.getContext(), None);
2195     NewLI.setMetadata(LLVMContext::MD_nonnull, NN);
2196   }
2197 }
2198 
2199 namespace {
2200 
2201 /// A potential constituent of a bitreverse or bswap expression. See
2202 /// collectBitParts for a fuller explanation.
2203 struct BitPart {
2204   BitPart(Value *P, unsigned BW) : Provider(P) {
2205     Provenance.resize(BW);
2206   }
2207 
2208   /// The Value that this is a bitreverse/bswap of.
2209   Value *Provider;
2210 
2211   /// The "provenance" of each bit. Provenance[A] = B means that bit A
2212   /// in Provider becomes bit B in the result of this expression.
2213   SmallVector<int8_t, 32> Provenance; // int8_t means max size is i128.
2214 
2215   enum { Unset = -1 };
2216 };
2217 
2218 } // end anonymous namespace
2219 
2220 /// Analyze the specified subexpression and see if it is capable of providing
2221 /// pieces of a bswap or bitreverse. The subexpression provides a potential
2222 /// piece of a bswap or bitreverse if it can be proven that each non-zero bit in
2223 /// the output of the expression came from a corresponding bit in some other
2224 /// value. This function is recursive, and the end result is a mapping of
2225 /// bitnumber to bitnumber. It is the caller's responsibility to validate that
2226 /// the bitnumber to bitnumber mapping is correct for a bswap or bitreverse.
2227 ///
2228 /// For example, if the current subexpression if "(shl i32 %X, 24)" then we know
2229 /// that the expression deposits the low byte of %X into the high byte of the
2230 /// result and that all other bits are zero. This expression is accepted and a
2231 /// BitPart is returned with Provider set to %X and Provenance[24-31] set to
2232 /// [0-7].
2233 ///
2234 /// To avoid revisiting values, the BitPart results are memoized into the
2235 /// provided map. To avoid unnecessary copying of BitParts, BitParts are
2236 /// constructed in-place in the \c BPS map. Because of this \c BPS needs to
2237 /// store BitParts objects, not pointers. As we need the concept of a nullptr
2238 /// BitParts (Value has been analyzed and the analysis failed), we an Optional
2239 /// type instead to provide the same functionality.
2240 ///
2241 /// Because we pass around references into \c BPS, we must use a container that
2242 /// does not invalidate internal references (std::map instead of DenseMap).
2243 static const Optional<BitPart> &
2244 collectBitParts(Value *V, bool MatchBSwaps, bool MatchBitReversals,
2245                 std::map<Value *, Optional<BitPart>> &BPS) {
2246   auto I = BPS.find(V);
2247   if (I != BPS.end())
2248     return I->second;
2249 
2250   auto &Result = BPS[V] = None;
2251   auto BitWidth = cast<IntegerType>(V->getType())->getBitWidth();
2252 
2253   if (Instruction *I = dyn_cast<Instruction>(V)) {
2254     // If this is an or instruction, it may be an inner node of the bswap.
2255     if (I->getOpcode() == Instruction::Or) {
2256       auto &A = collectBitParts(I->getOperand(0), MatchBSwaps,
2257                                 MatchBitReversals, BPS);
2258       auto &B = collectBitParts(I->getOperand(1), MatchBSwaps,
2259                                 MatchBitReversals, BPS);
2260       if (!A || !B)
2261         return Result;
2262 
2263       // Try and merge the two together.
2264       if (!A->Provider || A->Provider != B->Provider)
2265         return Result;
2266 
2267       Result = BitPart(A->Provider, BitWidth);
2268       for (unsigned i = 0; i < A->Provenance.size(); ++i) {
2269         if (A->Provenance[i] != BitPart::Unset &&
2270             B->Provenance[i] != BitPart::Unset &&
2271             A->Provenance[i] != B->Provenance[i])
2272           return Result = None;
2273 
2274         if (A->Provenance[i] == BitPart::Unset)
2275           Result->Provenance[i] = B->Provenance[i];
2276         else
2277           Result->Provenance[i] = A->Provenance[i];
2278       }
2279 
2280       return Result;
2281     }
2282 
2283     // If this is a logical shift by a constant, recurse then shift the result.
2284     if (I->isLogicalShift() && isa<ConstantInt>(I->getOperand(1))) {
2285       unsigned BitShift =
2286           cast<ConstantInt>(I->getOperand(1))->getLimitedValue(~0U);
2287       // Ensure the shift amount is defined.
2288       if (BitShift > BitWidth)
2289         return Result;
2290 
2291       auto &Res = collectBitParts(I->getOperand(0), MatchBSwaps,
2292                                   MatchBitReversals, BPS);
2293       if (!Res)
2294         return Result;
2295       Result = Res;
2296 
2297       // Perform the "shift" on BitProvenance.
2298       auto &P = Result->Provenance;
2299       if (I->getOpcode() == Instruction::Shl) {
2300         P.erase(std::prev(P.end(), BitShift), P.end());
2301         P.insert(P.begin(), BitShift, BitPart::Unset);
2302       } else {
2303         P.erase(P.begin(), std::next(P.begin(), BitShift));
2304         P.insert(P.end(), BitShift, BitPart::Unset);
2305       }
2306 
2307       return Result;
2308     }
2309 
2310     // If this is a logical 'and' with a mask that clears bits, recurse then
2311     // unset the appropriate bits.
2312     if (I->getOpcode() == Instruction::And &&
2313         isa<ConstantInt>(I->getOperand(1))) {
2314       APInt Bit(I->getType()->getPrimitiveSizeInBits(), 1);
2315       const APInt &AndMask = cast<ConstantInt>(I->getOperand(1))->getValue();
2316 
2317       // Check that the mask allows a multiple of 8 bits for a bswap, for an
2318       // early exit.
2319       unsigned NumMaskedBits = AndMask.countPopulation();
2320       if (!MatchBitReversals && NumMaskedBits % 8 != 0)
2321         return Result;
2322 
2323       auto &Res = collectBitParts(I->getOperand(0), MatchBSwaps,
2324                                   MatchBitReversals, BPS);
2325       if (!Res)
2326         return Result;
2327       Result = Res;
2328 
2329       for (unsigned i = 0; i < BitWidth; ++i, Bit <<= 1)
2330         // If the AndMask is zero for this bit, clear the bit.
2331         if ((AndMask & Bit) == 0)
2332           Result->Provenance[i] = BitPart::Unset;
2333       return Result;
2334     }
2335 
2336     // If this is a zext instruction zero extend the result.
2337     if (I->getOpcode() == Instruction::ZExt) {
2338       auto &Res = collectBitParts(I->getOperand(0), MatchBSwaps,
2339                                   MatchBitReversals, BPS);
2340       if (!Res)
2341         return Result;
2342 
2343       Result = BitPart(Res->Provider, BitWidth);
2344       auto NarrowBitWidth =
2345           cast<IntegerType>(cast<ZExtInst>(I)->getSrcTy())->getBitWidth();
2346       for (unsigned i = 0; i < NarrowBitWidth; ++i)
2347         Result->Provenance[i] = Res->Provenance[i];
2348       for (unsigned i = NarrowBitWidth; i < BitWidth; ++i)
2349         Result->Provenance[i] = BitPart::Unset;
2350       return Result;
2351     }
2352   }
2353 
2354   // Okay, we got to something that isn't a shift, 'or' or 'and'.  This must be
2355   // the input value to the bswap/bitreverse.
2356   Result = BitPart(V, BitWidth);
2357   for (unsigned i = 0; i < BitWidth; ++i)
2358     Result->Provenance[i] = i;
2359   return Result;
2360 }
2361 
2362 static bool bitTransformIsCorrectForBSwap(unsigned From, unsigned To,
2363                                           unsigned BitWidth) {
2364   if (From % 8 != To % 8)
2365     return false;
2366   // Convert from bit indices to byte indices and check for a byte reversal.
2367   From >>= 3;
2368   To >>= 3;
2369   BitWidth >>= 3;
2370   return From == BitWidth - To - 1;
2371 }
2372 
2373 static bool bitTransformIsCorrectForBitReverse(unsigned From, unsigned To,
2374                                                unsigned BitWidth) {
2375   return From == BitWidth - To - 1;
2376 }
2377 
2378 bool llvm::recognizeBSwapOrBitReverseIdiom(
2379     Instruction *I, bool MatchBSwaps, bool MatchBitReversals,
2380     SmallVectorImpl<Instruction *> &InsertedInsts) {
2381   if (Operator::getOpcode(I) != Instruction::Or)
2382     return false;
2383   if (!MatchBSwaps && !MatchBitReversals)
2384     return false;
2385   IntegerType *ITy = dyn_cast<IntegerType>(I->getType());
2386   if (!ITy || ITy->getBitWidth() > 128)
2387     return false;   // Can't do vectors or integers > 128 bits.
2388   unsigned BW = ITy->getBitWidth();
2389 
2390   unsigned DemandedBW = BW;
2391   IntegerType *DemandedTy = ITy;
2392   if (I->hasOneUse()) {
2393     if (TruncInst *Trunc = dyn_cast<TruncInst>(I->user_back())) {
2394       DemandedTy = cast<IntegerType>(Trunc->getType());
2395       DemandedBW = DemandedTy->getBitWidth();
2396     }
2397   }
2398 
2399   // Try to find all the pieces corresponding to the bswap.
2400   std::map<Value *, Optional<BitPart>> BPS;
2401   auto Res = collectBitParts(I, MatchBSwaps, MatchBitReversals, BPS);
2402   if (!Res)
2403     return false;
2404   auto &BitProvenance = Res->Provenance;
2405 
2406   // Now, is the bit permutation correct for a bswap or a bitreverse? We can
2407   // only byteswap values with an even number of bytes.
2408   bool OKForBSwap = DemandedBW % 16 == 0, OKForBitReverse = true;
2409   for (unsigned i = 0; i < DemandedBW; ++i) {
2410     OKForBSwap &=
2411         bitTransformIsCorrectForBSwap(BitProvenance[i], i, DemandedBW);
2412     OKForBitReverse &=
2413         bitTransformIsCorrectForBitReverse(BitProvenance[i], i, DemandedBW);
2414   }
2415 
2416   Intrinsic::ID Intrin;
2417   if (OKForBSwap && MatchBSwaps)
2418     Intrin = Intrinsic::bswap;
2419   else if (OKForBitReverse && MatchBitReversals)
2420     Intrin = Intrinsic::bitreverse;
2421   else
2422     return false;
2423 
2424   if (ITy != DemandedTy) {
2425     Function *F = Intrinsic::getDeclaration(I->getModule(), Intrin, DemandedTy);
2426     Value *Provider = Res->Provider;
2427     IntegerType *ProviderTy = cast<IntegerType>(Provider->getType());
2428     // We may need to truncate the provider.
2429     if (DemandedTy != ProviderTy) {
2430       auto *Trunc = CastInst::Create(Instruction::Trunc, Provider, DemandedTy,
2431                                      "trunc", I);
2432       InsertedInsts.push_back(Trunc);
2433       Provider = Trunc;
2434     }
2435     auto *CI = CallInst::Create(F, Provider, "rev", I);
2436     InsertedInsts.push_back(CI);
2437     auto *ExtInst = CastInst::Create(Instruction::ZExt, CI, ITy, "zext", I);
2438     InsertedInsts.push_back(ExtInst);
2439     return true;
2440   }
2441 
2442   Function *F = Intrinsic::getDeclaration(I->getModule(), Intrin, ITy);
2443   InsertedInsts.push_back(CallInst::Create(F, Res->Provider, "rev", I));
2444   return true;
2445 }
2446 
2447 // CodeGen has special handling for some string functions that may replace
2448 // them with target-specific intrinsics.  Since that'd skip our interceptors
2449 // in ASan/MSan/TSan/DFSan, and thus make us miss some memory accesses,
2450 // we mark affected calls as NoBuiltin, which will disable optimization
2451 // in CodeGen.
2452 void llvm::maybeMarkSanitizerLibraryCallNoBuiltin(
2453     CallInst *CI, const TargetLibraryInfo *TLI) {
2454   Function *F = CI->getCalledFunction();
2455   LibFunc Func;
2456   if (F && !F->hasLocalLinkage() && F->hasName() &&
2457       TLI->getLibFunc(F->getName(), Func) && TLI->hasOptimizedCodeGen(Func) &&
2458       !F->doesNotAccessMemory())
2459     CI->addAttribute(AttributeList::FunctionIndex, Attribute::NoBuiltin);
2460 }
2461 
2462 bool llvm::canReplaceOperandWithVariable(const Instruction *I, unsigned OpIdx) {
2463   // We can't have a PHI with a metadata type.
2464   if (I->getOperand(OpIdx)->getType()->isMetadataTy())
2465     return false;
2466 
2467   // Early exit.
2468   if (!isa<Constant>(I->getOperand(OpIdx)))
2469     return true;
2470 
2471   switch (I->getOpcode()) {
2472   default:
2473     return true;
2474   case Instruction::Call:
2475   case Instruction::Invoke:
2476     // Can't handle inline asm. Skip it.
2477     if (isa<InlineAsm>(ImmutableCallSite(I).getCalledValue()))
2478       return false;
2479     // Many arithmetic intrinsics have no issue taking a
2480     // variable, however it's hard to distingish these from
2481     // specials such as @llvm.frameaddress that require a constant.
2482     if (isa<IntrinsicInst>(I))
2483       return false;
2484 
2485     // Constant bundle operands may need to retain their constant-ness for
2486     // correctness.
2487     if (ImmutableCallSite(I).isBundleOperand(OpIdx))
2488       return false;
2489     return true;
2490   case Instruction::ShuffleVector:
2491     // Shufflevector masks are constant.
2492     return OpIdx != 2;
2493   case Instruction::Switch:
2494   case Instruction::ExtractValue:
2495     // All operands apart from the first are constant.
2496     return OpIdx == 0;
2497   case Instruction::InsertValue:
2498     // All operands apart from the first and the second are constant.
2499     return OpIdx < 2;
2500   case Instruction::Alloca:
2501     // Static allocas (constant size in the entry block) are handled by
2502     // prologue/epilogue insertion so they're free anyway. We definitely don't
2503     // want to make them non-constant.
2504     return !cast<AllocaInst>(I)->isStaticAlloca();
2505   case Instruction::GetElementPtr:
2506     if (OpIdx == 0)
2507       return true;
2508     gep_type_iterator It = gep_type_begin(I);
2509     for (auto E = std::next(It, OpIdx); It != E; ++It)
2510       if (It.isStruct())
2511         return false;
2512     return true;
2513   }
2514 }
2515