]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - contrib/llvm/lib/Transforms/Scalar/NewGVN.cpp
Merge libc++ trunk r300890, and update build glue.
[FreeBSD/FreeBSD.git] / contrib / llvm / lib / Transforms / Scalar / NewGVN.cpp
1 //===---- NewGVN.cpp - Global Value Numbering Pass --------------*- C++ -*-===//
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 /// \file
10 /// This file implements the new LLVM's Global Value Numbering pass.
11 /// GVN partitions values computed by a function into congruence classes.
12 /// Values ending up in the same congruence class are guaranteed to be the same
13 /// for every execution of the program. In that respect, congruency is a
14 /// compile-time approximation of equivalence of values at runtime.
15 /// The algorithm implemented here uses a sparse formulation and it's based
16 /// on the ideas described in the paper:
17 /// "A Sparse Algorithm for Predicated Global Value Numbering" from
18 /// Karthik Gargi.
19 ///
20 /// A brief overview of the algorithm: The algorithm is essentially the same as
21 /// the standard RPO value numbering algorithm (a good reference is the paper
22 /// "SCC based value numbering" by L. Taylor Simpson) with one major difference:
23 /// The RPO algorithm proceeds, on every iteration, to process every reachable
24 /// block and every instruction in that block.  This is because the standard RPO
25 /// algorithm does not track what things have the same value number, it only
26 /// tracks what the value number of a given operation is (the mapping is
27 /// operation -> value number).  Thus, when a value number of an operation
28 /// changes, it must reprocess everything to ensure all uses of a value number
29 /// get updated properly.  In constrast, the sparse algorithm we use *also*
30 /// tracks what operations have a given value number (IE it also tracks the
31 /// reverse mapping from value number -> operations with that value number), so
32 /// that it only needs to reprocess the instructions that are affected when
33 /// something's value number changes.  The rest of the algorithm is devoted to
34 /// performing symbolic evaluation, forward propagation, and simplification of
35 /// operations based on the value numbers deduced so far.
36 ///
37 /// We also do not perform elimination by using any published algorithm.  All
38 /// published algorithms are O(Instructions). Instead, we use a technique that
39 /// is O(number of operations with the same value number), enabling us to skip
40 /// trying to eliminate things that have unique value numbers.
41 //===----------------------------------------------------------------------===//
42
43 #include "llvm/Transforms/Scalar/NewGVN.h"
44 #include "llvm/ADT/BitVector.h"
45 #include "llvm/ADT/DenseMap.h"
46 #include "llvm/ADT/DenseSet.h"
47 #include "llvm/ADT/DepthFirstIterator.h"
48 #include "llvm/ADT/Hashing.h"
49 #include "llvm/ADT/MapVector.h"
50 #include "llvm/ADT/PostOrderIterator.h"
51 #include "llvm/ADT/STLExtras.h"
52 #include "llvm/ADT/SmallPtrSet.h"
53 #include "llvm/ADT/SmallSet.h"
54 #include "llvm/ADT/SparseBitVector.h"
55 #include "llvm/ADT/Statistic.h"
56 #include "llvm/ADT/TinyPtrVector.h"
57 #include "llvm/Analysis/AliasAnalysis.h"
58 #include "llvm/Analysis/AssumptionCache.h"
59 #include "llvm/Analysis/CFG.h"
60 #include "llvm/Analysis/CFGPrinter.h"
61 #include "llvm/Analysis/ConstantFolding.h"
62 #include "llvm/Analysis/GlobalsModRef.h"
63 #include "llvm/Analysis/InstructionSimplify.h"
64 #include "llvm/Analysis/MemoryBuiltins.h"
65 #include "llvm/Analysis/MemoryLocation.h"
66 #include "llvm/Analysis/MemorySSA.h"
67 #include "llvm/Analysis/TargetLibraryInfo.h"
68 #include "llvm/IR/DataLayout.h"
69 #include "llvm/IR/Dominators.h"
70 #include "llvm/IR/GlobalVariable.h"
71 #include "llvm/IR/IRBuilder.h"
72 #include "llvm/IR/IntrinsicInst.h"
73 #include "llvm/IR/LLVMContext.h"
74 #include "llvm/IR/Metadata.h"
75 #include "llvm/IR/PatternMatch.h"
76 #include "llvm/IR/Type.h"
77 #include "llvm/Support/Allocator.h"
78 #include "llvm/Support/CommandLine.h"
79 #include "llvm/Support/Debug.h"
80 #include "llvm/Support/DebugCounter.h"
81 #include "llvm/Transforms/Scalar.h"
82 #include "llvm/Transforms/Scalar/GVNExpression.h"
83 #include "llvm/Transforms/Utils/BasicBlockUtils.h"
84 #include "llvm/Transforms/Utils/Local.h"
85 #include "llvm/Transforms/Utils/PredicateInfo.h"
86 #include "llvm/Transforms/Utils/VNCoercion.h"
87 #include <numeric>
88 #include <unordered_map>
89 #include <utility>
90 #include <vector>
91 using namespace llvm;
92 using namespace PatternMatch;
93 using namespace llvm::GVNExpression;
94 using namespace llvm::VNCoercion;
95 #define DEBUG_TYPE "newgvn"
96
97 STATISTIC(NumGVNInstrDeleted, "Number of instructions deleted");
98 STATISTIC(NumGVNBlocksDeleted, "Number of blocks deleted");
99 STATISTIC(NumGVNOpsSimplified, "Number of Expressions simplified");
100 STATISTIC(NumGVNPhisAllSame, "Number of PHIs whos arguments are all the same");
101 STATISTIC(NumGVNMaxIterations,
102           "Maximum Number of iterations it took to converge GVN");
103 STATISTIC(NumGVNLeaderChanges, "Number of leader changes");
104 STATISTIC(NumGVNSortedLeaderChanges, "Number of sorted leader changes");
105 STATISTIC(NumGVNAvoidedSortedLeaderChanges,
106           "Number of avoided sorted leader changes");
107 STATISTIC(NumGVNNotMostDominatingLeader,
108           "Number of times a member dominated it's new classes' leader");
109 STATISTIC(NumGVNDeadStores, "Number of redundant/dead stores eliminated");
110 DEBUG_COUNTER(VNCounter, "newgvn-vn",
111               "Controls which instructions are value numbered")
112
113 // Currently store defining access refinement is too slow due to basicaa being
114 // egregiously slow.  This flag lets us keep it working while we work on this
115 // issue.
116 static cl::opt<bool> EnableStoreRefinement("enable-store-refinement",
117                                            cl::init(false), cl::Hidden);
118
119 //===----------------------------------------------------------------------===//
120 //                                GVN Pass
121 //===----------------------------------------------------------------------===//
122
123 // Anchor methods.
124 namespace llvm {
125 namespace GVNExpression {
126 Expression::~Expression() = default;
127 BasicExpression::~BasicExpression() = default;
128 CallExpression::~CallExpression() = default;
129 LoadExpression::~LoadExpression() = default;
130 StoreExpression::~StoreExpression() = default;
131 AggregateValueExpression::~AggregateValueExpression() = default;
132 PHIExpression::~PHIExpression() = default;
133 }
134 }
135
136 // Tarjan's SCC finding algorithm with Nuutila's improvements
137 // SCCIterator is actually fairly complex for the simple thing we want.
138 // It also wants to hand us SCC's that are unrelated to the phi node we ask
139 // about, and have us process them there or risk redoing work.
140 // Graph traits over a filter iterator also doesn't work that well here.
141 // This SCC finder is specialized to walk use-def chains, and only follows
142 // instructions,
143 // not generic values (arguments, etc).
144 struct TarjanSCC {
145
146   TarjanSCC() : Components(1) {}
147
148   void Start(const Instruction *Start) {
149     if (Root.lookup(Start) == 0)
150       FindSCC(Start);
151   }
152
153   const SmallPtrSetImpl<const Value *> &getComponentFor(const Value *V) const {
154     unsigned ComponentID = ValueToComponent.lookup(V);
155
156     assert(ComponentID > 0 &&
157            "Asking for a component for a value we never processed");
158     return Components[ComponentID];
159   }
160
161 private:
162   void FindSCC(const Instruction *I) {
163     Root[I] = ++DFSNum;
164     // Store the DFS Number we had before it possibly gets incremented.
165     unsigned int OurDFS = DFSNum;
166     for (auto &Op : I->operands()) {
167       if (auto *InstOp = dyn_cast<Instruction>(Op)) {
168         if (Root.lookup(Op) == 0)
169           FindSCC(InstOp);
170         if (!InComponent.count(Op))
171           Root[I] = std::min(Root.lookup(I), Root.lookup(Op));
172       }
173     }
174     // See if we really were the root of a component, by seeing if we still have
175     // our DFSNumber.
176     // If we do, we are the root of the component, and we have completed a
177     // component. If we do not,
178     // we are not the root of a component, and belong on the component stack.
179     if (Root.lookup(I) == OurDFS) {
180       unsigned ComponentID = Components.size();
181       Components.resize(Components.size() + 1);
182       auto &Component = Components.back();
183       Component.insert(I);
184       DEBUG(dbgs() << "Component root is " << *I << "\n");
185       InComponent.insert(I);
186       ValueToComponent[I] = ComponentID;
187       // Pop a component off the stack and label it.
188       while (!Stack.empty() && Root.lookup(Stack.back()) >= OurDFS) {
189         auto *Member = Stack.back();
190         DEBUG(dbgs() << "Component member is " << *Member << "\n");
191         Component.insert(Member);
192         InComponent.insert(Member);
193         ValueToComponent[Member] = ComponentID;
194         Stack.pop_back();
195       }
196     } else {
197       // Part of a component, push to stack
198       Stack.push_back(I);
199     }
200   }
201   unsigned int DFSNum = 1;
202   SmallPtrSet<const Value *, 8> InComponent;
203   DenseMap<const Value *, unsigned int> Root;
204   SmallVector<const Value *, 8> Stack;
205   // Store the components as vector of ptr sets, because we need the topo order
206   // of SCC's, but not individual member order
207   SmallVector<SmallPtrSet<const Value *, 8>, 8> Components;
208   DenseMap<const Value *, unsigned> ValueToComponent;
209 };
210 // Congruence classes represent the set of expressions/instructions
211 // that are all the same *during some scope in the function*.
212 // That is, because of the way we perform equality propagation, and
213 // because of memory value numbering, it is not correct to assume
214 // you can willy-nilly replace any member with any other at any
215 // point in the function.
216 //
217 // For any Value in the Member set, it is valid to replace any dominated member
218 // with that Value.
219 //
220 // Every congruence class has a leader, and the leader is used to symbolize
221 // instructions in a canonical way (IE every operand of an instruction that is a
222 // member of the same congruence class will always be replaced with leader
223 // during symbolization).  To simplify symbolization, we keep the leader as a
224 // constant if class can be proved to be a constant value.  Otherwise, the
225 // leader is the member of the value set with the smallest DFS number.  Each
226 // congruence class also has a defining expression, though the expression may be
227 // null.  If it exists, it can be used for forward propagation and reassociation
228 // of values.
229
230 // For memory, we also track a representative MemoryAccess, and a set of memory
231 // members for MemoryPhis (which have no real instructions). Note that for
232 // memory, it seems tempting to try to split the memory members into a
233 // MemoryCongruenceClass or something.  Unfortunately, this does not work
234 // easily.  The value numbering of a given memory expression depends on the
235 // leader of the memory congruence class, and the leader of memory congruence
236 // class depends on the value numbering of a given memory expression.  This
237 // leads to wasted propagation, and in some cases, missed optimization.  For
238 // example: If we had value numbered two stores together before, but now do not,
239 // we move them to a new value congruence class.  This in turn will move at one
240 // of the memorydefs to a new memory congruence class.  Which in turn, affects
241 // the value numbering of the stores we just value numbered (because the memory
242 // congruence class is part of the value number).  So while theoretically
243 // possible to split them up, it turns out to be *incredibly* complicated to get
244 // it to work right, because of the interdependency.  While structurally
245 // slightly messier, it is algorithmically much simpler and faster to do what we
246 // do here, and track them both at once in the same class.
247 // Note: The default iterators for this class iterate over values
248 class CongruenceClass {
249 public:
250   using MemberType = Value;
251   using MemberSet = SmallPtrSet<MemberType *, 4>;
252   using MemoryMemberType = MemoryPhi;
253   using MemoryMemberSet = SmallPtrSet<const MemoryMemberType *, 2>;
254
255   explicit CongruenceClass(unsigned ID) : ID(ID) {}
256   CongruenceClass(unsigned ID, Value *Leader, const Expression *E)
257       : ID(ID), RepLeader(Leader), DefiningExpr(E) {}
258   unsigned getID() const { return ID; }
259   // True if this class has no members left.  This is mainly used for assertion
260   // purposes, and for skipping empty classes.
261   bool isDead() const {
262     // If it's both dead from a value perspective, and dead from a memory
263     // perspective, it's really dead.
264     return empty() && memory_empty();
265   }
266   // Leader functions
267   Value *getLeader() const { return RepLeader; }
268   void setLeader(Value *Leader) { RepLeader = Leader; }
269   const std::pair<Value *, unsigned int> &getNextLeader() const {
270     return NextLeader;
271   }
272   void resetNextLeader() { NextLeader = {nullptr, ~0}; }
273
274   void addPossibleNextLeader(std::pair<Value *, unsigned int> LeaderPair) {
275     if (LeaderPair.second < NextLeader.second)
276       NextLeader = LeaderPair;
277   }
278
279   Value *getStoredValue() const { return RepStoredValue; }
280   void setStoredValue(Value *Leader) { RepStoredValue = Leader; }
281   const MemoryAccess *getMemoryLeader() const { return RepMemoryAccess; }
282   void setMemoryLeader(const MemoryAccess *Leader) { RepMemoryAccess = Leader; }
283
284   // Forward propagation info
285   const Expression *getDefiningExpr() const { return DefiningExpr; }
286   void setDefiningExpr(const Expression *E) { DefiningExpr = E; }
287
288   // Value member set
289   bool empty() const { return Members.empty(); }
290   unsigned size() const { return Members.size(); }
291   MemberSet::const_iterator begin() const { return Members.begin(); }
292   MemberSet::const_iterator end() const { return Members.end(); }
293   void insert(MemberType *M) { Members.insert(M); }
294   void erase(MemberType *M) { Members.erase(M); }
295   void swap(MemberSet &Other) { Members.swap(Other); }
296
297   // Memory member set
298   bool memory_empty() const { return MemoryMembers.empty(); }
299   unsigned memory_size() const { return MemoryMembers.size(); }
300   MemoryMemberSet::const_iterator memory_begin() const {
301     return MemoryMembers.begin();
302   }
303   MemoryMemberSet::const_iterator memory_end() const {
304     return MemoryMembers.end();
305   }
306   iterator_range<MemoryMemberSet::const_iterator> memory() const {
307     return make_range(memory_begin(), memory_end());
308   }
309   void memory_insert(const MemoryMemberType *M) { MemoryMembers.insert(M); }
310   void memory_erase(const MemoryMemberType *M) { MemoryMembers.erase(M); }
311
312   // Store count
313   unsigned getStoreCount() const { return StoreCount; }
314   void incStoreCount() { ++StoreCount; }
315   void decStoreCount() {
316     assert(StoreCount != 0 && "Store count went negative");
317     --StoreCount;
318   }
319
320   // Return true if two congruence classes are equivalent to each other.  This
321   // means
322   // that every field but the ID number and the dead field are equivalent.
323   bool isEquivalentTo(const CongruenceClass *Other) const {
324     if (!Other)
325       return false;
326     if (this == Other)
327       return true;
328
329     if (std::tie(StoreCount, RepLeader, RepStoredValue, RepMemoryAccess) !=
330         std::tie(Other->StoreCount, Other->RepLeader, Other->RepStoredValue,
331                  Other->RepMemoryAccess))
332       return false;
333     if (DefiningExpr != Other->DefiningExpr)
334       if (!DefiningExpr || !Other->DefiningExpr ||
335           *DefiningExpr != *Other->DefiningExpr)
336         return false;
337     // We need some ordered set
338     std::set<Value *> AMembers(Members.begin(), Members.end());
339     std::set<Value *> BMembers(Members.begin(), Members.end());
340     return AMembers == BMembers;
341   }
342
343 private:
344   unsigned ID;
345   // Representative leader.
346   Value *RepLeader = nullptr;
347   // The most dominating leader after our current leader, because the member set
348   // is not sorted and is expensive to keep sorted all the time.
349   std::pair<Value *, unsigned int> NextLeader = {nullptr, ~0U};
350   // If this is represented by a store, the value of the store.
351   Value *RepStoredValue = nullptr;
352   // If this class contains MemoryDefs or MemoryPhis, this is the leading memory
353   // access.
354   const MemoryAccess *RepMemoryAccess = nullptr;
355   // Defining Expression.
356   const Expression *DefiningExpr = nullptr;
357   // Actual members of this class.
358   MemberSet Members;
359   // This is the set of MemoryPhis that exist in the class. MemoryDefs and
360   // MemoryUses have real instructions representing them, so we only need to
361   // track MemoryPhis here.
362   MemoryMemberSet MemoryMembers;
363   // Number of stores in this congruence class.
364   // This is used so we can detect store equivalence changes properly.
365   int StoreCount = 0;
366 };
367
368 namespace llvm {
369 template <> struct DenseMapInfo<const Expression *> {
370   static const Expression *getEmptyKey() {
371     auto Val = static_cast<uintptr_t>(-1);
372     Val <<= PointerLikeTypeTraits<const Expression *>::NumLowBitsAvailable;
373     return reinterpret_cast<const Expression *>(Val);
374   }
375   static const Expression *getTombstoneKey() {
376     auto Val = static_cast<uintptr_t>(~1U);
377     Val <<= PointerLikeTypeTraits<const Expression *>::NumLowBitsAvailable;
378     return reinterpret_cast<const Expression *>(Val);
379   }
380   static unsigned getHashValue(const Expression *V) {
381     return static_cast<unsigned>(V->getHashValue());
382   }
383   static bool isEqual(const Expression *LHS, const Expression *RHS) {
384     if (LHS == RHS)
385       return true;
386     if (LHS == getTombstoneKey() || RHS == getTombstoneKey() ||
387         LHS == getEmptyKey() || RHS == getEmptyKey())
388       return false;
389     return *LHS == *RHS;
390   }
391 };
392 } // end namespace llvm
393
394 namespace {
395 class NewGVN {
396   Function &F;
397   DominatorTree *DT;
398   AssumptionCache *AC;
399   const TargetLibraryInfo *TLI;
400   AliasAnalysis *AA;
401   MemorySSA *MSSA;
402   MemorySSAWalker *MSSAWalker;
403   const DataLayout &DL;
404   std::unique_ptr<PredicateInfo> PredInfo;
405   BumpPtrAllocator ExpressionAllocator;
406   ArrayRecycler<Value *> ArgRecycler;
407   TarjanSCC SCCFinder;
408
409   // Number of function arguments, used by ranking
410   unsigned int NumFuncArgs;
411
412   // RPOOrdering of basic blocks
413   DenseMap<const DomTreeNode *, unsigned> RPOOrdering;
414
415   // Congruence class info.
416
417   // This class is called INITIAL in the paper. It is the class everything
418   // startsout in, and represents any value. Being an optimistic analysis,
419   // anything in the TOP class has the value TOP, which is indeterminate and
420   // equivalent to everything.
421   CongruenceClass *TOPClass;
422   std::vector<CongruenceClass *> CongruenceClasses;
423   unsigned NextCongruenceNum;
424
425   // Value Mappings.
426   DenseMap<Value *, CongruenceClass *> ValueToClass;
427   DenseMap<Value *, const Expression *> ValueToExpression;
428
429   // Mapping from predicate info we used to the instructions we used it with.
430   // In order to correctly ensure propagation, we must keep track of what
431   // comparisons we used, so that when the values of the comparisons change, we
432   // propagate the information to the places we used the comparison.
433   DenseMap<const Value *, SmallPtrSet<Instruction *, 2>> PredicateToUsers;
434   // Mapping from MemoryAccess we used to the MemoryAccess we used it with.  Has
435   // the same reasoning as PredicateToUsers.  When we skip MemoryAccesses for
436   // stores, we no longer can rely solely on the def-use chains of MemorySSA.
437   DenseMap<const MemoryAccess *, SmallPtrSet<MemoryAccess *, 2>> MemoryToUsers;
438
439   // A table storing which memorydefs/phis represent a memory state provably
440   // equivalent to another memory state.
441   // We could use the congruence class machinery, but the MemoryAccess's are
442   // abstract memory states, so they can only ever be equivalent to each other,
443   // and not to constants, etc.
444   DenseMap<const MemoryAccess *, CongruenceClass *> MemoryAccessToClass;
445
446   // We could, if we wanted, build MemoryPhiExpressions and
447   // MemoryVariableExpressions, etc, and value number them the same way we value
448   // number phi expressions.  For the moment, this seems like overkill.  They
449   // can only exist in one of three states: they can be TOP (equal to
450   // everything), Equivalent to something else, or unique.  Because we do not
451   // create expressions for them, we need to simulate leader change not just
452   // when they change class, but when they change state.  Note: We can do the
453   // same thing for phis, and avoid having phi expressions if we wanted, We
454   // should eventually unify in one direction or the other, so this is a little
455   // bit of an experiment in which turns out easier to maintain.
456   enum MemoryPhiState { MPS_Invalid, MPS_TOP, MPS_Equivalent, MPS_Unique };
457   DenseMap<const MemoryPhi *, MemoryPhiState> MemoryPhiState;
458
459   enum PhiCycleState { PCS_Unknown, PCS_CycleFree, PCS_Cycle };
460   DenseMap<const PHINode *, PhiCycleState> PhiCycleState;
461   // Expression to class mapping.
462   using ExpressionClassMap = DenseMap<const Expression *, CongruenceClass *>;
463   ExpressionClassMap ExpressionToClass;
464
465   // Which values have changed as a result of leader changes.
466   SmallPtrSet<Value *, 8> LeaderChanges;
467
468   // Reachability info.
469   using BlockEdge = BasicBlockEdge;
470   DenseSet<BlockEdge> ReachableEdges;
471   SmallPtrSet<const BasicBlock *, 8> ReachableBlocks;
472
473   // This is a bitvector because, on larger functions, we may have
474   // thousands of touched instructions at once (entire blocks,
475   // instructions with hundreds of uses, etc).  Even with optimization
476   // for when we mark whole blocks as touched, when this was a
477   // SmallPtrSet or DenseSet, for some functions, we spent >20% of all
478   // the time in GVN just managing this list.  The bitvector, on the
479   // other hand, efficiently supports test/set/clear of both
480   // individual and ranges, as well as "find next element" This
481   // enables us to use it as a worklist with essentially 0 cost.
482   BitVector TouchedInstructions;
483
484   DenseMap<const BasicBlock *, std::pair<unsigned, unsigned>> BlockInstRange;
485
486 #ifndef NDEBUG
487   // Debugging for how many times each block and instruction got processed.
488   DenseMap<const Value *, unsigned> ProcessedCount;
489 #endif
490
491   // DFS info.
492   // This contains a mapping from Instructions to DFS numbers.
493   // The numbering starts at 1. An instruction with DFS number zero
494   // means that the instruction is dead.
495   DenseMap<const Value *, unsigned> InstrDFS;
496
497   // This contains the mapping DFS numbers to instructions.
498   SmallVector<Value *, 32> DFSToInstr;
499
500   // Deletion info.
501   SmallPtrSet<Instruction *, 8> InstructionsToErase;
502
503 public:
504   NewGVN(Function &F, DominatorTree *DT, AssumptionCache *AC,
505          TargetLibraryInfo *TLI, AliasAnalysis *AA, MemorySSA *MSSA,
506          const DataLayout &DL)
507       : F(F), DT(DT), AC(AC), TLI(TLI), AA(AA), MSSA(MSSA), DL(DL),
508         PredInfo(make_unique<PredicateInfo>(F, *DT, *AC)) {}
509   bool runGVN();
510
511 private:
512   // Expression handling.
513   const Expression *createExpression(Instruction *);
514   const Expression *createBinaryExpression(unsigned, Type *, Value *, Value *);
515   PHIExpression *createPHIExpression(Instruction *, bool &HasBackedge,
516                                      bool &AllConstant);
517   const VariableExpression *createVariableExpression(Value *);
518   const ConstantExpression *createConstantExpression(Constant *);
519   const Expression *createVariableOrConstant(Value *V);
520   const UnknownExpression *createUnknownExpression(Instruction *);
521   const StoreExpression *createStoreExpression(StoreInst *,
522                                                const MemoryAccess *);
523   LoadExpression *createLoadExpression(Type *, Value *, LoadInst *,
524                                        const MemoryAccess *);
525   const CallExpression *createCallExpression(CallInst *, const MemoryAccess *);
526   const AggregateValueExpression *createAggregateValueExpression(Instruction *);
527   bool setBasicExpressionInfo(Instruction *, BasicExpression *);
528
529   // Congruence class handling.
530   CongruenceClass *createCongruenceClass(Value *Leader, const Expression *E) {
531     auto *result = new CongruenceClass(NextCongruenceNum++, Leader, E);
532     CongruenceClasses.emplace_back(result);
533     return result;
534   }
535
536   CongruenceClass *createMemoryClass(MemoryAccess *MA) {
537     auto *CC = createCongruenceClass(nullptr, nullptr);
538     CC->setMemoryLeader(MA);
539     return CC;
540   }
541   CongruenceClass *ensureLeaderOfMemoryClass(MemoryAccess *MA) {
542     auto *CC = getMemoryClass(MA);
543     if (CC->getMemoryLeader() != MA)
544       CC = createMemoryClass(MA);
545     return CC;
546   }
547
548   CongruenceClass *createSingletonCongruenceClass(Value *Member) {
549     CongruenceClass *CClass = createCongruenceClass(Member, nullptr);
550     CClass->insert(Member);
551     ValueToClass[Member] = CClass;
552     return CClass;
553   }
554   void initializeCongruenceClasses(Function &F);
555
556   // Value number an Instruction or MemoryPhi.
557   void valueNumberMemoryPhi(MemoryPhi *);
558   void valueNumberInstruction(Instruction *);
559
560   // Symbolic evaluation.
561   const Expression *checkSimplificationResults(Expression *, Instruction *,
562                                                Value *);
563   const Expression *performSymbolicEvaluation(Value *);
564   const Expression *performSymbolicLoadCoercion(Type *, Value *, LoadInst *,
565                                                 Instruction *, MemoryAccess *);
566   const Expression *performSymbolicLoadEvaluation(Instruction *);
567   const Expression *performSymbolicStoreEvaluation(Instruction *);
568   const Expression *performSymbolicCallEvaluation(Instruction *);
569   const Expression *performSymbolicPHIEvaluation(Instruction *);
570   const Expression *performSymbolicAggrValueEvaluation(Instruction *);
571   const Expression *performSymbolicCmpEvaluation(Instruction *);
572   const Expression *performSymbolicPredicateInfoEvaluation(Instruction *);
573
574   // Congruence finding.
575   bool someEquivalentDominates(const Instruction *, const Instruction *) const;
576   Value *lookupOperandLeader(Value *) const;
577   void performCongruenceFinding(Instruction *, const Expression *);
578   void moveValueToNewCongruenceClass(Instruction *, const Expression *,
579                                      CongruenceClass *, CongruenceClass *);
580   void moveMemoryToNewCongruenceClass(Instruction *, MemoryAccess *,
581                                       CongruenceClass *, CongruenceClass *);
582   Value *getNextValueLeader(CongruenceClass *) const;
583   const MemoryAccess *getNextMemoryLeader(CongruenceClass *) const;
584   bool setMemoryClass(const MemoryAccess *From, CongruenceClass *To);
585   CongruenceClass *getMemoryClass(const MemoryAccess *MA) const;
586   const MemoryAccess *lookupMemoryLeader(const MemoryAccess *) const;
587   bool isMemoryAccessTop(const MemoryAccess *) const;
588
589   // Ranking
590   unsigned int getRank(const Value *) const;
591   bool shouldSwapOperands(const Value *, const Value *) const;
592
593   // Reachability handling.
594   void updateReachableEdge(BasicBlock *, BasicBlock *);
595   void processOutgoingEdges(TerminatorInst *, BasicBlock *);
596   Value *findConditionEquivalence(Value *) const;
597
598   // Elimination.
599   struct ValueDFS;
600   void convertClassToDFSOrdered(const CongruenceClass &,
601                                 SmallVectorImpl<ValueDFS> &,
602                                 DenseMap<const Value *, unsigned int> &,
603                                 SmallPtrSetImpl<Instruction *> &) const;
604   void convertClassToLoadsAndStores(const CongruenceClass &,
605                                     SmallVectorImpl<ValueDFS> &) const;
606
607   bool eliminateInstructions(Function &);
608   void replaceInstruction(Instruction *, Value *);
609   void markInstructionForDeletion(Instruction *);
610   void deleteInstructionsInBlock(BasicBlock *);
611
612   // New instruction creation.
613   void handleNewInstruction(Instruction *){};
614
615   // Various instruction touch utilities
616   void markUsersTouched(Value *);
617   void markMemoryUsersTouched(const MemoryAccess *);
618   void markMemoryDefTouched(const MemoryAccess *);
619   void markPredicateUsersTouched(Instruction *);
620   void markValueLeaderChangeTouched(CongruenceClass *CC);
621   void markMemoryLeaderChangeTouched(CongruenceClass *CC);
622   void addPredicateUsers(const PredicateBase *, Instruction *);
623   void addMemoryUsers(const MemoryAccess *To, MemoryAccess *U);
624
625   // Main loop of value numbering
626   void iterateTouchedInstructions();
627
628   // Utilities.
629   void cleanupTables();
630   std::pair<unsigned, unsigned> assignDFSNumbers(BasicBlock *, unsigned);
631   void updateProcessedCount(Value *V);
632   void verifyMemoryCongruency() const;
633   void verifyIterationSettled(Function &F);
634   bool singleReachablePHIPath(const MemoryAccess *, const MemoryAccess *) const;
635   BasicBlock *getBlockForValue(Value *V) const;
636   void deleteExpression(const Expression *E);
637   unsigned InstrToDFSNum(const Value *V) const {
638     assert(isa<Instruction>(V) && "This should not be used for MemoryAccesses");
639     return InstrDFS.lookup(V);
640   }
641
642   unsigned InstrToDFSNum(const MemoryAccess *MA) const {
643     return MemoryToDFSNum(MA);
644   }
645   Value *InstrFromDFSNum(unsigned DFSNum) { return DFSToInstr[DFSNum]; }
646   // Given a MemoryAccess, return the relevant instruction DFS number.  Note:
647   // This deliberately takes a value so it can be used with Use's, which will
648   // auto-convert to Value's but not to MemoryAccess's.
649   unsigned MemoryToDFSNum(const Value *MA) const {
650     assert(isa<MemoryAccess>(MA) &&
651            "This should not be used with instructions");
652     return isa<MemoryUseOrDef>(MA)
653                ? InstrToDFSNum(cast<MemoryUseOrDef>(MA)->getMemoryInst())
654                : InstrDFS.lookup(MA);
655   }
656   bool isCycleFree(const PHINode *PN);
657   template <class T, class Range> T *getMinDFSOfRange(const Range &) const;
658   // Debug counter info.  When verifying, we have to reset the value numbering
659   // debug counter to the same state it started in to get the same results.
660   std::pair<int, int> StartingVNCounter;
661 };
662 } // end anonymous namespace
663
664 template <typename T>
665 static bool equalsLoadStoreHelper(const T &LHS, const Expression &RHS) {
666   if (!isa<LoadExpression>(RHS) && !isa<StoreExpression>(RHS))
667     return false;
668   return LHS.MemoryExpression::equals(RHS);
669 }
670
671 bool LoadExpression::equals(const Expression &Other) const {
672   return equalsLoadStoreHelper(*this, Other);
673 }
674
675 bool StoreExpression::equals(const Expression &Other) const {
676   if (!equalsLoadStoreHelper(*this, Other))
677     return false;
678   // Make sure that store vs store includes the value operand.
679   if (const auto *S = dyn_cast<StoreExpression>(&Other))
680     if (getStoredValue() != S->getStoredValue())
681       return false;
682   return true;
683 }
684
685 #ifndef NDEBUG
686 static std::string getBlockName(const BasicBlock *B) {
687   return DOTGraphTraits<const Function *>::getSimpleNodeLabel(B, nullptr);
688 }
689 #endif
690
691 // Get the basic block from an instruction/memory value.
692 BasicBlock *NewGVN::getBlockForValue(Value *V) const {
693   if (auto *I = dyn_cast<Instruction>(V))
694     return I->getParent();
695   else if (auto *MP = dyn_cast<MemoryPhi>(V))
696     return MP->getBlock();
697   llvm_unreachable("Should have been able to figure out a block for our value");
698   return nullptr;
699 }
700
701 // Delete a definitely dead expression, so it can be reused by the expression
702 // allocator.  Some of these are not in creation functions, so we have to accept
703 // const versions.
704 void NewGVN::deleteExpression(const Expression *E) {
705   assert(isa<BasicExpression>(E));
706   auto *BE = cast<BasicExpression>(E);
707   const_cast<BasicExpression *>(BE)->deallocateOperands(ArgRecycler);
708   ExpressionAllocator.Deallocate(E);
709 }
710
711 PHIExpression *NewGVN::createPHIExpression(Instruction *I, bool &HasBackedge,
712                                            bool &AllConstant) {
713   BasicBlock *PHIBlock = I->getParent();
714   auto *PN = cast<PHINode>(I);
715   auto *E =
716       new (ExpressionAllocator) PHIExpression(PN->getNumOperands(), PHIBlock);
717
718   E->allocateOperands(ArgRecycler, ExpressionAllocator);
719   E->setType(I->getType());
720   E->setOpcode(I->getOpcode());
721
722   unsigned PHIRPO = RPOOrdering.lookup(DT->getNode(PHIBlock));
723
724   // Filter out unreachable phi operands.
725   auto Filtered = make_filter_range(PN->operands(), [&](const Use &U) {
726     return ReachableEdges.count({PN->getIncomingBlock(U), PHIBlock});
727   });
728
729   std::transform(Filtered.begin(), Filtered.end(), op_inserter(E),
730                  [&](const Use &U) -> Value * {
731                    auto *BB = PN->getIncomingBlock(U);
732                    auto *DTN = DT->getNode(BB);
733                    if (RPOOrdering.lookup(DTN) >= PHIRPO)
734                      HasBackedge = true;
735                    AllConstant &= isa<UndefValue>(U) || isa<Constant>(U);
736
737                    // Don't try to transform self-defined phis.
738                    if (U == PN)
739                      return PN;
740                    return lookupOperandLeader(U);
741                  });
742   return E;
743 }
744
745 // Set basic expression info (Arguments, type, opcode) for Expression
746 // E from Instruction I in block B.
747 bool NewGVN::setBasicExpressionInfo(Instruction *I, BasicExpression *E) {
748   bool AllConstant = true;
749   if (auto *GEP = dyn_cast<GetElementPtrInst>(I))
750     E->setType(GEP->getSourceElementType());
751   else
752     E->setType(I->getType());
753   E->setOpcode(I->getOpcode());
754   E->allocateOperands(ArgRecycler, ExpressionAllocator);
755
756   // Transform the operand array into an operand leader array, and keep track of
757   // whether all members are constant.
758   std::transform(I->op_begin(), I->op_end(), op_inserter(E), [&](Value *O) {
759     auto Operand = lookupOperandLeader(O);
760     AllConstant &= isa<Constant>(Operand);
761     return Operand;
762   });
763
764   return AllConstant;
765 }
766
767 const Expression *NewGVN::createBinaryExpression(unsigned Opcode, Type *T,
768                                                  Value *Arg1, Value *Arg2) {
769   auto *E = new (ExpressionAllocator) BasicExpression(2);
770
771   E->setType(T);
772   E->setOpcode(Opcode);
773   E->allocateOperands(ArgRecycler, ExpressionAllocator);
774   if (Instruction::isCommutative(Opcode)) {
775     // Ensure that commutative instructions that only differ by a permutation
776     // of their operands get the same value number by sorting the operand value
777     // numbers.  Since all commutative instructions have two operands it is more
778     // efficient to sort by hand rather than using, say, std::sort.
779     if (shouldSwapOperands(Arg1, Arg2))
780       std::swap(Arg1, Arg2);
781   }
782   E->op_push_back(lookupOperandLeader(Arg1));
783   E->op_push_back(lookupOperandLeader(Arg2));
784
785   Value *V = SimplifyBinOp(Opcode, E->getOperand(0), E->getOperand(1), DL, TLI,
786                            DT, AC);
787   if (const Expression *SimplifiedE = checkSimplificationResults(E, nullptr, V))
788     return SimplifiedE;
789   return E;
790 }
791
792 // Take a Value returned by simplification of Expression E/Instruction
793 // I, and see if it resulted in a simpler expression. If so, return
794 // that expression.
795 // TODO: Once finished, this should not take an Instruction, we only
796 // use it for printing.
797 const Expression *NewGVN::checkSimplificationResults(Expression *E,
798                                                      Instruction *I, Value *V) {
799   if (!V)
800     return nullptr;
801   if (auto *C = dyn_cast<Constant>(V)) {
802     if (I)
803       DEBUG(dbgs() << "Simplified " << *I << " to "
804                    << " constant " << *C << "\n");
805     NumGVNOpsSimplified++;
806     assert(isa<BasicExpression>(E) &&
807            "We should always have had a basic expression here");
808     deleteExpression(E);
809     return createConstantExpression(C);
810   } else if (isa<Argument>(V) || isa<GlobalVariable>(V)) {
811     if (I)
812       DEBUG(dbgs() << "Simplified " << *I << " to "
813                    << " variable " << *V << "\n");
814     deleteExpression(E);
815     return createVariableExpression(V);
816   }
817
818   CongruenceClass *CC = ValueToClass.lookup(V);
819   if (CC && CC->getDefiningExpr()) {
820     if (I)
821       DEBUG(dbgs() << "Simplified " << *I << " to "
822                    << " expression " << *V << "\n");
823     NumGVNOpsSimplified++;
824     deleteExpression(E);
825     return CC->getDefiningExpr();
826   }
827   return nullptr;
828 }
829
830 const Expression *NewGVN::createExpression(Instruction *I) {
831   auto *E = new (ExpressionAllocator) BasicExpression(I->getNumOperands());
832
833   bool AllConstant = setBasicExpressionInfo(I, E);
834
835   if (I->isCommutative()) {
836     // Ensure that commutative instructions that only differ by a permutation
837     // of their operands get the same value number by sorting the operand value
838     // numbers.  Since all commutative instructions have two operands it is more
839     // efficient to sort by hand rather than using, say, std::sort.
840     assert(I->getNumOperands() == 2 && "Unsupported commutative instruction!");
841     if (shouldSwapOperands(E->getOperand(0), E->getOperand(1)))
842       E->swapOperands(0, 1);
843   }
844
845   // Perform simplificaiton
846   // TODO: Right now we only check to see if we get a constant result.
847   // We may get a less than constant, but still better, result for
848   // some operations.
849   // IE
850   //  add 0, x -> x
851   //  and x, x -> x
852   // We should handle this by simply rewriting the expression.
853   if (auto *CI = dyn_cast<CmpInst>(I)) {
854     // Sort the operand value numbers so x<y and y>x get the same value
855     // number.
856     CmpInst::Predicate Predicate = CI->getPredicate();
857     if (shouldSwapOperands(E->getOperand(0), E->getOperand(1))) {
858       E->swapOperands(0, 1);
859       Predicate = CmpInst::getSwappedPredicate(Predicate);
860     }
861     E->setOpcode((CI->getOpcode() << 8) | Predicate);
862     // TODO: 25% of our time is spent in SimplifyCmpInst with pointer operands
863     assert(I->getOperand(0)->getType() == I->getOperand(1)->getType() &&
864            "Wrong types on cmp instruction");
865     assert((E->getOperand(0)->getType() == I->getOperand(0)->getType() &&
866             E->getOperand(1)->getType() == I->getOperand(1)->getType()));
867     Value *V = SimplifyCmpInst(Predicate, E->getOperand(0), E->getOperand(1),
868                                DL, TLI, DT, AC);
869     if (const Expression *SimplifiedE = checkSimplificationResults(E, I, V))
870       return SimplifiedE;
871   } else if (isa<SelectInst>(I)) {
872     if (isa<Constant>(E->getOperand(0)) ||
873         E->getOperand(0) == E->getOperand(1)) {
874       assert(E->getOperand(1)->getType() == I->getOperand(1)->getType() &&
875              E->getOperand(2)->getType() == I->getOperand(2)->getType());
876       Value *V = SimplifySelectInst(E->getOperand(0), E->getOperand(1),
877                                     E->getOperand(2), DL, TLI, DT, AC);
878       if (const Expression *SimplifiedE = checkSimplificationResults(E, I, V))
879         return SimplifiedE;
880     }
881   } else if (I->isBinaryOp()) {
882     Value *V = SimplifyBinOp(E->getOpcode(), E->getOperand(0), E->getOperand(1),
883                              DL, TLI, DT, AC);
884     if (const Expression *SimplifiedE = checkSimplificationResults(E, I, V))
885       return SimplifiedE;
886   } else if (auto *BI = dyn_cast<BitCastInst>(I)) {
887     Value *V = SimplifyInstruction(BI, DL, TLI, DT, AC);
888     if (const Expression *SimplifiedE = checkSimplificationResults(E, I, V))
889       return SimplifiedE;
890   } else if (isa<GetElementPtrInst>(I)) {
891     Value *V = SimplifyGEPInst(E->getType(),
892                                ArrayRef<Value *>(E->op_begin(), E->op_end()),
893                                DL, TLI, DT, AC);
894     if (const Expression *SimplifiedE = checkSimplificationResults(E, I, V))
895       return SimplifiedE;
896   } else if (AllConstant) {
897     // We don't bother trying to simplify unless all of the operands
898     // were constant.
899     // TODO: There are a lot of Simplify*'s we could call here, if we
900     // wanted to.  The original motivating case for this code was a
901     // zext i1 false to i8, which we don't have an interface to
902     // simplify (IE there is no SimplifyZExt).
903
904     SmallVector<Constant *, 8> C;
905     for (Value *Arg : E->operands())
906       C.emplace_back(cast<Constant>(Arg));
907
908     if (Value *V = ConstantFoldInstOperands(I, C, DL, TLI))
909       if (const Expression *SimplifiedE = checkSimplificationResults(E, I, V))
910         return SimplifiedE;
911   }
912   return E;
913 }
914
915 const AggregateValueExpression *
916 NewGVN::createAggregateValueExpression(Instruction *I) {
917   if (auto *II = dyn_cast<InsertValueInst>(I)) {
918     auto *E = new (ExpressionAllocator)
919         AggregateValueExpression(I->getNumOperands(), II->getNumIndices());
920     setBasicExpressionInfo(I, E);
921     E->allocateIntOperands(ExpressionAllocator);
922     std::copy(II->idx_begin(), II->idx_end(), int_op_inserter(E));
923     return E;
924   } else if (auto *EI = dyn_cast<ExtractValueInst>(I)) {
925     auto *E = new (ExpressionAllocator)
926         AggregateValueExpression(I->getNumOperands(), EI->getNumIndices());
927     setBasicExpressionInfo(EI, E);
928     E->allocateIntOperands(ExpressionAllocator);
929     std::copy(EI->idx_begin(), EI->idx_end(), int_op_inserter(E));
930     return E;
931   }
932   llvm_unreachable("Unhandled type of aggregate value operation");
933 }
934
935 const VariableExpression *NewGVN::createVariableExpression(Value *V) {
936   auto *E = new (ExpressionAllocator) VariableExpression(V);
937   E->setOpcode(V->getValueID());
938   return E;
939 }
940
941 const Expression *NewGVN::createVariableOrConstant(Value *V) {
942   if (auto *C = dyn_cast<Constant>(V))
943     return createConstantExpression(C);
944   return createVariableExpression(V);
945 }
946
947 const ConstantExpression *NewGVN::createConstantExpression(Constant *C) {
948   auto *E = new (ExpressionAllocator) ConstantExpression(C);
949   E->setOpcode(C->getValueID());
950   return E;
951 }
952
953 const UnknownExpression *NewGVN::createUnknownExpression(Instruction *I) {
954   auto *E = new (ExpressionAllocator) UnknownExpression(I);
955   E->setOpcode(I->getOpcode());
956   return E;
957 }
958
959 const CallExpression *NewGVN::createCallExpression(CallInst *CI,
960                                                    const MemoryAccess *MA) {
961   // FIXME: Add operand bundles for calls.
962   auto *E =
963       new (ExpressionAllocator) CallExpression(CI->getNumOperands(), CI, MA);
964   setBasicExpressionInfo(CI, E);
965   return E;
966 }
967
968 // Return true if some equivalent of instruction Inst dominates instruction U.
969 bool NewGVN::someEquivalentDominates(const Instruction *Inst,
970                                      const Instruction *U) const {
971   auto *CC = ValueToClass.lookup(Inst);
972   // This must be an instruction because we are only called from phi nodes
973   // in the case that the value it needs to check against is an instruction.
974
975   // The most likely candiates for dominance are the leader and the next leader.
976   // The leader or nextleader will dominate in all cases where there is an
977   // equivalent that is higher up in the dom tree.
978   // We can't *only* check them, however, because the
979   // dominator tree could have an infinite number of non-dominating siblings
980   // with instructions that are in the right congruence class.
981   //       A
982   // B C D E F G
983   // |
984   // H
985   // Instruction U could be in H,  with equivalents in every other sibling.
986   // Depending on the rpo order picked, the leader could be the equivalent in
987   // any of these siblings.
988   if (!CC)
989     return false;
990   if (DT->dominates(cast<Instruction>(CC->getLeader()), U))
991     return true;
992   if (CC->getNextLeader().first &&
993       DT->dominates(cast<Instruction>(CC->getNextLeader().first), U))
994     return true;
995   return llvm::any_of(*CC, [&](const Value *Member) {
996     return Member != CC->getLeader() &&
997            DT->dominates(cast<Instruction>(Member), U);
998   });
999 }
1000
1001 // See if we have a congruence class and leader for this operand, and if so,
1002 // return it. Otherwise, return the operand itself.
1003 Value *NewGVN::lookupOperandLeader(Value *V) const {
1004   CongruenceClass *CC = ValueToClass.lookup(V);
1005   if (CC) {
1006     // Everything in TOP is represneted by undef, as it can be any value.
1007     // We do have to make sure we get the type right though, so we can't set the
1008     // RepLeader to undef.
1009     if (CC == TOPClass)
1010       return UndefValue::get(V->getType());
1011     return CC->getStoredValue() ? CC->getStoredValue() : CC->getLeader();
1012   }
1013
1014   return V;
1015 }
1016
1017 const MemoryAccess *NewGVN::lookupMemoryLeader(const MemoryAccess *MA) const {
1018   auto *CC = getMemoryClass(MA);
1019   assert(CC->getMemoryLeader() &&
1020          "Every MemoryAccess should be mapped to a "
1021          "congruence class with a represenative memory "
1022          "access");
1023   return CC->getMemoryLeader();
1024 }
1025
1026 // Return true if the MemoryAccess is really equivalent to everything. This is
1027 // equivalent to the lattice value "TOP" in most lattices.  This is the initial
1028 // state of all MemoryAccesses.
1029 bool NewGVN::isMemoryAccessTop(const MemoryAccess *MA) const {
1030   return getMemoryClass(MA) == TOPClass;
1031 }
1032
1033 LoadExpression *NewGVN::createLoadExpression(Type *LoadType, Value *PointerOp,
1034                                              LoadInst *LI,
1035                                              const MemoryAccess *MA) {
1036   auto *E =
1037       new (ExpressionAllocator) LoadExpression(1, LI, lookupMemoryLeader(MA));
1038   E->allocateOperands(ArgRecycler, ExpressionAllocator);
1039   E->setType(LoadType);
1040
1041   // Give store and loads same opcode so they value number together.
1042   E->setOpcode(0);
1043   E->op_push_back(PointerOp);
1044   if (LI)
1045     E->setAlignment(LI->getAlignment());
1046
1047   // TODO: Value number heap versions. We may be able to discover
1048   // things alias analysis can't on it's own (IE that a store and a
1049   // load have the same value, and thus, it isn't clobbering the load).
1050   return E;
1051 }
1052
1053 const StoreExpression *NewGVN::createStoreExpression(StoreInst *SI,
1054                                                      const MemoryAccess *MA) {
1055   auto *StoredValueLeader = lookupOperandLeader(SI->getValueOperand());
1056   auto *E = new (ExpressionAllocator)
1057       StoreExpression(SI->getNumOperands(), SI, StoredValueLeader, MA);
1058   E->allocateOperands(ArgRecycler, ExpressionAllocator);
1059   E->setType(SI->getValueOperand()->getType());
1060
1061   // Give store and loads same opcode so they value number together.
1062   E->setOpcode(0);
1063   E->op_push_back(lookupOperandLeader(SI->getPointerOperand()));
1064
1065   // TODO: Value number heap versions. We may be able to discover
1066   // things alias analysis can't on it's own (IE that a store and a
1067   // load have the same value, and thus, it isn't clobbering the load).
1068   return E;
1069 }
1070
1071 const Expression *NewGVN::performSymbolicStoreEvaluation(Instruction *I) {
1072   // Unlike loads, we never try to eliminate stores, so we do not check if they
1073   // are simple and avoid value numbering them.
1074   auto *SI = cast<StoreInst>(I);
1075   auto *StoreAccess = MSSA->getMemoryAccess(SI);
1076   // Get the expression, if any, for the RHS of the MemoryDef.
1077   const MemoryAccess *StoreRHS = StoreAccess->getDefiningAccess();
1078   if (EnableStoreRefinement)
1079     StoreRHS = MSSAWalker->getClobberingMemoryAccess(StoreAccess);
1080   // If we bypassed the use-def chains, make sure we add a use.
1081   if (StoreRHS != StoreAccess->getDefiningAccess())
1082     addMemoryUsers(StoreRHS, StoreAccess);
1083
1084   StoreRHS = lookupMemoryLeader(StoreRHS);
1085   // If we are defined by ourselves, use the live on entry def.
1086   if (StoreRHS == StoreAccess)
1087     StoreRHS = MSSA->getLiveOnEntryDef();
1088
1089   if (SI->isSimple()) {
1090     // See if we are defined by a previous store expression, it already has a
1091     // value, and it's the same value as our current store. FIXME: Right now, we
1092     // only do this for simple stores, we should expand to cover memcpys, etc.
1093     const auto *LastStore = createStoreExpression(SI, StoreRHS);
1094     const auto *LastCC = ExpressionToClass.lookup(LastStore);
1095     // Basically, check if the congruence class the store is in is defined by a
1096     // store that isn't us, and has the same value.  MemorySSA takes care of
1097     // ensuring the store has the same memory state as us already.
1098     // The RepStoredValue gets nulled if all the stores disappear in a class, so
1099     // we don't need to check if the class contains a store besides us.
1100     if (LastCC &&
1101         LastCC->getStoredValue() == lookupOperandLeader(SI->getValueOperand()))
1102       return LastStore;
1103     deleteExpression(LastStore);
1104     // Also check if our value operand is defined by a load of the same memory
1105     // location, and the memory state is the same as it was then (otherwise, it
1106     // could have been overwritten later. See test32 in
1107     // transforms/DeadStoreElimination/simple.ll).
1108     if (auto *LI =
1109             dyn_cast<LoadInst>(lookupOperandLeader(SI->getValueOperand()))) {
1110       if ((lookupOperandLeader(LI->getPointerOperand()) ==
1111            lookupOperandLeader(SI->getPointerOperand())) &&
1112           (lookupMemoryLeader(MSSA->getMemoryAccess(LI)->getDefiningAccess()) ==
1113            StoreRHS))
1114         return createVariableExpression(LI);
1115     }
1116   }
1117
1118   // If the store is not equivalent to anything, value number it as a store that
1119   // produces a unique memory state (instead of using it's MemoryUse, we use
1120   // it's MemoryDef).
1121   return createStoreExpression(SI, StoreAccess);
1122 }
1123
1124 // See if we can extract the value of a loaded pointer from a load, a store, or
1125 // a memory instruction.
1126 const Expression *
1127 NewGVN::performSymbolicLoadCoercion(Type *LoadType, Value *LoadPtr,
1128                                     LoadInst *LI, Instruction *DepInst,
1129                                     MemoryAccess *DefiningAccess) {
1130   assert((!LI || LI->isSimple()) && "Not a simple load");
1131   if (auto *DepSI = dyn_cast<StoreInst>(DepInst)) {
1132     // Can't forward from non-atomic to atomic without violating memory model.
1133     // Also don't need to coerce if they are the same type, we will just
1134     // propogate..
1135     if (LI->isAtomic() > DepSI->isAtomic() ||
1136         LoadType == DepSI->getValueOperand()->getType())
1137       return nullptr;
1138     int Offset = analyzeLoadFromClobberingStore(LoadType, LoadPtr, DepSI, DL);
1139     if (Offset >= 0) {
1140       if (auto *C = dyn_cast<Constant>(
1141               lookupOperandLeader(DepSI->getValueOperand()))) {
1142         DEBUG(dbgs() << "Coercing load from store " << *DepSI << " to constant "
1143                      << *C << "\n");
1144         return createConstantExpression(
1145             getConstantStoreValueForLoad(C, Offset, LoadType, DL));
1146       }
1147     }
1148
1149   } else if (LoadInst *DepLI = dyn_cast<LoadInst>(DepInst)) {
1150     // Can't forward from non-atomic to atomic without violating memory model.
1151     if (LI->isAtomic() > DepLI->isAtomic())
1152       return nullptr;
1153     int Offset = analyzeLoadFromClobberingLoad(LoadType, LoadPtr, DepLI, DL);
1154     if (Offset >= 0) {
1155       // We can coerce a constant load into a load
1156       if (auto *C = dyn_cast<Constant>(lookupOperandLeader(DepLI)))
1157         if (auto *PossibleConstant =
1158                 getConstantLoadValueForLoad(C, Offset, LoadType, DL)) {
1159           DEBUG(dbgs() << "Coercing load from load " << *LI << " to constant "
1160                        << *PossibleConstant << "\n");
1161           return createConstantExpression(PossibleConstant);
1162         }
1163     }
1164
1165   } else if (MemIntrinsic *DepMI = dyn_cast<MemIntrinsic>(DepInst)) {
1166     int Offset = analyzeLoadFromClobberingMemInst(LoadType, LoadPtr, DepMI, DL);
1167     if (Offset >= 0) {
1168       if (auto *PossibleConstant =
1169               getConstantMemInstValueForLoad(DepMI, Offset, LoadType, DL)) {
1170         DEBUG(dbgs() << "Coercing load from meminst " << *DepMI
1171                      << " to constant " << *PossibleConstant << "\n");
1172         return createConstantExpression(PossibleConstant);
1173       }
1174     }
1175   }
1176
1177   // All of the below are only true if the loaded pointer is produced
1178   // by the dependent instruction.
1179   if (LoadPtr != lookupOperandLeader(DepInst) &&
1180       !AA->isMustAlias(LoadPtr, DepInst))
1181     return nullptr;
1182   // If this load really doesn't depend on anything, then we must be loading an
1183   // undef value.  This can happen when loading for a fresh allocation with no
1184   // intervening stores, for example.  Note that this is only true in the case
1185   // that the result of the allocation is pointer equal to the load ptr.
1186   if (isa<AllocaInst>(DepInst) || isMallocLikeFn(DepInst, TLI)) {
1187     return createConstantExpression(UndefValue::get(LoadType));
1188   }
1189   // If this load occurs either right after a lifetime begin,
1190   // then the loaded value is undefined.
1191   else if (auto *II = dyn_cast<IntrinsicInst>(DepInst)) {
1192     if (II->getIntrinsicID() == Intrinsic::lifetime_start)
1193       return createConstantExpression(UndefValue::get(LoadType));
1194   }
1195   // If this load follows a calloc (which zero initializes memory),
1196   // then the loaded value is zero
1197   else if (isCallocLikeFn(DepInst, TLI)) {
1198     return createConstantExpression(Constant::getNullValue(LoadType));
1199   }
1200
1201   return nullptr;
1202 }
1203
1204 const Expression *NewGVN::performSymbolicLoadEvaluation(Instruction *I) {
1205   auto *LI = cast<LoadInst>(I);
1206
1207   // We can eliminate in favor of non-simple loads, but we won't be able to
1208   // eliminate the loads themselves.
1209   if (!LI->isSimple())
1210     return nullptr;
1211
1212   Value *LoadAddressLeader = lookupOperandLeader(LI->getPointerOperand());
1213   // Load of undef is undef.
1214   if (isa<UndefValue>(LoadAddressLeader))
1215     return createConstantExpression(UndefValue::get(LI->getType()));
1216
1217   MemoryAccess *DefiningAccess = MSSAWalker->getClobberingMemoryAccess(I);
1218
1219   if (!MSSA->isLiveOnEntryDef(DefiningAccess)) {
1220     if (auto *MD = dyn_cast<MemoryDef>(DefiningAccess)) {
1221       Instruction *DefiningInst = MD->getMemoryInst();
1222       // If the defining instruction is not reachable, replace with undef.
1223       if (!ReachableBlocks.count(DefiningInst->getParent()))
1224         return createConstantExpression(UndefValue::get(LI->getType()));
1225       // This will handle stores and memory insts.  We only do if it the
1226       // defining access has a different type, or it is a pointer produced by
1227       // certain memory operations that cause the memory to have a fixed value
1228       // (IE things like calloc).
1229       if (const auto *CoercionResult =
1230               performSymbolicLoadCoercion(LI->getType(), LoadAddressLeader, LI,
1231                                           DefiningInst, DefiningAccess))
1232         return CoercionResult;
1233     }
1234   }
1235
1236   const Expression *E = createLoadExpression(LI->getType(), LoadAddressLeader,
1237                                              LI, DefiningAccess);
1238   return E;
1239 }
1240
1241 const Expression *
1242 NewGVN::performSymbolicPredicateInfoEvaluation(Instruction *I) {
1243   auto *PI = PredInfo->getPredicateInfoFor(I);
1244   if (!PI)
1245     return nullptr;
1246
1247   DEBUG(dbgs() << "Found predicate info from instruction !\n");
1248
1249   auto *PWC = dyn_cast<PredicateWithCondition>(PI);
1250   if (!PWC)
1251     return nullptr;
1252
1253   auto *CopyOf = I->getOperand(0);
1254   auto *Cond = PWC->Condition;
1255
1256   // If this a copy of the condition, it must be either true or false depending
1257   // on the predicate info type and edge
1258   if (CopyOf == Cond) {
1259     // We should not need to add predicate users because the predicate info is
1260     // already a use of this operand.
1261     if (isa<PredicateAssume>(PI))
1262       return createConstantExpression(ConstantInt::getTrue(Cond->getType()));
1263     if (auto *PBranch = dyn_cast<PredicateBranch>(PI)) {
1264       if (PBranch->TrueEdge)
1265         return createConstantExpression(ConstantInt::getTrue(Cond->getType()));
1266       return createConstantExpression(ConstantInt::getFalse(Cond->getType()));
1267     }
1268     if (auto *PSwitch = dyn_cast<PredicateSwitch>(PI))
1269       return createConstantExpression(cast<Constant>(PSwitch->CaseValue));
1270   }
1271
1272   // Not a copy of the condition, so see what the predicates tell us about this
1273   // value.  First, though, we check to make sure the value is actually a copy
1274   // of one of the condition operands. It's possible, in certain cases, for it
1275   // to be a copy of a predicateinfo copy. In particular, if two branch
1276   // operations use the same condition, and one branch dominates the other, we
1277   // will end up with a copy of a copy.  This is currently a small deficiency in
1278   // predicateinfo.  What will end up happening here is that we will value
1279   // number both copies the same anyway.
1280
1281   // Everything below relies on the condition being a comparison.
1282   auto *Cmp = dyn_cast<CmpInst>(Cond);
1283   if (!Cmp)
1284     return nullptr;
1285
1286   if (CopyOf != Cmp->getOperand(0) && CopyOf != Cmp->getOperand(1)) {
1287     DEBUG(dbgs() << "Copy is not of any condition operands!");
1288     return nullptr;
1289   }
1290   Value *FirstOp = lookupOperandLeader(Cmp->getOperand(0));
1291   Value *SecondOp = lookupOperandLeader(Cmp->getOperand(1));
1292   bool SwappedOps = false;
1293   // Sort the ops
1294   if (shouldSwapOperands(FirstOp, SecondOp)) {
1295     std::swap(FirstOp, SecondOp);
1296     SwappedOps = true;
1297   }
1298   CmpInst::Predicate Predicate =
1299       SwappedOps ? Cmp->getSwappedPredicate() : Cmp->getPredicate();
1300
1301   if (isa<PredicateAssume>(PI)) {
1302     // If the comparison is true when the operands are equal, then we know the
1303     // operands are equal, because assumes must always be true.
1304     if (CmpInst::isTrueWhenEqual(Predicate)) {
1305       addPredicateUsers(PI, I);
1306       return createVariableOrConstant(FirstOp);
1307     }
1308   }
1309   if (const auto *PBranch = dyn_cast<PredicateBranch>(PI)) {
1310     // If we are *not* a copy of the comparison, we may equal to the other
1311     // operand when the predicate implies something about equality of
1312     // operations.  In particular, if the comparison is true/false when the
1313     // operands are equal, and we are on the right edge, we know this operation
1314     // is equal to something.
1315     if ((PBranch->TrueEdge && Predicate == CmpInst::ICMP_EQ) ||
1316         (!PBranch->TrueEdge && Predicate == CmpInst::ICMP_NE)) {
1317       addPredicateUsers(PI, I);
1318       return createVariableOrConstant(FirstOp);
1319     }
1320     // Handle the special case of floating point.
1321     if (((PBranch->TrueEdge && Predicate == CmpInst::FCMP_OEQ) ||
1322          (!PBranch->TrueEdge && Predicate == CmpInst::FCMP_UNE)) &&
1323         isa<ConstantFP>(FirstOp) && !cast<ConstantFP>(FirstOp)->isZero()) {
1324       addPredicateUsers(PI, I);
1325       return createConstantExpression(cast<Constant>(FirstOp));
1326     }
1327   }
1328   return nullptr;
1329 }
1330
1331 // Evaluate read only and pure calls, and create an expression result.
1332 const Expression *NewGVN::performSymbolicCallEvaluation(Instruction *I) {
1333   auto *CI = cast<CallInst>(I);
1334   if (auto *II = dyn_cast<IntrinsicInst>(I)) {
1335     // Instrinsics with the returned attribute are copies of arguments.
1336     if (auto *ReturnedValue = II->getReturnedArgOperand()) {
1337       if (II->getIntrinsicID() == Intrinsic::ssa_copy)
1338         if (const auto *Result = performSymbolicPredicateInfoEvaluation(I))
1339           return Result;
1340       return createVariableOrConstant(ReturnedValue);
1341     }
1342   }
1343   if (AA->doesNotAccessMemory(CI)) {
1344     return createCallExpression(CI, TOPClass->getMemoryLeader());
1345   } else if (AA->onlyReadsMemory(CI)) {
1346     MemoryAccess *DefiningAccess = MSSAWalker->getClobberingMemoryAccess(CI);
1347     return createCallExpression(CI, DefiningAccess);
1348   }
1349   return nullptr;
1350 }
1351
1352 // Retrieve the memory class for a given MemoryAccess.
1353 CongruenceClass *NewGVN::getMemoryClass(const MemoryAccess *MA) const {
1354
1355   auto *Result = MemoryAccessToClass.lookup(MA);
1356   assert(Result && "Should have found memory class");
1357   return Result;
1358 }
1359
1360 // Update the MemoryAccess equivalence table to say that From is equal to To,
1361 // and return true if this is different from what already existed in the table.
1362 bool NewGVN::setMemoryClass(const MemoryAccess *From,
1363                             CongruenceClass *NewClass) {
1364   assert(NewClass &&
1365          "Every MemoryAccess should be getting mapped to a non-null class");
1366   DEBUG(dbgs() << "Setting " << *From);
1367   DEBUG(dbgs() << " equivalent to congruence class ");
1368   DEBUG(dbgs() << NewClass->getID() << " with current MemoryAccess leader ");
1369   DEBUG(dbgs() << *NewClass->getMemoryLeader());
1370   DEBUG(dbgs() << "\n");
1371
1372   auto LookupResult = MemoryAccessToClass.find(From);
1373   bool Changed = false;
1374   // If it's already in the table, see if the value changed.
1375   if (LookupResult != MemoryAccessToClass.end()) {
1376     auto *OldClass = LookupResult->second;
1377     if (OldClass != NewClass) {
1378       // If this is a phi, we have to handle memory member updates.
1379       if (auto *MP = dyn_cast<MemoryPhi>(From)) {
1380         OldClass->memory_erase(MP);
1381         NewClass->memory_insert(MP);
1382         // This may have killed the class if it had no non-memory members
1383         if (OldClass->getMemoryLeader() == From) {
1384           if (OldClass->memory_empty()) {
1385             OldClass->setMemoryLeader(nullptr);
1386           } else {
1387             OldClass->setMemoryLeader(getNextMemoryLeader(OldClass));
1388             DEBUG(dbgs() << "Memory class leader change for class "
1389                          << OldClass->getID() << " to "
1390                          << *OldClass->getMemoryLeader()
1391                          << " due to removal of a memory member " << *From
1392                          << "\n");
1393             markMemoryLeaderChangeTouched(OldClass);
1394           }
1395         }
1396       }
1397       // It wasn't equivalent before, and now it is.
1398       LookupResult->second = NewClass;
1399       Changed = true;
1400     }
1401   }
1402
1403   return Changed;
1404 }
1405
1406 // Determine if a phi is cycle-free.  That means the values in the phi don't
1407 // depend on any expressions that can change value as a result of the phi.
1408 // For example, a non-cycle free phi would be  v = phi(0, v+1).
1409 bool NewGVN::isCycleFree(const PHINode *PN) {
1410   // In order to compute cycle-freeness, we do SCC finding on the phi, and see
1411   // what kind of SCC it ends up in.  If it is a singleton, it is cycle-free.
1412   // If it is not in a singleton, it is only cycle free if the other members are
1413   // all phi nodes (as they do not compute anything, they are copies).  TODO:
1414   // There are likely a few other intrinsics or expressions that could be
1415   // included here, but this happens so infrequently already that it is not
1416   // likely to be worth it.
1417   auto PCS = PhiCycleState.lookup(PN);
1418   if (PCS == PCS_Unknown) {
1419     SCCFinder.Start(PN);
1420     auto &SCC = SCCFinder.getComponentFor(PN);
1421     // It's cycle free if it's size 1 or or the SCC is *only* phi nodes.
1422     if (SCC.size() == 1)
1423       PhiCycleState.insert({PN, PCS_CycleFree});
1424     else {
1425       bool AllPhis =
1426           llvm::all_of(SCC, [](const Value *V) { return isa<PHINode>(V); });
1427       PCS = AllPhis ? PCS_CycleFree : PCS_Cycle;
1428       for (auto *Member : SCC)
1429         if (auto *MemberPhi = dyn_cast<PHINode>(Member))
1430           PhiCycleState.insert({MemberPhi, PCS});
1431     }
1432   }
1433   if (PCS == PCS_Cycle)
1434     return false;
1435   return true;
1436 }
1437
1438 // Evaluate PHI nodes symbolically, and create an expression result.
1439 const Expression *NewGVN::performSymbolicPHIEvaluation(Instruction *I) {
1440   // True if one of the incoming phi edges is a backedge.
1441   bool HasBackedge = false;
1442   // All constant tracks the state of whether all the *original* phi operands
1443   // were constant.
1444   // This is really shorthand for "this phi cannot cycle due to forward
1445   // propagation", as any
1446   // change in value of the phi is guaranteed not to later change the value of
1447   // the phi.
1448   // IE it can't be v = phi(undef, v+1)
1449   bool AllConstant = true;
1450   auto *E =
1451       cast<PHIExpression>(createPHIExpression(I, HasBackedge, AllConstant));
1452   // We match the semantics of SimplifyPhiNode from InstructionSimplify here.
1453
1454   // See if all arguaments are the same.
1455   // We track if any were undef because they need special handling.
1456   bool HasUndef = false;
1457   auto Filtered = make_filter_range(E->operands(), [&](const Value *Arg) {
1458     if (Arg == I)
1459       return false;
1460     if (isa<UndefValue>(Arg)) {
1461       HasUndef = true;
1462       return false;
1463     }
1464     return true;
1465   });
1466   // If we are left with no operands, it's undef
1467   if (Filtered.begin() == Filtered.end()) {
1468     DEBUG(dbgs() << "Simplified PHI node " << *I << " to undef"
1469                  << "\n");
1470     deleteExpression(E);
1471     return createConstantExpression(UndefValue::get(I->getType()));
1472   }
1473   unsigned NumOps = 0;
1474   Value *AllSameValue = *(Filtered.begin());
1475   ++Filtered.begin();
1476   // Can't use std::equal here, sadly, because filter.begin moves.
1477   if (llvm::all_of(Filtered, [AllSameValue, &NumOps](const Value *V) {
1478         ++NumOps;
1479         return V == AllSameValue;
1480       })) {
1481     // In LLVM's non-standard representation of phi nodes, it's possible to have
1482     // phi nodes with cycles (IE dependent on other phis that are .... dependent
1483     // on the original phi node), especially in weird CFG's where some arguments
1484     // are unreachable, or uninitialized along certain paths.  This can cause
1485     // infinite loops during evaluation. We work around this by not trying to
1486     // really evaluate them independently, but instead using a variable
1487     // expression to say if one is equivalent to the other.
1488     // We also special case undef, so that if we have an undef, we can't use the
1489     // common value unless it dominates the phi block.
1490     if (HasUndef) {
1491       // If we have undef and at least one other value, this is really a
1492       // multivalued phi, and we need to know if it's cycle free in order to
1493       // evaluate whether we can ignore the undef.  The other parts of this are
1494       // just shortcuts.  If there is no backedge, or all operands are
1495       // constants, or all operands are ignored but the undef, it also must be
1496       // cycle free.
1497       if (!AllConstant && HasBackedge && NumOps > 0 &&
1498           !isa<UndefValue>(AllSameValue) && !isCycleFree(cast<PHINode>(I)))
1499         return E;
1500
1501       // Only have to check for instructions
1502       if (auto *AllSameInst = dyn_cast<Instruction>(AllSameValue))
1503         if (!someEquivalentDominates(AllSameInst, I))
1504           return E;
1505     }
1506
1507     NumGVNPhisAllSame++;
1508     DEBUG(dbgs() << "Simplified PHI node " << *I << " to " << *AllSameValue
1509                  << "\n");
1510     deleteExpression(E);
1511     return createVariableOrConstant(AllSameValue);
1512   }
1513   return E;
1514 }
1515
1516 const Expression *NewGVN::performSymbolicAggrValueEvaluation(Instruction *I) {
1517   if (auto *EI = dyn_cast<ExtractValueInst>(I)) {
1518     auto *II = dyn_cast<IntrinsicInst>(EI->getAggregateOperand());
1519     if (II && EI->getNumIndices() == 1 && *EI->idx_begin() == 0) {
1520       unsigned Opcode = 0;
1521       // EI might be an extract from one of our recognised intrinsics. If it
1522       // is we'll synthesize a semantically equivalent expression instead on
1523       // an extract value expression.
1524       switch (II->getIntrinsicID()) {
1525       case Intrinsic::sadd_with_overflow:
1526       case Intrinsic::uadd_with_overflow:
1527         Opcode = Instruction::Add;
1528         break;
1529       case Intrinsic::ssub_with_overflow:
1530       case Intrinsic::usub_with_overflow:
1531         Opcode = Instruction::Sub;
1532         break;
1533       case Intrinsic::smul_with_overflow:
1534       case Intrinsic::umul_with_overflow:
1535         Opcode = Instruction::Mul;
1536         break;
1537       default:
1538         break;
1539       }
1540
1541       if (Opcode != 0) {
1542         // Intrinsic recognized. Grab its args to finish building the
1543         // expression.
1544         assert(II->getNumArgOperands() == 2 &&
1545                "Expect two args for recognised intrinsics.");
1546         return createBinaryExpression(
1547             Opcode, EI->getType(), II->getArgOperand(0), II->getArgOperand(1));
1548       }
1549     }
1550   }
1551
1552   return createAggregateValueExpression(I);
1553 }
1554 const Expression *NewGVN::performSymbolicCmpEvaluation(Instruction *I) {
1555   auto *CI = dyn_cast<CmpInst>(I);
1556   // See if our operands are equal to those of a previous predicate, and if so,
1557   // if it implies true or false.
1558   auto Op0 = lookupOperandLeader(CI->getOperand(0));
1559   auto Op1 = lookupOperandLeader(CI->getOperand(1));
1560   auto OurPredicate = CI->getPredicate();
1561   if (shouldSwapOperands(Op0, Op1)) {
1562     std::swap(Op0, Op1);
1563     OurPredicate = CI->getSwappedPredicate();
1564   }
1565
1566   // Avoid processing the same info twice
1567   const PredicateBase *LastPredInfo = nullptr;
1568   // See if we know something about the comparison itself, like it is the target
1569   // of an assume.
1570   auto *CmpPI = PredInfo->getPredicateInfoFor(I);
1571   if (dyn_cast_or_null<PredicateAssume>(CmpPI))
1572     return createConstantExpression(ConstantInt::getTrue(CI->getType()));
1573
1574   if (Op0 == Op1) {
1575     // This condition does not depend on predicates, no need to add users
1576     if (CI->isTrueWhenEqual())
1577       return createConstantExpression(ConstantInt::getTrue(CI->getType()));
1578     else if (CI->isFalseWhenEqual())
1579       return createConstantExpression(ConstantInt::getFalse(CI->getType()));
1580   }
1581
1582   // NOTE: Because we are comparing both operands here and below, and using
1583   // previous comparisons, we rely on fact that predicateinfo knows to mark
1584   // comparisons that use renamed operands as users of the earlier comparisons.
1585   // It is *not* enough to just mark predicateinfo renamed operands as users of
1586   // the earlier comparisons, because the *other* operand may have changed in a
1587   // previous iteration.
1588   // Example:
1589   // icmp slt %a, %b
1590   // %b.0 = ssa.copy(%b)
1591   // false branch:
1592   // icmp slt %c, %b.0
1593
1594   // %c and %a may start out equal, and thus, the code below will say the second
1595   // %icmp is false.  c may become equal to something else, and in that case the
1596   // %second icmp *must* be reexamined, but would not if only the renamed
1597   // %operands are considered users of the icmp.
1598
1599   // *Currently* we only check one level of comparisons back, and only mark one
1600   // level back as touched when changes appen .  If you modify this code to look
1601   // back farther through comparisons, you *must* mark the appropriate
1602   // comparisons as users in PredicateInfo.cpp, or you will cause bugs.  See if
1603   // we know something just from the operands themselves
1604
1605   // See if our operands have predicate info, so that we may be able to derive
1606   // something from a previous comparison.
1607   for (const auto &Op : CI->operands()) {
1608     auto *PI = PredInfo->getPredicateInfoFor(Op);
1609     if (const auto *PBranch = dyn_cast_or_null<PredicateBranch>(PI)) {
1610       if (PI == LastPredInfo)
1611         continue;
1612       LastPredInfo = PI;
1613
1614       // TODO: Along the false edge, we may know more things too, like icmp of
1615       // same operands is false.
1616       // TODO: We only handle actual comparison conditions below, not and/or.
1617       auto *BranchCond = dyn_cast<CmpInst>(PBranch->Condition);
1618       if (!BranchCond)
1619         continue;
1620       auto *BranchOp0 = lookupOperandLeader(BranchCond->getOperand(0));
1621       auto *BranchOp1 = lookupOperandLeader(BranchCond->getOperand(1));
1622       auto BranchPredicate = BranchCond->getPredicate();
1623       if (shouldSwapOperands(BranchOp0, BranchOp1)) {
1624         std::swap(BranchOp0, BranchOp1);
1625         BranchPredicate = BranchCond->getSwappedPredicate();
1626       }
1627       if (BranchOp0 == Op0 && BranchOp1 == Op1) {
1628         if (PBranch->TrueEdge) {
1629           // If we know the previous predicate is true and we are in the true
1630           // edge then we may be implied true or false.
1631           if (CmpInst::isImpliedTrueByMatchingCmp(OurPredicate,
1632                                                   BranchPredicate)) {
1633             addPredicateUsers(PI, I);
1634             return createConstantExpression(
1635                 ConstantInt::getTrue(CI->getType()));
1636           }
1637
1638           if (CmpInst::isImpliedFalseByMatchingCmp(OurPredicate,
1639                                                    BranchPredicate)) {
1640             addPredicateUsers(PI, I);
1641             return createConstantExpression(
1642                 ConstantInt::getFalse(CI->getType()));
1643           }
1644
1645         } else {
1646           // Just handle the ne and eq cases, where if we have the same
1647           // operands, we may know something.
1648           if (BranchPredicate == OurPredicate) {
1649             addPredicateUsers(PI, I);
1650             // Same predicate, same ops,we know it was false, so this is false.
1651             return createConstantExpression(
1652                 ConstantInt::getFalse(CI->getType()));
1653           } else if (BranchPredicate ==
1654                      CmpInst::getInversePredicate(OurPredicate)) {
1655             addPredicateUsers(PI, I);
1656             // Inverse predicate, we know the other was false, so this is true.
1657             return createConstantExpression(
1658                 ConstantInt::getTrue(CI->getType()));
1659           }
1660         }
1661       }
1662     }
1663   }
1664   // Create expression will take care of simplifyCmpInst
1665   return createExpression(I);
1666 }
1667
1668 // Substitute and symbolize the value before value numbering.
1669 const Expression *NewGVN::performSymbolicEvaluation(Value *V) {
1670   const Expression *E = nullptr;
1671   if (auto *C = dyn_cast<Constant>(V))
1672     E = createConstantExpression(C);
1673   else if (isa<Argument>(V) || isa<GlobalVariable>(V)) {
1674     E = createVariableExpression(V);
1675   } else {
1676     // TODO: memory intrinsics.
1677     // TODO: Some day, we should do the forward propagation and reassociation
1678     // parts of the algorithm.
1679     auto *I = cast<Instruction>(V);
1680     switch (I->getOpcode()) {
1681     case Instruction::ExtractValue:
1682     case Instruction::InsertValue:
1683       E = performSymbolicAggrValueEvaluation(I);
1684       break;
1685     case Instruction::PHI:
1686       E = performSymbolicPHIEvaluation(I);
1687       break;
1688     case Instruction::Call:
1689       E = performSymbolicCallEvaluation(I);
1690       break;
1691     case Instruction::Store:
1692       E = performSymbolicStoreEvaluation(I);
1693       break;
1694     case Instruction::Load:
1695       E = performSymbolicLoadEvaluation(I);
1696       break;
1697     case Instruction::BitCast: {
1698       E = createExpression(I);
1699     } break;
1700     case Instruction::ICmp:
1701     case Instruction::FCmp: {
1702       E = performSymbolicCmpEvaluation(I);
1703     } break;
1704     case Instruction::Add:
1705     case Instruction::FAdd:
1706     case Instruction::Sub:
1707     case Instruction::FSub:
1708     case Instruction::Mul:
1709     case Instruction::FMul:
1710     case Instruction::UDiv:
1711     case Instruction::SDiv:
1712     case Instruction::FDiv:
1713     case Instruction::URem:
1714     case Instruction::SRem:
1715     case Instruction::FRem:
1716     case Instruction::Shl:
1717     case Instruction::LShr:
1718     case Instruction::AShr:
1719     case Instruction::And:
1720     case Instruction::Or:
1721     case Instruction::Xor:
1722     case Instruction::Trunc:
1723     case Instruction::ZExt:
1724     case Instruction::SExt:
1725     case Instruction::FPToUI:
1726     case Instruction::FPToSI:
1727     case Instruction::UIToFP:
1728     case Instruction::SIToFP:
1729     case Instruction::FPTrunc:
1730     case Instruction::FPExt:
1731     case Instruction::PtrToInt:
1732     case Instruction::IntToPtr:
1733     case Instruction::Select:
1734     case Instruction::ExtractElement:
1735     case Instruction::InsertElement:
1736     case Instruction::ShuffleVector:
1737     case Instruction::GetElementPtr:
1738       E = createExpression(I);
1739       break;
1740     default:
1741       return nullptr;
1742     }
1743   }
1744   return E;
1745 }
1746
1747 void NewGVN::markUsersTouched(Value *V) {
1748   // Now mark the users as touched.
1749   for (auto *User : V->users()) {
1750     assert(isa<Instruction>(User) && "Use of value not within an instruction?");
1751     TouchedInstructions.set(InstrToDFSNum(User));
1752   }
1753 }
1754
1755 void NewGVN::addMemoryUsers(const MemoryAccess *To, MemoryAccess *U) {
1756   DEBUG(dbgs() << "Adding memory user " << *U << " to " << *To << "\n");
1757   MemoryToUsers[To].insert(U);
1758 }
1759
1760 void NewGVN::markMemoryDefTouched(const MemoryAccess *MA) {
1761   TouchedInstructions.set(MemoryToDFSNum(MA));
1762 }
1763
1764 void NewGVN::markMemoryUsersTouched(const MemoryAccess *MA) {
1765   if (isa<MemoryUse>(MA))
1766     return;
1767   for (auto U : MA->users())
1768     TouchedInstructions.set(MemoryToDFSNum(U));
1769   const auto Result = MemoryToUsers.find(MA);
1770   if (Result != MemoryToUsers.end()) {
1771     for (auto *User : Result->second)
1772       TouchedInstructions.set(MemoryToDFSNum(User));
1773     MemoryToUsers.erase(Result);
1774   }
1775 }
1776
1777 // Add I to the set of users of a given predicate.
1778 void NewGVN::addPredicateUsers(const PredicateBase *PB, Instruction *I) {
1779   if (auto *PBranch = dyn_cast<PredicateBranch>(PB))
1780     PredicateToUsers[PBranch->Condition].insert(I);
1781   else if (auto *PAssume = dyn_cast<PredicateBranch>(PB))
1782     PredicateToUsers[PAssume->Condition].insert(I);
1783 }
1784
1785 // Touch all the predicates that depend on this instruction.
1786 void NewGVN::markPredicateUsersTouched(Instruction *I) {
1787   const auto Result = PredicateToUsers.find(I);
1788   if (Result != PredicateToUsers.end()) {
1789     for (auto *User : Result->second)
1790       TouchedInstructions.set(InstrToDFSNum(User));
1791     PredicateToUsers.erase(Result);
1792   }
1793 }
1794
1795 // Mark users affected by a memory leader change.
1796 void NewGVN::markMemoryLeaderChangeTouched(CongruenceClass *CC) {
1797   for (auto M : CC->memory())
1798     markMemoryDefTouched(M);
1799 }
1800
1801 // Touch the instructions that need to be updated after a congruence class has a
1802 // leader change, and mark changed values.
1803 void NewGVN::markValueLeaderChangeTouched(CongruenceClass *CC) {
1804   for (auto M : *CC) {
1805     if (auto *I = dyn_cast<Instruction>(M))
1806       TouchedInstructions.set(InstrToDFSNum(I));
1807     LeaderChanges.insert(M);
1808   }
1809 }
1810
1811 // Give a range of things that have instruction DFS numbers, this will return
1812 // the member of the range with the smallest dfs number.
1813 template <class T, class Range>
1814 T *NewGVN::getMinDFSOfRange(const Range &R) const {
1815   std::pair<T *, unsigned> MinDFS = {nullptr, ~0U};
1816   for (const auto X : R) {
1817     auto DFSNum = InstrToDFSNum(X);
1818     if (DFSNum < MinDFS.second)
1819       MinDFS = {X, DFSNum};
1820   }
1821   return MinDFS.first;
1822 }
1823
1824 // This function returns the MemoryAccess that should be the next leader of
1825 // congruence class CC, under the assumption that the current leader is going to
1826 // disappear.
1827 const MemoryAccess *NewGVN::getNextMemoryLeader(CongruenceClass *CC) const {
1828   // TODO: If this ends up to slow, we can maintain a next memory leader like we
1829   // do for regular leaders.
1830   // Make sure there will be a leader to find
1831   assert((CC->getStoreCount() > 0 || !CC->memory_empty()) &&
1832          "Can't get next leader if there is none");
1833   if (CC->getStoreCount() > 0) {
1834     if (auto *NL = dyn_cast_or_null<StoreInst>(CC->getNextLeader().first))
1835       return MSSA->getMemoryAccess(NL);
1836     // Find the store with the minimum DFS number.
1837     auto *V = getMinDFSOfRange<Value>(make_filter_range(
1838         *CC, [&](const Value *V) { return isa<StoreInst>(V); }));
1839     return MSSA->getMemoryAccess(cast<StoreInst>(V));
1840   }
1841   assert(CC->getStoreCount() == 0);
1842
1843   // Given our assertion, hitting this part must mean
1844   // !OldClass->memory_empty()
1845   if (CC->memory_size() == 1)
1846     return *CC->memory_begin();
1847   return getMinDFSOfRange<const MemoryPhi>(CC->memory());
1848 }
1849
1850 // This function returns the next value leader of a congruence class, under the
1851 // assumption that the current leader is going away.  This should end up being
1852 // the next most dominating member.
1853 Value *NewGVN::getNextValueLeader(CongruenceClass *CC) const {
1854   // We don't need to sort members if there is only 1, and we don't care about
1855   // sorting the TOP class because everything either gets out of it or is
1856   // unreachable.
1857
1858   if (CC->size() == 1 || CC == TOPClass) {
1859     return *(CC->begin());
1860   } else if (CC->getNextLeader().first) {
1861     ++NumGVNAvoidedSortedLeaderChanges;
1862     return CC->getNextLeader().first;
1863   } else {
1864     ++NumGVNSortedLeaderChanges;
1865     // NOTE: If this ends up to slow, we can maintain a dual structure for
1866     // member testing/insertion, or keep things mostly sorted, and sort only
1867     // here, or use SparseBitVector or ....
1868     return getMinDFSOfRange<Value>(*CC);
1869   }
1870 }
1871
1872 // Move a MemoryAccess, currently in OldClass, to NewClass, including updates to
1873 // the memory members, etc for the move.
1874 //
1875 // The invariants of this function are:
1876 //
1877 // I must be moving to NewClass from OldClass The StoreCount of OldClass and
1878 // NewClass is expected to have been updated for I already if it is is a store.
1879 // The OldClass memory leader has not been updated yet if I was the leader.
1880 void NewGVN::moveMemoryToNewCongruenceClass(Instruction *I,
1881                                             MemoryAccess *InstMA,
1882                                             CongruenceClass *OldClass,
1883                                             CongruenceClass *NewClass) {
1884   // If the leader is I, and we had a represenative MemoryAccess, it should
1885   // be the MemoryAccess of OldClass.
1886   assert((!InstMA || !OldClass->getMemoryLeader() ||
1887           OldClass->getLeader() != I ||
1888           OldClass->getMemoryLeader() == InstMA) &&
1889          "Representative MemoryAccess mismatch");
1890   // First, see what happens to the new class
1891   if (!NewClass->getMemoryLeader()) {
1892     // Should be a new class, or a store becoming a leader of a new class.
1893     assert(NewClass->size() == 1 ||
1894            (isa<StoreInst>(I) && NewClass->getStoreCount() == 1));
1895     NewClass->setMemoryLeader(InstMA);
1896     // Mark it touched if we didn't just create a singleton
1897     DEBUG(dbgs() << "Memory class leader change for class " << NewClass->getID()
1898                  << " due to new memory instruction becoming leader\n");
1899     markMemoryLeaderChangeTouched(NewClass);
1900   }
1901   setMemoryClass(InstMA, NewClass);
1902   // Now, fixup the old class if necessary
1903   if (OldClass->getMemoryLeader() == InstMA) {
1904     if (OldClass->getStoreCount() != 0 || !OldClass->memory_empty()) {
1905       OldClass->setMemoryLeader(getNextMemoryLeader(OldClass));
1906       DEBUG(dbgs() << "Memory class leader change for class "
1907                    << OldClass->getID() << " to "
1908                    << *OldClass->getMemoryLeader()
1909                    << " due to removal of old leader " << *InstMA << "\n");
1910       markMemoryLeaderChangeTouched(OldClass);
1911     } else
1912       OldClass->setMemoryLeader(nullptr);
1913   }
1914 }
1915
1916 // Move a value, currently in OldClass, to be part of NewClass
1917 // Update OldClass and NewClass for the move (including changing leaders, etc).
1918 void NewGVN::moveValueToNewCongruenceClass(Instruction *I, const Expression *E,
1919                                            CongruenceClass *OldClass,
1920                                            CongruenceClass *NewClass) {
1921   if (I == OldClass->getNextLeader().first)
1922     OldClass->resetNextLeader();
1923
1924   // It's possible, though unlikely, for us to discover equivalences such
1925   // that the current leader does not dominate the old one.
1926   // This statistic tracks how often this happens.
1927   // We assert on phi nodes when this happens, currently, for debugging, because
1928   // we want to make sure we name phi node cycles properly.
1929   if (isa<Instruction>(NewClass->getLeader()) && NewClass->getLeader() &&
1930       I != NewClass->getLeader()) {
1931     auto *IBB = I->getParent();
1932     auto *NCBB = cast<Instruction>(NewClass->getLeader())->getParent();
1933     bool Dominated =
1934         IBB == NCBB && InstrToDFSNum(I) < InstrToDFSNum(NewClass->getLeader());
1935     Dominated = Dominated || DT->properlyDominates(IBB, NCBB);
1936     if (Dominated) {
1937       ++NumGVNNotMostDominatingLeader;
1938       assert(
1939           !isa<PHINode>(I) &&
1940           "New class for instruction should not be dominated by instruction");
1941     }
1942   }
1943
1944   if (NewClass->getLeader() != I)
1945     NewClass->addPossibleNextLeader({I, InstrToDFSNum(I)});
1946
1947   OldClass->erase(I);
1948   NewClass->insert(I);
1949   // Handle our special casing of stores.
1950   if (auto *SI = dyn_cast<StoreInst>(I)) {
1951     OldClass->decStoreCount();
1952     // Okay, so when do we want to make a store a leader of a class?
1953     // If we have a store defined by an earlier load, we want the earlier load
1954     // to lead the class.
1955     // If we have a store defined by something else, we want the store to lead
1956     // the class so everything else gets the "something else" as a value.
1957     // If we have a store as the single member of the class, we want the store
1958     // as the leader
1959     if (NewClass->getStoreCount() == 0 && !NewClass->getStoredValue()) {
1960       // If it's a store expression we are using, it means we are not equivalent
1961       // to something earlier.
1962       if (isa<StoreExpression>(E)) {
1963         assert(lookupOperandLeader(SI->getValueOperand()) !=
1964                NewClass->getLeader());
1965         NewClass->setStoredValue(lookupOperandLeader(SI->getValueOperand()));
1966         markValueLeaderChangeTouched(NewClass);
1967         // Shift the new class leader to be the store
1968         DEBUG(dbgs() << "Changing leader of congruence class "
1969                      << NewClass->getID() << " from " << *NewClass->getLeader()
1970                      << " to  " << *SI << " because store joined class\n");
1971         // If we changed the leader, we have to mark it changed because we don't
1972         // know what it will do to symbolic evlauation.
1973         NewClass->setLeader(SI);
1974       }
1975       // We rely on the code below handling the MemoryAccess change.
1976     }
1977     NewClass->incStoreCount();
1978   }
1979   // True if there is no memory instructions left in a class that had memory
1980   // instructions before.
1981
1982   // If it's not a memory use, set the MemoryAccess equivalence
1983   auto *InstMA = dyn_cast_or_null<MemoryDef>(MSSA->getMemoryAccess(I));
1984   bool InstWasMemoryLeader = InstMA && OldClass->getMemoryLeader() == InstMA;
1985   if (InstMA)
1986     moveMemoryToNewCongruenceClass(I, InstMA, OldClass, NewClass);
1987   ValueToClass[I] = NewClass;
1988   // See if we destroyed the class or need to swap leaders.
1989   if (OldClass->empty() && OldClass != TOPClass) {
1990     if (OldClass->getDefiningExpr()) {
1991       DEBUG(dbgs() << "Erasing expression " << OldClass->getDefiningExpr()
1992                    << " from table\n");
1993       ExpressionToClass.erase(OldClass->getDefiningExpr());
1994     }
1995   } else if (OldClass->getLeader() == I) {
1996     // When the leader changes, the value numbering of
1997     // everything may change due to symbolization changes, so we need to
1998     // reprocess.
1999     DEBUG(dbgs() << "Value class leader change for class " << OldClass->getID()
2000                  << "\n");
2001     ++NumGVNLeaderChanges;
2002     // Destroy the stored value if there are no more stores to represent it.
2003     // Note that this is basically clean up for the expression removal that
2004     // happens below.  If we remove stores from a class, we may leave it as a
2005     // class of equivalent memory phis.
2006     if (OldClass->getStoreCount() == 0) {
2007       if (OldClass->getStoredValue())
2008         OldClass->setStoredValue(nullptr);
2009     }
2010     // If we destroy the old access leader and it's a store, we have to
2011     // effectively destroy the congruence class.  When it comes to scalars,
2012     // anything with the same value is as good as any other.  That means that
2013     // one leader is as good as another, and as long as you have some leader for
2014     // the value, you are good.. When it comes to *memory states*, only one
2015     // particular thing really represents the definition of a given memory
2016     // state.  Once it goes away, we need to re-evaluate which pieces of memory
2017     // are really still equivalent. The best way to do this is to re-value
2018     // number things.  The only way to really make that happen is to destroy the
2019     // rest of the class.  In order to effectively destroy the class, we reset
2020     // ExpressionToClass for each by using the ValueToExpression mapping.  The
2021     // members later get marked as touched due to the leader change.  We will
2022     // create new congruence classes, and the pieces that are still equivalent
2023     // will end back together in a new class.  If this becomes too expensive, it
2024     // is possible to use a versioning scheme for the congruence classes to
2025     // avoid the expressions finding this old class.  Note that the situation is
2026     // different for memory phis, becuase they are evaluated anew each time, and
2027     // they become equal not by hashing, but by seeing if all operands are the
2028     // same (or only one is reachable).
2029     if (OldClass->getStoreCount() > 0 && InstWasMemoryLeader) {
2030       DEBUG(dbgs() << "Kicking everything out of class " << OldClass->getID()
2031                    << " because MemoryAccess leader changed");
2032       for (auto Member : *OldClass)
2033         ExpressionToClass.erase(ValueToExpression.lookup(Member));
2034     }
2035     OldClass->setLeader(getNextValueLeader(OldClass));
2036     OldClass->resetNextLeader();
2037     markValueLeaderChangeTouched(OldClass);
2038   }
2039 }
2040
2041 // Perform congruence finding on a given value numbering expression.
2042 void NewGVN::performCongruenceFinding(Instruction *I, const Expression *E) {
2043   ValueToExpression[I] = E;
2044   // This is guaranteed to return something, since it will at least find
2045   // TOP.
2046
2047   CongruenceClass *IClass = ValueToClass[I];
2048   assert(IClass && "Should have found a IClass");
2049   // Dead classes should have been eliminated from the mapping.
2050   assert(!IClass->isDead() && "Found a dead class");
2051
2052   CongruenceClass *EClass;
2053   if (const auto *VE = dyn_cast<VariableExpression>(E)) {
2054     EClass = ValueToClass[VE->getVariableValue()];
2055   } else {
2056     auto lookupResult = ExpressionToClass.insert({E, nullptr});
2057
2058     // If it's not in the value table, create a new congruence class.
2059     if (lookupResult.second) {
2060       CongruenceClass *NewClass = createCongruenceClass(nullptr, E);
2061       auto place = lookupResult.first;
2062       place->second = NewClass;
2063
2064       // Constants and variables should always be made the leader.
2065       if (const auto *CE = dyn_cast<ConstantExpression>(E)) {
2066         NewClass->setLeader(CE->getConstantValue());
2067       } else if (const auto *SE = dyn_cast<StoreExpression>(E)) {
2068         StoreInst *SI = SE->getStoreInst();
2069         NewClass->setLeader(SI);
2070         NewClass->setStoredValue(lookupOperandLeader(SI->getValueOperand()));
2071         // The RepMemoryAccess field will be filled in properly by the
2072         // moveValueToNewCongruenceClass call.
2073       } else {
2074         NewClass->setLeader(I);
2075       }
2076       assert(!isa<VariableExpression>(E) &&
2077              "VariableExpression should have been handled already");
2078
2079       EClass = NewClass;
2080       DEBUG(dbgs() << "Created new congruence class for " << *I
2081                    << " using expression " << *E << " at " << NewClass->getID()
2082                    << " and leader " << *(NewClass->getLeader()));
2083       if (NewClass->getStoredValue())
2084         DEBUG(dbgs() << " and stored value " << *(NewClass->getStoredValue()));
2085       DEBUG(dbgs() << "\n");
2086     } else {
2087       EClass = lookupResult.first->second;
2088       if (isa<ConstantExpression>(E))
2089         assert((isa<Constant>(EClass->getLeader()) ||
2090                 (EClass->getStoredValue() &&
2091                  isa<Constant>(EClass->getStoredValue()))) &&
2092                "Any class with a constant expression should have a "
2093                "constant leader");
2094
2095       assert(EClass && "Somehow don't have an eclass");
2096
2097       assert(!EClass->isDead() && "We accidentally looked up a dead class");
2098     }
2099   }
2100   bool ClassChanged = IClass != EClass;
2101   bool LeaderChanged = LeaderChanges.erase(I);
2102   if (ClassChanged || LeaderChanged) {
2103     DEBUG(dbgs() << "New class " << EClass->getID() << " for expression " << *E
2104                  << "\n");
2105     if (ClassChanged)
2106       moveValueToNewCongruenceClass(I, E, IClass, EClass);
2107     markUsersTouched(I);
2108     if (MemoryAccess *MA = MSSA->getMemoryAccess(I))
2109       markMemoryUsersTouched(MA);
2110     if (auto *CI = dyn_cast<CmpInst>(I))
2111       markPredicateUsersTouched(CI);
2112   }
2113 }
2114
2115 // Process the fact that Edge (from, to) is reachable, including marking
2116 // any newly reachable blocks and instructions for processing.
2117 void NewGVN::updateReachableEdge(BasicBlock *From, BasicBlock *To) {
2118   // Check if the Edge was reachable before.
2119   if (ReachableEdges.insert({From, To}).second) {
2120     // If this block wasn't reachable before, all instructions are touched.
2121     if (ReachableBlocks.insert(To).second) {
2122       DEBUG(dbgs() << "Block " << getBlockName(To) << " marked reachable\n");
2123       const auto &InstRange = BlockInstRange.lookup(To);
2124       TouchedInstructions.set(InstRange.first, InstRange.second);
2125     } else {
2126       DEBUG(dbgs() << "Block " << getBlockName(To)
2127                    << " was reachable, but new edge {" << getBlockName(From)
2128                    << "," << getBlockName(To) << "} to it found\n");
2129
2130       // We've made an edge reachable to an existing block, which may
2131       // impact predicates. Otherwise, only mark the phi nodes as touched, as
2132       // they are the only thing that depend on new edges. Anything using their
2133       // values will get propagated to if necessary.
2134       if (MemoryAccess *MemPhi = MSSA->getMemoryAccess(To))
2135         TouchedInstructions.set(InstrToDFSNum(MemPhi));
2136
2137       auto BI = To->begin();
2138       while (isa<PHINode>(BI)) {
2139         TouchedInstructions.set(InstrToDFSNum(&*BI));
2140         ++BI;
2141       }
2142     }
2143   }
2144 }
2145
2146 // Given a predicate condition (from a switch, cmp, or whatever) and a block,
2147 // see if we know some constant value for it already.
2148 Value *NewGVN::findConditionEquivalence(Value *Cond) const {
2149   auto Result = lookupOperandLeader(Cond);
2150   if (isa<Constant>(Result))
2151     return Result;
2152   return nullptr;
2153 }
2154
2155 // Process the outgoing edges of a block for reachability.
2156 void NewGVN::processOutgoingEdges(TerminatorInst *TI, BasicBlock *B) {
2157   // Evaluate reachability of terminator instruction.
2158   BranchInst *BR;
2159   if ((BR = dyn_cast<BranchInst>(TI)) && BR->isConditional()) {
2160     Value *Cond = BR->getCondition();
2161     Value *CondEvaluated = findConditionEquivalence(Cond);
2162     if (!CondEvaluated) {
2163       if (auto *I = dyn_cast<Instruction>(Cond)) {
2164         const Expression *E = createExpression(I);
2165         if (const auto *CE = dyn_cast<ConstantExpression>(E)) {
2166           CondEvaluated = CE->getConstantValue();
2167         }
2168       } else if (isa<ConstantInt>(Cond)) {
2169         CondEvaluated = Cond;
2170       }
2171     }
2172     ConstantInt *CI;
2173     BasicBlock *TrueSucc = BR->getSuccessor(0);
2174     BasicBlock *FalseSucc = BR->getSuccessor(1);
2175     if (CondEvaluated && (CI = dyn_cast<ConstantInt>(CondEvaluated))) {
2176       if (CI->isOne()) {
2177         DEBUG(dbgs() << "Condition for Terminator " << *TI
2178                      << " evaluated to true\n");
2179         updateReachableEdge(B, TrueSucc);
2180       } else if (CI->isZero()) {
2181         DEBUG(dbgs() << "Condition for Terminator " << *TI
2182                      << " evaluated to false\n");
2183         updateReachableEdge(B, FalseSucc);
2184       }
2185     } else {
2186       updateReachableEdge(B, TrueSucc);
2187       updateReachableEdge(B, FalseSucc);
2188     }
2189   } else if (auto *SI = dyn_cast<SwitchInst>(TI)) {
2190     // For switches, propagate the case values into the case
2191     // destinations.
2192
2193     // Remember how many outgoing edges there are to every successor.
2194     SmallDenseMap<BasicBlock *, unsigned, 16> SwitchEdges;
2195
2196     Value *SwitchCond = SI->getCondition();
2197     Value *CondEvaluated = findConditionEquivalence(SwitchCond);
2198     // See if we were able to turn this switch statement into a constant.
2199     if (CondEvaluated && isa<ConstantInt>(CondEvaluated)) {
2200       auto *CondVal = cast<ConstantInt>(CondEvaluated);
2201       // We should be able to get case value for this.
2202       auto Case = *SI->findCaseValue(CondVal);
2203       if (Case.getCaseSuccessor() == SI->getDefaultDest()) {
2204         // We proved the value is outside of the range of the case.
2205         // We can't do anything other than mark the default dest as reachable,
2206         // and go home.
2207         updateReachableEdge(B, SI->getDefaultDest());
2208         return;
2209       }
2210       // Now get where it goes and mark it reachable.
2211       BasicBlock *TargetBlock = Case.getCaseSuccessor();
2212       updateReachableEdge(B, TargetBlock);
2213     } else {
2214       for (unsigned i = 0, e = SI->getNumSuccessors(); i != e; ++i) {
2215         BasicBlock *TargetBlock = SI->getSuccessor(i);
2216         ++SwitchEdges[TargetBlock];
2217         updateReachableEdge(B, TargetBlock);
2218       }
2219     }
2220   } else {
2221     // Otherwise this is either unconditional, or a type we have no
2222     // idea about. Just mark successors as reachable.
2223     for (unsigned i = 0, e = TI->getNumSuccessors(); i != e; ++i) {
2224       BasicBlock *TargetBlock = TI->getSuccessor(i);
2225       updateReachableEdge(B, TargetBlock);
2226     }
2227
2228     // This also may be a memory defining terminator, in which case, set it
2229     // equivalent only to itself.
2230     //
2231     auto *MA = MSSA->getMemoryAccess(TI);
2232     if (MA && !isa<MemoryUse>(MA)) {
2233       auto *CC = ensureLeaderOfMemoryClass(MA);
2234       if (setMemoryClass(MA, CC))
2235         markMemoryUsersTouched(MA);
2236     }
2237   }
2238 }
2239
2240 // The algorithm initially places the values of the routine in the TOP
2241 // congruence class. The leader of TOP is the undetermined value `undef`.
2242 // When the algorithm has finished, values still in TOP are unreachable.
2243 void NewGVN::initializeCongruenceClasses(Function &F) {
2244   NextCongruenceNum = 0;
2245
2246   // Note that even though we use the live on entry def as a representative
2247   // MemoryAccess, it is *not* the same as the actual live on entry def. We
2248   // have no real equivalemnt to undef for MemoryAccesses, and so we really
2249   // should be checking whether the MemoryAccess is top if we want to know if it
2250   // is equivalent to everything.  Otherwise, what this really signifies is that
2251   // the access "it reaches all the way back to the beginning of the function"
2252
2253   // Initialize all other instructions to be in TOP class.
2254   TOPClass = createCongruenceClass(nullptr, nullptr);
2255   TOPClass->setMemoryLeader(MSSA->getLiveOnEntryDef());
2256   //  The live on entry def gets put into it's own class
2257   MemoryAccessToClass[MSSA->getLiveOnEntryDef()] =
2258       createMemoryClass(MSSA->getLiveOnEntryDef());
2259
2260   for (auto DTN : nodes(DT)) {
2261     BasicBlock *BB = DTN->getBlock();
2262     // All MemoryAccesses are equivalent to live on entry to start. They must
2263     // be initialized to something so that initial changes are noticed. For
2264     // the maximal answer, we initialize them all to be the same as
2265     // liveOnEntry.
2266     auto *MemoryBlockDefs = MSSA->getBlockDefs(BB);
2267     if (MemoryBlockDefs)
2268       for (const auto &Def : *MemoryBlockDefs) {
2269         MemoryAccessToClass[&Def] = TOPClass;
2270         auto *MD = dyn_cast<MemoryDef>(&Def);
2271         // Insert the memory phis into the member list.
2272         if (!MD) {
2273           const MemoryPhi *MP = cast<MemoryPhi>(&Def);
2274           TOPClass->memory_insert(MP);
2275           MemoryPhiState.insert({MP, MPS_TOP});
2276         }
2277
2278         if (MD && isa<StoreInst>(MD->getMemoryInst()))
2279           TOPClass->incStoreCount();
2280       }
2281     for (auto &I : *BB) {
2282       // Don't insert void terminators into the class. We don't value number
2283       // them, and they just end up sitting in TOP.
2284       if (isa<TerminatorInst>(I) && I.getType()->isVoidTy())
2285         continue;
2286       TOPClass->insert(&I);
2287       ValueToClass[&I] = TOPClass;
2288     }
2289   }
2290
2291   // Initialize arguments to be in their own unique congruence classes
2292   for (auto &FA : F.args())
2293     createSingletonCongruenceClass(&FA);
2294 }
2295
2296 void NewGVN::cleanupTables() {
2297   for (unsigned i = 0, e = CongruenceClasses.size(); i != e; ++i) {
2298     DEBUG(dbgs() << "Congruence class " << CongruenceClasses[i]->getID()
2299                  << " has " << CongruenceClasses[i]->size() << " members\n");
2300     // Make sure we delete the congruence class (probably worth switching to
2301     // a unique_ptr at some point.
2302     delete CongruenceClasses[i];
2303     CongruenceClasses[i] = nullptr;
2304   }
2305
2306   ValueToClass.clear();
2307   ArgRecycler.clear(ExpressionAllocator);
2308   ExpressionAllocator.Reset();
2309   CongruenceClasses.clear();
2310   ExpressionToClass.clear();
2311   ValueToExpression.clear();
2312   ReachableBlocks.clear();
2313   ReachableEdges.clear();
2314 #ifndef NDEBUG
2315   ProcessedCount.clear();
2316 #endif
2317   InstrDFS.clear();
2318   InstructionsToErase.clear();
2319   DFSToInstr.clear();
2320   BlockInstRange.clear();
2321   TouchedInstructions.clear();
2322   MemoryAccessToClass.clear();
2323   PredicateToUsers.clear();
2324   MemoryToUsers.clear();
2325 }
2326
2327 std::pair<unsigned, unsigned> NewGVN::assignDFSNumbers(BasicBlock *B,
2328                                                        unsigned Start) {
2329   unsigned End = Start;
2330   if (MemoryAccess *MemPhi = MSSA->getMemoryAccess(B)) {
2331     InstrDFS[MemPhi] = End++;
2332     DFSToInstr.emplace_back(MemPhi);
2333   }
2334
2335   for (auto &I : *B) {
2336     // There's no need to call isInstructionTriviallyDead more than once on
2337     // an instruction. Therefore, once we know that an instruction is dead
2338     // we change its DFS number so that it doesn't get value numbered.
2339     if (isInstructionTriviallyDead(&I, TLI)) {
2340       InstrDFS[&I] = 0;
2341       DEBUG(dbgs() << "Skipping trivially dead instruction " << I << "\n");
2342       markInstructionForDeletion(&I);
2343       continue;
2344     }
2345
2346     InstrDFS[&I] = End++;
2347     DFSToInstr.emplace_back(&I);
2348   }
2349
2350   // All of the range functions taken half-open ranges (open on the end side).
2351   // So we do not subtract one from count, because at this point it is one
2352   // greater than the last instruction.
2353   return std::make_pair(Start, End);
2354 }
2355
2356 void NewGVN::updateProcessedCount(Value *V) {
2357 #ifndef NDEBUG
2358   if (ProcessedCount.count(V) == 0) {
2359     ProcessedCount.insert({V, 1});
2360   } else {
2361     ++ProcessedCount[V];
2362     assert(ProcessedCount[V] < 100 &&
2363            "Seem to have processed the same Value a lot");
2364   }
2365 #endif
2366 }
2367 // Evaluate MemoryPhi nodes symbolically, just like PHI nodes
2368 void NewGVN::valueNumberMemoryPhi(MemoryPhi *MP) {
2369   // If all the arguments are the same, the MemoryPhi has the same value as the
2370   // argument.
2371   // Filter out unreachable blocks and self phis from our operands.
2372   const BasicBlock *PHIBlock = MP->getBlock();
2373   auto Filtered = make_filter_range(MP->operands(), [&](const Use &U) {
2374     return lookupMemoryLeader(cast<MemoryAccess>(U)) != MP &&
2375            !isMemoryAccessTop(cast<MemoryAccess>(U)) &&
2376            ReachableEdges.count({MP->getIncomingBlock(U), PHIBlock});
2377   });
2378   // If all that is left is nothing, our memoryphi is undef. We keep it as
2379   // InitialClass.  Note: The only case this should happen is if we have at
2380   // least one self-argument.
2381   if (Filtered.begin() == Filtered.end()) {
2382     if (setMemoryClass(MP, TOPClass))
2383       markMemoryUsersTouched(MP);
2384     return;
2385   }
2386
2387   // Transform the remaining operands into operand leaders.
2388   // FIXME: mapped_iterator should have a range version.
2389   auto LookupFunc = [&](const Use &U) {
2390     return lookupMemoryLeader(cast<MemoryAccess>(U));
2391   };
2392   auto MappedBegin = map_iterator(Filtered.begin(), LookupFunc);
2393   auto MappedEnd = map_iterator(Filtered.end(), LookupFunc);
2394
2395   // and now check if all the elements are equal.
2396   // Sadly, we can't use std::equals since these are random access iterators.
2397   const auto *AllSameValue = *MappedBegin;
2398   ++MappedBegin;
2399   bool AllEqual = std::all_of(
2400       MappedBegin, MappedEnd,
2401       [&AllSameValue](const MemoryAccess *V) { return V == AllSameValue; });
2402
2403   if (AllEqual)
2404     DEBUG(dbgs() << "Memory Phi value numbered to " << *AllSameValue << "\n");
2405   else
2406     DEBUG(dbgs() << "Memory Phi value numbered to itself\n");
2407   // If it's equal to something, it's in that class. Otherwise, it has to be in
2408   // a class where it is the leader (other things may be equivalent to it, but
2409   // it needs to start off in its own class, which means it must have been the
2410   // leader, and it can't have stopped being the leader because it was never
2411   // removed).
2412   CongruenceClass *CC =
2413       AllEqual ? getMemoryClass(AllSameValue) : ensureLeaderOfMemoryClass(MP);
2414   auto OldState = MemoryPhiState.lookup(MP);
2415   assert(OldState != MPS_Invalid && "Invalid memory phi state");
2416   auto NewState = AllEqual ? MPS_Equivalent : MPS_Unique;
2417   MemoryPhiState[MP] = NewState;
2418   if (setMemoryClass(MP, CC) || OldState != NewState)
2419     markMemoryUsersTouched(MP);
2420 }
2421
2422 // Value number a single instruction, symbolically evaluating, performing
2423 // congruence finding, and updating mappings.
2424 void NewGVN::valueNumberInstruction(Instruction *I) {
2425   DEBUG(dbgs() << "Processing instruction " << *I << "\n");
2426   if (!I->isTerminator()) {
2427     const Expression *Symbolized = nullptr;
2428     if (DebugCounter::shouldExecute(VNCounter)) {
2429       Symbolized = performSymbolicEvaluation(I);
2430     } else {
2431       // Mark the instruction as unused so we don't value number it again.
2432       InstrDFS[I] = 0;
2433     }
2434     // If we couldn't come up with a symbolic expression, use the unknown
2435     // expression
2436     if (Symbolized == nullptr) {
2437       Symbolized = createUnknownExpression(I);
2438     }
2439
2440     performCongruenceFinding(I, Symbolized);
2441   } else {
2442     // Handle terminators that return values. All of them produce values we
2443     // don't currently understand.  We don't place non-value producing
2444     // terminators in a class.
2445     if (!I->getType()->isVoidTy()) {
2446       auto *Symbolized = createUnknownExpression(I);
2447       performCongruenceFinding(I, Symbolized);
2448     }
2449     processOutgoingEdges(dyn_cast<TerminatorInst>(I), I->getParent());
2450   }
2451 }
2452
2453 // Check if there is a path, using single or equal argument phi nodes, from
2454 // First to Second.
2455 bool NewGVN::singleReachablePHIPath(const MemoryAccess *First,
2456                                     const MemoryAccess *Second) const {
2457   if (First == Second)
2458     return true;
2459   if (MSSA->isLiveOnEntryDef(First))
2460     return false;
2461
2462   const auto *EndDef = First;
2463   for (auto *ChainDef : optimized_def_chain(First)) {
2464     if (ChainDef == Second)
2465       return true;
2466     if (MSSA->isLiveOnEntryDef(ChainDef))
2467       return false;
2468     EndDef = ChainDef;
2469   }
2470   auto *MP = cast<MemoryPhi>(EndDef);
2471   auto ReachableOperandPred = [&](const Use &U) {
2472     return ReachableEdges.count({MP->getIncomingBlock(U), MP->getBlock()});
2473   };
2474   auto FilteredPhiArgs =
2475       make_filter_range(MP->operands(), ReachableOperandPred);
2476   SmallVector<const Value *, 32> OperandList;
2477   std::copy(FilteredPhiArgs.begin(), FilteredPhiArgs.end(),
2478             std::back_inserter(OperandList));
2479   bool Okay = OperandList.size() == 1;
2480   if (!Okay)
2481     Okay =
2482         std::equal(OperandList.begin(), OperandList.end(), OperandList.begin());
2483   if (Okay)
2484     return singleReachablePHIPath(cast<MemoryAccess>(OperandList[0]), Second);
2485   return false;
2486 }
2487
2488 // Verify the that the memory equivalence table makes sense relative to the
2489 // congruence classes.  Note that this checking is not perfect, and is currently
2490 // subject to very rare false negatives. It is only useful for
2491 // testing/debugging.
2492 void NewGVN::verifyMemoryCongruency() const {
2493 #ifndef NDEBUG
2494   // Verify that the memory table equivalence and memory member set match
2495   for (const auto *CC : CongruenceClasses) {
2496     if (CC == TOPClass || CC->isDead())
2497       continue;
2498     if (CC->getStoreCount() != 0) {
2499       assert((CC->getStoredValue() || !isa<StoreInst>(CC->getLeader())) &&
2500              "Any class with a store as a "
2501              "leader should have a "
2502              "representative stored value\n");
2503       assert(CC->getMemoryLeader() &&
2504              "Any congruence class with a store should "
2505              "have a representative access\n");
2506     }
2507
2508     if (CC->getMemoryLeader())
2509       assert(MemoryAccessToClass.lookup(CC->getMemoryLeader()) == CC &&
2510              "Representative MemoryAccess does not appear to be reverse "
2511              "mapped properly");
2512     for (auto M : CC->memory())
2513       assert(MemoryAccessToClass.lookup(M) == CC &&
2514              "Memory member does not appear to be reverse mapped properly");
2515   }
2516
2517   // Anything equivalent in the MemoryAccess table should be in the same
2518   // congruence class.
2519
2520   // Filter out the unreachable and trivially dead entries, because they may
2521   // never have been updated if the instructions were not processed.
2522   auto ReachableAccessPred =
2523       [&](const std::pair<const MemoryAccess *, CongruenceClass *> Pair) {
2524         bool Result = ReachableBlocks.count(Pair.first->getBlock());
2525         if (!Result || MSSA->isLiveOnEntryDef(Pair.first) ||
2526             MemoryToDFSNum(Pair.first) == 0)
2527           return false;
2528         if (auto *MemDef = dyn_cast<MemoryDef>(Pair.first))
2529           return !isInstructionTriviallyDead(MemDef->getMemoryInst());
2530         return true;
2531       };
2532
2533   auto Filtered = make_filter_range(MemoryAccessToClass, ReachableAccessPred);
2534   for (auto KV : Filtered) {
2535     assert(KV.second != TOPClass &&
2536            "Memory not unreachable but ended up in TOP");
2537     if (auto *FirstMUD = dyn_cast<MemoryUseOrDef>(KV.first)) {
2538       auto *SecondMUD = dyn_cast<MemoryUseOrDef>(KV.second->getMemoryLeader());
2539       if (FirstMUD && SecondMUD)
2540         assert((singleReachablePHIPath(FirstMUD, SecondMUD) ||
2541                 ValueToClass.lookup(FirstMUD->getMemoryInst()) ==
2542                     ValueToClass.lookup(SecondMUD->getMemoryInst())) &&
2543                "The instructions for these memory operations should have "
2544                "been in the same congruence class or reachable through"
2545                "a single argument phi");
2546     } else if (auto *FirstMP = dyn_cast<MemoryPhi>(KV.first)) {
2547       // We can only sanely verify that MemoryDefs in the operand list all have
2548       // the same class.
2549       auto ReachableOperandPred = [&](const Use &U) {
2550         return ReachableEdges.count(
2551                    {FirstMP->getIncomingBlock(U), FirstMP->getBlock()}) &&
2552                isa<MemoryDef>(U);
2553
2554       };
2555       // All arguments should in the same class, ignoring unreachable arguments
2556       auto FilteredPhiArgs =
2557           make_filter_range(FirstMP->operands(), ReachableOperandPred);
2558       SmallVector<const CongruenceClass *, 16> PhiOpClasses;
2559       std::transform(FilteredPhiArgs.begin(), FilteredPhiArgs.end(),
2560                      std::back_inserter(PhiOpClasses), [&](const Use &U) {
2561                        const MemoryDef *MD = cast<MemoryDef>(U);
2562                        return ValueToClass.lookup(MD->getMemoryInst());
2563                      });
2564       assert(std::equal(PhiOpClasses.begin(), PhiOpClasses.end(),
2565                         PhiOpClasses.begin()) &&
2566              "All MemoryPhi arguments should be in the same class");
2567     }
2568   }
2569 #endif
2570 }
2571
2572 // Verify that the sparse propagation we did actually found the maximal fixpoint
2573 // We do this by storing the value to class mapping, touching all instructions,
2574 // and redoing the iteration to see if anything changed.
2575 void NewGVN::verifyIterationSettled(Function &F) {
2576 #ifndef NDEBUG
2577   DEBUG(dbgs() << "Beginning iteration verification\n");
2578   if (DebugCounter::isCounterSet(VNCounter))
2579     DebugCounter::setCounterValue(VNCounter, StartingVNCounter);
2580
2581   // Note that we have to store the actual classes, as we may change existing
2582   // classes during iteration.  This is because our memory iteration propagation
2583   // is not perfect, and so may waste a little work.  But it should generate
2584   // exactly the same congruence classes we have now, with different IDs.
2585   std::map<const Value *, CongruenceClass> BeforeIteration;
2586
2587   for (auto &KV : ValueToClass) {
2588     if (auto *I = dyn_cast<Instruction>(KV.first))
2589       // Skip unused/dead instructions.
2590       if (InstrToDFSNum(I) == 0)
2591         continue;
2592     BeforeIteration.insert({KV.first, *KV.second});
2593   }
2594
2595   TouchedInstructions.set();
2596   TouchedInstructions.reset(0);
2597   iterateTouchedInstructions();
2598   DenseSet<std::pair<const CongruenceClass *, const CongruenceClass *>>
2599       EqualClasses;
2600   for (const auto &KV : ValueToClass) {
2601     if (auto *I = dyn_cast<Instruction>(KV.first))
2602       // Skip unused/dead instructions.
2603       if (InstrToDFSNum(I) == 0)
2604         continue;
2605     // We could sink these uses, but i think this adds a bit of clarity here as
2606     // to what we are comparing.
2607     auto *BeforeCC = &BeforeIteration.find(KV.first)->second;
2608     auto *AfterCC = KV.second;
2609     // Note that the classes can't change at this point, so we memoize the set
2610     // that are equal.
2611     if (!EqualClasses.count({BeforeCC, AfterCC})) {
2612       assert(BeforeCC->isEquivalentTo(AfterCC) &&
2613              "Value number changed after main loop completed!");
2614       EqualClasses.insert({BeforeCC, AfterCC});
2615     }
2616   }
2617 #endif
2618 }
2619
2620 // This is the main value numbering loop, it iterates over the initial touched
2621 // instruction set, propagating value numbers, marking things touched, etc,
2622 // until the set of touched instructions is completely empty.
2623 void NewGVN::iterateTouchedInstructions() {
2624   unsigned int Iterations = 0;
2625   // Figure out where touchedinstructions starts
2626   int FirstInstr = TouchedInstructions.find_first();
2627   // Nothing set, nothing to iterate, just return.
2628   if (FirstInstr == -1)
2629     return;
2630   BasicBlock *LastBlock = getBlockForValue(InstrFromDFSNum(FirstInstr));
2631   while (TouchedInstructions.any()) {
2632     ++Iterations;
2633     // Walk through all the instructions in all the blocks in RPO.
2634     // TODO: As we hit a new block, we should push and pop equalities into a
2635     // table lookupOperandLeader can use, to catch things PredicateInfo
2636     // might miss, like edge-only equivalences.
2637     for (int InstrNum = TouchedInstructions.find_first(); InstrNum != -1;
2638          InstrNum = TouchedInstructions.find_next(InstrNum)) {
2639
2640       // This instruction was found to be dead. We don't bother looking
2641       // at it again.
2642       if (InstrNum == 0) {
2643         TouchedInstructions.reset(InstrNum);
2644         continue;
2645       }
2646
2647       Value *V = InstrFromDFSNum(InstrNum);
2648       BasicBlock *CurrBlock = getBlockForValue(V);
2649
2650       // If we hit a new block, do reachability processing.
2651       if (CurrBlock != LastBlock) {
2652         LastBlock = CurrBlock;
2653         bool BlockReachable = ReachableBlocks.count(CurrBlock);
2654         const auto &CurrInstRange = BlockInstRange.lookup(CurrBlock);
2655
2656         // If it's not reachable, erase any touched instructions and move on.
2657         if (!BlockReachable) {
2658           TouchedInstructions.reset(CurrInstRange.first, CurrInstRange.second);
2659           DEBUG(dbgs() << "Skipping instructions in block "
2660                        << getBlockName(CurrBlock)
2661                        << " because it is unreachable\n");
2662           continue;
2663         }
2664         updateProcessedCount(CurrBlock);
2665       }
2666
2667       if (auto *MP = dyn_cast<MemoryPhi>(V)) {
2668         DEBUG(dbgs() << "Processing MemoryPhi " << *MP << "\n");
2669         valueNumberMemoryPhi(MP);
2670       } else if (auto *I = dyn_cast<Instruction>(V)) {
2671         valueNumberInstruction(I);
2672       } else {
2673         llvm_unreachable("Should have been a MemoryPhi or Instruction");
2674       }
2675       updateProcessedCount(V);
2676       // Reset after processing (because we may mark ourselves as touched when
2677       // we propagate equalities).
2678       TouchedInstructions.reset(InstrNum);
2679     }
2680   }
2681   NumGVNMaxIterations = std::max(NumGVNMaxIterations.getValue(), Iterations);
2682 }
2683
2684 // This is the main transformation entry point.
2685 bool NewGVN::runGVN() {
2686   if (DebugCounter::isCounterSet(VNCounter))
2687     StartingVNCounter = DebugCounter::getCounterValue(VNCounter);
2688   bool Changed = false;
2689   NumFuncArgs = F.arg_size();
2690   MSSAWalker = MSSA->getWalker();
2691
2692   // Count number of instructions for sizing of hash tables, and come
2693   // up with a global dfs numbering for instructions.
2694   unsigned ICount = 1;
2695   // Add an empty instruction to account for the fact that we start at 1
2696   DFSToInstr.emplace_back(nullptr);
2697   // Note: We want ideal RPO traversal of the blocks, which is not quite the
2698   // same as dominator tree order, particularly with regard whether backedges
2699   // get visited first or second, given a block with multiple successors.
2700   // If we visit in the wrong order, we will end up performing N times as many
2701   // iterations.
2702   // The dominator tree does guarantee that, for a given dom tree node, it's
2703   // parent must occur before it in the RPO ordering. Thus, we only need to sort
2704   // the siblings.
2705   ReversePostOrderTraversal<Function *> RPOT(&F);
2706   unsigned Counter = 0;
2707   for (auto &B : RPOT) {
2708     auto *Node = DT->getNode(B);
2709     assert(Node && "RPO and Dominator tree should have same reachability");
2710     RPOOrdering[Node] = ++Counter;
2711   }
2712   // Sort dominator tree children arrays into RPO.
2713   for (auto &B : RPOT) {
2714     auto *Node = DT->getNode(B);
2715     if (Node->getChildren().size() > 1)
2716       std::sort(Node->begin(), Node->end(),
2717                 [&](const DomTreeNode *A, const DomTreeNode *B) {
2718                   return RPOOrdering[A] < RPOOrdering[B];
2719                 });
2720   }
2721
2722   // Now a standard depth first ordering of the domtree is equivalent to RPO.
2723   for (auto DTN : depth_first(DT->getRootNode())) {
2724     BasicBlock *B = DTN->getBlock();
2725     const auto &BlockRange = assignDFSNumbers(B, ICount);
2726     BlockInstRange.insert({B, BlockRange});
2727     ICount += BlockRange.second - BlockRange.first;
2728   }
2729
2730   TouchedInstructions.resize(ICount);
2731   // Ensure we don't end up resizing the expressionToClass map, as
2732   // that can be quite expensive. At most, we have one expression per
2733   // instruction.
2734   ExpressionToClass.reserve(ICount);
2735
2736   // Initialize the touched instructions to include the entry block.
2737   const auto &InstRange = BlockInstRange.lookup(&F.getEntryBlock());
2738   TouchedInstructions.set(InstRange.first, InstRange.second);
2739   ReachableBlocks.insert(&F.getEntryBlock());
2740
2741   initializeCongruenceClasses(F);
2742   iterateTouchedInstructions();
2743   verifyMemoryCongruency();
2744   verifyIterationSettled(F);
2745
2746   Changed |= eliminateInstructions(F);
2747
2748   // Delete all instructions marked for deletion.
2749   for (Instruction *ToErase : InstructionsToErase) {
2750     if (!ToErase->use_empty())
2751       ToErase->replaceAllUsesWith(UndefValue::get(ToErase->getType()));
2752
2753     ToErase->eraseFromParent();
2754   }
2755
2756   // Delete all unreachable blocks.
2757   auto UnreachableBlockPred = [&](const BasicBlock &BB) {
2758     return !ReachableBlocks.count(&BB);
2759   };
2760
2761   for (auto &BB : make_filter_range(F, UnreachableBlockPred)) {
2762     DEBUG(dbgs() << "We believe block " << getBlockName(&BB)
2763                  << " is unreachable\n");
2764     deleteInstructionsInBlock(&BB);
2765     Changed = true;
2766   }
2767
2768   cleanupTables();
2769   return Changed;
2770 }
2771
2772 // Return true if V is a value that will always be available (IE can
2773 // be placed anywhere) in the function.  We don't do globals here
2774 // because they are often worse to put in place.
2775 // TODO: Separate cost from availability
2776 static bool alwaysAvailable(Value *V) {
2777   return isa<Constant>(V) || isa<Argument>(V);
2778 }
2779
2780 struct NewGVN::ValueDFS {
2781   int DFSIn = 0;
2782   int DFSOut = 0;
2783   int LocalNum = 0;
2784   // Only one of Def and U will be set.
2785   // The bool in the Def tells us whether the Def is the stored value of a
2786   // store.
2787   PointerIntPair<Value *, 1, bool> Def;
2788   Use *U = nullptr;
2789   bool operator<(const ValueDFS &Other) const {
2790     // It's not enough that any given field be less than - we have sets
2791     // of fields that need to be evaluated together to give a proper ordering.
2792     // For example, if you have;
2793     // DFS (1, 3)
2794     // Val 0
2795     // DFS (1, 2)
2796     // Val 50
2797     // We want the second to be less than the first, but if we just go field
2798     // by field, we will get to Val 0 < Val 50 and say the first is less than
2799     // the second. We only want it to be less than if the DFS orders are equal.
2800     //
2801     // Each LLVM instruction only produces one value, and thus the lowest-level
2802     // differentiator that really matters for the stack (and what we use as as a
2803     // replacement) is the local dfs number.
2804     // Everything else in the structure is instruction level, and only affects
2805     // the order in which we will replace operands of a given instruction.
2806     //
2807     // For a given instruction (IE things with equal dfsin, dfsout, localnum),
2808     // the order of replacement of uses does not matter.
2809     // IE given,
2810     //  a = 5
2811     //  b = a + a
2812     // When you hit b, you will have two valuedfs with the same dfsin, out, and
2813     // localnum.
2814     // The .val will be the same as well.
2815     // The .u's will be different.
2816     // You will replace both, and it does not matter what order you replace them
2817     // in (IE whether you replace operand 2, then operand 1, or operand 1, then
2818     // operand 2).
2819     // Similarly for the case of same dfsin, dfsout, localnum, but different
2820     // .val's
2821     //  a = 5
2822     //  b  = 6
2823     //  c = a + b
2824     // in c, we will a valuedfs for a, and one for b,with everything the same
2825     // but .val  and .u.
2826     // It does not matter what order we replace these operands in.
2827     // You will always end up with the same IR, and this is guaranteed.
2828     return std::tie(DFSIn, DFSOut, LocalNum, Def, U) <
2829            std::tie(Other.DFSIn, Other.DFSOut, Other.LocalNum, Other.Def,
2830                     Other.U);
2831   }
2832 };
2833
2834 // This function converts the set of members for a congruence class from values,
2835 // to sets of defs and uses with associated DFS info.  The total number of
2836 // reachable uses for each value is stored in UseCount, and instructions that
2837 // seem
2838 // dead (have no non-dead uses) are stored in ProbablyDead.
2839 void NewGVN::convertClassToDFSOrdered(
2840     const CongruenceClass &Dense, SmallVectorImpl<ValueDFS> &DFSOrderedSet,
2841     DenseMap<const Value *, unsigned int> &UseCounts,
2842     SmallPtrSetImpl<Instruction *> &ProbablyDead) const {
2843   for (auto D : Dense) {
2844     // First add the value.
2845     BasicBlock *BB = getBlockForValue(D);
2846     // Constants are handled prior to ever calling this function, so
2847     // we should only be left with instructions as members.
2848     assert(BB && "Should have figured out a basic block for value");
2849     ValueDFS VDDef;
2850     DomTreeNode *DomNode = DT->getNode(BB);
2851     VDDef.DFSIn = DomNode->getDFSNumIn();
2852     VDDef.DFSOut = DomNode->getDFSNumOut();
2853     // If it's a store, use the leader of the value operand, if it's always
2854     // available, or the value operand.  TODO: We could do dominance checks to
2855     // find a dominating leader, but not worth it ATM.
2856     if (auto *SI = dyn_cast<StoreInst>(D)) {
2857       auto Leader = lookupOperandLeader(SI->getValueOperand());
2858       if (alwaysAvailable(Leader)) {
2859         VDDef.Def.setPointer(Leader);
2860       } else {
2861         VDDef.Def.setPointer(SI->getValueOperand());
2862         VDDef.Def.setInt(true);
2863       }
2864     } else {
2865       VDDef.Def.setPointer(D);
2866     }
2867     assert(isa<Instruction>(D) &&
2868            "The dense set member should always be an instruction");
2869     VDDef.LocalNum = InstrToDFSNum(D);
2870     DFSOrderedSet.emplace_back(VDDef);
2871     Instruction *Def = cast<Instruction>(D);
2872     unsigned int UseCount = 0;
2873     // Now add the uses.
2874     for (auto &U : Def->uses()) {
2875       if (auto *I = dyn_cast<Instruction>(U.getUser())) {
2876         // Don't try to replace into dead uses
2877         if (InstructionsToErase.count(I))
2878           continue;
2879         ValueDFS VDUse;
2880         // Put the phi node uses in the incoming block.
2881         BasicBlock *IBlock;
2882         if (auto *P = dyn_cast<PHINode>(I)) {
2883           IBlock = P->getIncomingBlock(U);
2884           // Make phi node users appear last in the incoming block
2885           // they are from.
2886           VDUse.LocalNum = InstrDFS.size() + 1;
2887         } else {
2888           IBlock = I->getParent();
2889           VDUse.LocalNum = InstrToDFSNum(I);
2890         }
2891
2892         // Skip uses in unreachable blocks, as we're going
2893         // to delete them.
2894         if (ReachableBlocks.count(IBlock) == 0)
2895           continue;
2896
2897         DomTreeNode *DomNode = DT->getNode(IBlock);
2898         VDUse.DFSIn = DomNode->getDFSNumIn();
2899         VDUse.DFSOut = DomNode->getDFSNumOut();
2900         VDUse.U = &U;
2901         ++UseCount;
2902         DFSOrderedSet.emplace_back(VDUse);
2903       }
2904     }
2905
2906     // If there are no uses, it's probably dead (but it may have side-effects,
2907     // so not definitely dead. Otherwise, store the number of uses so we can
2908     // track if it becomes dead later).
2909     if (UseCount == 0)
2910       ProbablyDead.insert(Def);
2911     else
2912       UseCounts[Def] = UseCount;
2913   }
2914 }
2915
2916 // This function converts the set of members for a congruence class from values,
2917 // to the set of defs for loads and stores, with associated DFS info.
2918 void NewGVN::convertClassToLoadsAndStores(
2919     const CongruenceClass &Dense,
2920     SmallVectorImpl<ValueDFS> &LoadsAndStores) const {
2921   for (auto D : Dense) {
2922     if (!isa<LoadInst>(D) && !isa<StoreInst>(D))
2923       continue;
2924
2925     BasicBlock *BB = getBlockForValue(D);
2926     ValueDFS VD;
2927     DomTreeNode *DomNode = DT->getNode(BB);
2928     VD.DFSIn = DomNode->getDFSNumIn();
2929     VD.DFSOut = DomNode->getDFSNumOut();
2930     VD.Def.setPointer(D);
2931
2932     // If it's an instruction, use the real local dfs number.
2933     if (auto *I = dyn_cast<Instruction>(D))
2934       VD.LocalNum = InstrToDFSNum(I);
2935     else
2936       llvm_unreachable("Should have been an instruction");
2937
2938     LoadsAndStores.emplace_back(VD);
2939   }
2940 }
2941
2942 static void patchReplacementInstruction(Instruction *I, Value *Repl) {
2943   auto *ReplInst = dyn_cast<Instruction>(Repl);
2944   if (!ReplInst)
2945     return;
2946
2947   // Patch the replacement so that it is not more restrictive than the value
2948   // being replaced.
2949   // Note that if 'I' is a load being replaced by some operation,
2950   // for example, by an arithmetic operation, then andIRFlags()
2951   // would just erase all math flags from the original arithmetic
2952   // operation, which is clearly not wanted and not needed.
2953   if (!isa<LoadInst>(I))
2954     ReplInst->andIRFlags(I);
2955
2956   // FIXME: If both the original and replacement value are part of the
2957   // same control-flow region (meaning that the execution of one
2958   // guarantees the execution of the other), then we can combine the
2959   // noalias scopes here and do better than the general conservative
2960   // answer used in combineMetadata().
2961
2962   // In general, GVN unifies expressions over different control-flow
2963   // regions, and so we need a conservative combination of the noalias
2964   // scopes.
2965   static const unsigned KnownIDs[] = {
2966       LLVMContext::MD_tbaa,           LLVMContext::MD_alias_scope,
2967       LLVMContext::MD_noalias,        LLVMContext::MD_range,
2968       LLVMContext::MD_fpmath,         LLVMContext::MD_invariant_load,
2969       LLVMContext::MD_invariant_group};
2970   combineMetadata(ReplInst, I, KnownIDs);
2971 }
2972
2973 static void patchAndReplaceAllUsesWith(Instruction *I, Value *Repl) {
2974   patchReplacementInstruction(I, Repl);
2975   I->replaceAllUsesWith(Repl);
2976 }
2977
2978 void NewGVN::deleteInstructionsInBlock(BasicBlock *BB) {
2979   DEBUG(dbgs() << "  BasicBlock Dead:" << *BB);
2980   ++NumGVNBlocksDeleted;
2981
2982   // Delete the instructions backwards, as it has a reduced likelihood of having
2983   // to update as many def-use and use-def chains. Start after the terminator.
2984   auto StartPoint = BB->rbegin();
2985   ++StartPoint;
2986   // Note that we explicitly recalculate BB->rend() on each iteration,
2987   // as it may change when we remove the first instruction.
2988   for (BasicBlock::reverse_iterator I(StartPoint); I != BB->rend();) {
2989     Instruction &Inst = *I++;
2990     if (!Inst.use_empty())
2991       Inst.replaceAllUsesWith(UndefValue::get(Inst.getType()));
2992     if (isa<LandingPadInst>(Inst))
2993       continue;
2994
2995     Inst.eraseFromParent();
2996     ++NumGVNInstrDeleted;
2997   }
2998   // Now insert something that simplifycfg will turn into an unreachable.
2999   Type *Int8Ty = Type::getInt8Ty(BB->getContext());
3000   new StoreInst(UndefValue::get(Int8Ty),
3001                 Constant::getNullValue(Int8Ty->getPointerTo()),
3002                 BB->getTerminator());
3003 }
3004
3005 void NewGVN::markInstructionForDeletion(Instruction *I) {
3006   DEBUG(dbgs() << "Marking " << *I << " for deletion\n");
3007   InstructionsToErase.insert(I);
3008 }
3009
3010 void NewGVN::replaceInstruction(Instruction *I, Value *V) {
3011
3012   DEBUG(dbgs() << "Replacing " << *I << " with " << *V << "\n");
3013   patchAndReplaceAllUsesWith(I, V);
3014   // We save the actual erasing to avoid invalidating memory
3015   // dependencies until we are done with everything.
3016   markInstructionForDeletion(I);
3017 }
3018
3019 namespace {
3020
3021 // This is a stack that contains both the value and dfs info of where
3022 // that value is valid.
3023 class ValueDFSStack {
3024 public:
3025   Value *back() const { return ValueStack.back(); }
3026   std::pair<int, int> dfs_back() const { return DFSStack.back(); }
3027
3028   void push_back(Value *V, int DFSIn, int DFSOut) {
3029     ValueStack.emplace_back(V);
3030     DFSStack.emplace_back(DFSIn, DFSOut);
3031   }
3032   bool empty() const { return DFSStack.empty(); }
3033   bool isInScope(int DFSIn, int DFSOut) const {
3034     if (empty())
3035       return false;
3036     return DFSIn >= DFSStack.back().first && DFSOut <= DFSStack.back().second;
3037   }
3038
3039   void popUntilDFSScope(int DFSIn, int DFSOut) {
3040
3041     // These two should always be in sync at this point.
3042     assert(ValueStack.size() == DFSStack.size() &&
3043            "Mismatch between ValueStack and DFSStack");
3044     while (
3045         !DFSStack.empty() &&
3046         !(DFSIn >= DFSStack.back().first && DFSOut <= DFSStack.back().second)) {
3047       DFSStack.pop_back();
3048       ValueStack.pop_back();
3049     }
3050   }
3051
3052 private:
3053   SmallVector<Value *, 8> ValueStack;
3054   SmallVector<std::pair<int, int>, 8> DFSStack;
3055 };
3056 }
3057
3058 bool NewGVN::eliminateInstructions(Function &F) {
3059   // This is a non-standard eliminator. The normal way to eliminate is
3060   // to walk the dominator tree in order, keeping track of available
3061   // values, and eliminating them.  However, this is mildly
3062   // pointless. It requires doing lookups on every instruction,
3063   // regardless of whether we will ever eliminate it.  For
3064   // instructions part of most singleton congruence classes, we know we
3065   // will never eliminate them.
3066
3067   // Instead, this eliminator looks at the congruence classes directly, sorts
3068   // them into a DFS ordering of the dominator tree, and then we just
3069   // perform elimination straight on the sets by walking the congruence
3070   // class member uses in order, and eliminate the ones dominated by the
3071   // last member.   This is worst case O(E log E) where E = number of
3072   // instructions in a single congruence class.  In theory, this is all
3073   // instructions.   In practice, it is much faster, as most instructions are
3074   // either in singleton congruence classes or can't possibly be eliminated
3075   // anyway (if there are no overlapping DFS ranges in class).
3076   // When we find something not dominated, it becomes the new leader
3077   // for elimination purposes.
3078   // TODO: If we wanted to be faster, We could remove any members with no
3079   // overlapping ranges while sorting, as we will never eliminate anything
3080   // with those members, as they don't dominate anything else in our set.
3081
3082   bool AnythingReplaced = false;
3083
3084   // Since we are going to walk the domtree anyway, and we can't guarantee the
3085   // DFS numbers are updated, we compute some ourselves.
3086   DT->updateDFSNumbers();
3087
3088   for (auto &B : F) {
3089     if (!ReachableBlocks.count(&B)) {
3090       for (const auto S : successors(&B)) {
3091         for (auto II = S->begin(); isa<PHINode>(II); ++II) {
3092           auto &Phi = cast<PHINode>(*II);
3093           DEBUG(dbgs() << "Replacing incoming value of " << *II << " for block "
3094                        << getBlockName(&B)
3095                        << " with undef due to it being unreachable\n");
3096           for (auto &Operand : Phi.incoming_values())
3097             if (Phi.getIncomingBlock(Operand) == &B)
3098               Operand.set(UndefValue::get(Phi.getType()));
3099         }
3100       }
3101     }
3102   }
3103
3104   // Map to store the use counts
3105   DenseMap<const Value *, unsigned int> UseCounts;
3106   for (CongruenceClass *CC : reverse(CongruenceClasses)) {
3107     // Track the equivalent store info so we can decide whether to try
3108     // dead store elimination.
3109     SmallVector<ValueDFS, 8> PossibleDeadStores;
3110     SmallPtrSet<Instruction *, 8> ProbablyDead;
3111     if (CC->isDead() || CC->empty())
3112       continue;
3113     // Everything still in the TOP class is unreachable or dead.
3114     if (CC == TOPClass) {
3115 #ifndef NDEBUG
3116       for (auto M : *CC)
3117         assert((!ReachableBlocks.count(cast<Instruction>(M)->getParent()) ||
3118                 InstructionsToErase.count(cast<Instruction>(M))) &&
3119                "Everything in TOP should be unreachable or dead at this "
3120                "point");
3121 #endif
3122       continue;
3123     }
3124
3125     assert(CC->getLeader() && "We should have had a leader");
3126     // If this is a leader that is always available, and it's a
3127     // constant or has no equivalences, just replace everything with
3128     // it. We then update the congruence class with whatever members
3129     // are left.
3130     Value *Leader =
3131         CC->getStoredValue() ? CC->getStoredValue() : CC->getLeader();
3132     if (alwaysAvailable(Leader)) {
3133       CongruenceClass::MemberSet MembersLeft;
3134       for (auto M : *CC) {
3135         Value *Member = M;
3136         // Void things have no uses we can replace.
3137         if (Member == Leader || !isa<Instruction>(Member) ||
3138             Member->getType()->isVoidTy()) {
3139           MembersLeft.insert(Member);
3140           continue;
3141         }
3142         DEBUG(dbgs() << "Found replacement " << *(Leader) << " for " << *Member
3143                      << "\n");
3144         auto *I = cast<Instruction>(Member);
3145         assert(Leader != I && "About to accidentally remove our leader");
3146         replaceInstruction(I, Leader);
3147         AnythingReplaced = true;
3148       }
3149       CC->swap(MembersLeft);
3150     } else {
3151       DEBUG(dbgs() << "Eliminating in congruence class " << CC->getID()
3152                    << "\n");
3153       // If this is a singleton, we can skip it.
3154       if (CC->size() != 1) {
3155         // This is a stack because equality replacement/etc may place
3156         // constants in the middle of the member list, and we want to use
3157         // those constant values in preference to the current leader, over
3158         // the scope of those constants.
3159         ValueDFSStack EliminationStack;
3160
3161         // Convert the members to DFS ordered sets and then merge them.
3162         SmallVector<ValueDFS, 8> DFSOrderedSet;
3163         convertClassToDFSOrdered(*CC, DFSOrderedSet, UseCounts, ProbablyDead);
3164
3165         // Sort the whole thing.
3166         std::sort(DFSOrderedSet.begin(), DFSOrderedSet.end());
3167         for (auto &VD : DFSOrderedSet) {
3168           int MemberDFSIn = VD.DFSIn;
3169           int MemberDFSOut = VD.DFSOut;
3170           Value *Def = VD.Def.getPointer();
3171           bool FromStore = VD.Def.getInt();
3172           Use *U = VD.U;
3173           // We ignore void things because we can't get a value from them.
3174           if (Def && Def->getType()->isVoidTy())
3175             continue;
3176
3177           if (EliminationStack.empty()) {
3178             DEBUG(dbgs() << "Elimination Stack is empty\n");
3179           } else {
3180             DEBUG(dbgs() << "Elimination Stack Top DFS numbers are ("
3181                          << EliminationStack.dfs_back().first << ","
3182                          << EliminationStack.dfs_back().second << ")\n");
3183           }
3184
3185           DEBUG(dbgs() << "Current DFS numbers are (" << MemberDFSIn << ","
3186                        << MemberDFSOut << ")\n");
3187           // First, we see if we are out of scope or empty.  If so,
3188           // and there equivalences, we try to replace the top of
3189           // stack with equivalences (if it's on the stack, it must
3190           // not have been eliminated yet).
3191           // Then we synchronize to our current scope, by
3192           // popping until we are back within a DFS scope that
3193           // dominates the current member.
3194           // Then, what happens depends on a few factors
3195           // If the stack is now empty, we need to push
3196           // If we have a constant or a local equivalence we want to
3197           // start using, we also push.
3198           // Otherwise, we walk along, processing members who are
3199           // dominated by this scope, and eliminate them.
3200           bool ShouldPush = Def && EliminationStack.empty();
3201           bool OutOfScope =
3202               !EliminationStack.isInScope(MemberDFSIn, MemberDFSOut);
3203
3204           if (OutOfScope || ShouldPush) {
3205             // Sync to our current scope.
3206             EliminationStack.popUntilDFSScope(MemberDFSIn, MemberDFSOut);
3207             bool ShouldPush = Def && EliminationStack.empty();
3208             if (ShouldPush) {
3209               EliminationStack.push_back(Def, MemberDFSIn, MemberDFSOut);
3210             }
3211           }
3212
3213           // Skip the Def's, we only want to eliminate on their uses.  But mark
3214           // dominated defs as dead.
3215           if (Def) {
3216             // For anything in this case, what and how we value number
3217             // guarantees that any side-effets that would have occurred (ie
3218             // throwing, etc) can be proven to either still occur (because it's
3219             // dominated by something that has the same side-effects), or never
3220             // occur.  Otherwise, we would not have been able to prove it value
3221             // equivalent to something else. For these things, we can just mark
3222             // it all dead.  Note that this is different from the "ProbablyDead"
3223             // set, which may not be dominated by anything, and thus, are only
3224             // easy to prove dead if they are also side-effect free. Note that
3225             // because stores are put in terms of the stored value, we skip
3226             // stored values here. If the stored value is really dead, it will
3227             // still be marked for deletion when we process it in its own class.
3228             if (!EliminationStack.empty() && Def != EliminationStack.back() &&
3229                 isa<Instruction>(Def) && !FromStore)
3230               markInstructionForDeletion(cast<Instruction>(Def));
3231             continue;
3232           }
3233           // At this point, we know it is a Use we are trying to possibly
3234           // replace.
3235
3236           assert(isa<Instruction>(U->get()) &&
3237                  "Current def should have been an instruction");
3238           assert(isa<Instruction>(U->getUser()) &&
3239                  "Current user should have been an instruction");
3240
3241           // If the thing we are replacing into is already marked to be dead,
3242           // this use is dead.  Note that this is true regardless of whether
3243           // we have anything dominating the use or not.  We do this here
3244           // because we are already walking all the uses anyway.
3245           Instruction *InstUse = cast<Instruction>(U->getUser());
3246           if (InstructionsToErase.count(InstUse)) {
3247             auto &UseCount = UseCounts[U->get()];
3248             if (--UseCount == 0) {
3249               ProbablyDead.insert(cast<Instruction>(U->get()));
3250             }
3251           }
3252
3253           // If we get to this point, and the stack is empty we must have a use
3254           // with nothing we can use to eliminate this use, so just skip it.
3255           if (EliminationStack.empty())
3256             continue;
3257
3258           Value *DominatingLeader = EliminationStack.back();
3259
3260           // Don't replace our existing users with ourselves.
3261           if (U->get() == DominatingLeader)
3262             continue;
3263           DEBUG(dbgs() << "Found replacement " << *DominatingLeader << " for "
3264                        << *U->get() << " in " << *(U->getUser()) << "\n");
3265
3266           // If we replaced something in an instruction, handle the patching of
3267           // metadata.  Skip this if we are replacing predicateinfo with its
3268           // original operand, as we already know we can just drop it.
3269           auto *ReplacedInst = cast<Instruction>(U->get());
3270           auto *PI = PredInfo->getPredicateInfoFor(ReplacedInst);
3271           if (!PI || DominatingLeader != PI->OriginalOp)
3272             patchReplacementInstruction(ReplacedInst, DominatingLeader);
3273           U->set(DominatingLeader);
3274           // This is now a use of the dominating leader, which means if the
3275           // dominating leader was dead, it's now live!
3276           auto &LeaderUseCount = UseCounts[DominatingLeader];
3277           // It's about to be alive again.
3278           if (LeaderUseCount == 0 && isa<Instruction>(DominatingLeader))
3279             ProbablyDead.erase(cast<Instruction>(DominatingLeader));
3280           ++LeaderUseCount;
3281           AnythingReplaced = true;
3282         }
3283       }
3284     }
3285
3286     // At this point, anything still in the ProbablyDead set is actually dead if
3287     // would be trivially dead.
3288     for (auto *I : ProbablyDead)
3289       if (wouldInstructionBeTriviallyDead(I))
3290         markInstructionForDeletion(I);
3291
3292     // Cleanup the congruence class.
3293     CongruenceClass::MemberSet MembersLeft;
3294     for (auto *Member : *CC)
3295       if (!isa<Instruction>(Member) ||
3296           !InstructionsToErase.count(cast<Instruction>(Member)))
3297         MembersLeft.insert(Member);
3298     CC->swap(MembersLeft);
3299
3300     // If we have possible dead stores to look at, try to eliminate them.
3301     if (CC->getStoreCount() > 0) {
3302       convertClassToLoadsAndStores(*CC, PossibleDeadStores);
3303       std::sort(PossibleDeadStores.begin(), PossibleDeadStores.end());
3304       ValueDFSStack EliminationStack;
3305       for (auto &VD : PossibleDeadStores) {
3306         int MemberDFSIn = VD.DFSIn;
3307         int MemberDFSOut = VD.DFSOut;
3308         Instruction *Member = cast<Instruction>(VD.Def.getPointer());
3309         if (EliminationStack.empty() ||
3310             !EliminationStack.isInScope(MemberDFSIn, MemberDFSOut)) {
3311           // Sync to our current scope.
3312           EliminationStack.popUntilDFSScope(MemberDFSIn, MemberDFSOut);
3313           if (EliminationStack.empty()) {
3314             EliminationStack.push_back(Member, MemberDFSIn, MemberDFSOut);
3315             continue;
3316           }
3317         }
3318         // We already did load elimination, so nothing to do here.
3319         if (isa<LoadInst>(Member))
3320           continue;
3321         assert(!EliminationStack.empty());
3322         Instruction *Leader = cast<Instruction>(EliminationStack.back());
3323         (void)Leader;
3324         assert(DT->dominates(Leader->getParent(), Member->getParent()));
3325         // Member is dominater by Leader, and thus dead
3326         DEBUG(dbgs() << "Marking dead store " << *Member
3327                      << " that is dominated by " << *Leader << "\n");
3328         markInstructionForDeletion(Member);
3329         CC->erase(Member);
3330         ++NumGVNDeadStores;
3331       }
3332     }
3333   }
3334
3335   return AnythingReplaced;
3336 }
3337
3338 // This function provides global ranking of operations so that we can place them
3339 // in a canonical order.  Note that rank alone is not necessarily enough for a
3340 // complete ordering, as constants all have the same rank.  However, generally,
3341 // we will simplify an operation with all constants so that it doesn't matter
3342 // what order they appear in.
3343 unsigned int NewGVN::getRank(const Value *V) const {
3344   // Prefer undef to anything else
3345   if (isa<UndefValue>(V))
3346     return 0;
3347   if (isa<Constant>(V))
3348     return 1;
3349   else if (auto *A = dyn_cast<Argument>(V))
3350     return 2 + A->getArgNo();
3351
3352   // Need to shift the instruction DFS by number of arguments + 3 to account for
3353   // the constant and argument ranking above.
3354   unsigned Result = InstrToDFSNum(V);
3355   if (Result > 0)
3356     return 3 + NumFuncArgs + Result;
3357   // Unreachable or something else, just return a really large number.
3358   return ~0;
3359 }
3360
3361 // This is a function that says whether two commutative operations should
3362 // have their order swapped when canonicalizing.
3363 bool NewGVN::shouldSwapOperands(const Value *A, const Value *B) const {
3364   // Because we only care about a total ordering, and don't rewrite expressions
3365   // in this order, we order by rank, which will give a strict weak ordering to
3366   // everything but constants, and then we order by pointer address.
3367   return std::make_pair(getRank(A), A) > std::make_pair(getRank(B), B);
3368 }
3369
3370 class NewGVNLegacyPass : public FunctionPass {
3371 public:
3372   static char ID; // Pass identification, replacement for typeid.
3373   NewGVNLegacyPass() : FunctionPass(ID) {
3374     initializeNewGVNLegacyPassPass(*PassRegistry::getPassRegistry());
3375   }
3376   bool runOnFunction(Function &F) override;
3377
3378 private:
3379   void getAnalysisUsage(AnalysisUsage &AU) const override {
3380     AU.addRequired<AssumptionCacheTracker>();
3381     AU.addRequired<DominatorTreeWrapperPass>();
3382     AU.addRequired<TargetLibraryInfoWrapperPass>();
3383     AU.addRequired<MemorySSAWrapperPass>();
3384     AU.addRequired<AAResultsWrapperPass>();
3385     AU.addPreserved<DominatorTreeWrapperPass>();
3386     AU.addPreserved<GlobalsAAWrapperPass>();
3387   }
3388 };
3389
3390 bool NewGVNLegacyPass::runOnFunction(Function &F) {
3391   if (skipFunction(F))
3392     return false;
3393   return NewGVN(F, &getAnalysis<DominatorTreeWrapperPass>().getDomTree(),
3394                 &getAnalysis<AssumptionCacheTracker>().getAssumptionCache(F),
3395                 &getAnalysis<TargetLibraryInfoWrapperPass>().getTLI(),
3396                 &getAnalysis<AAResultsWrapperPass>().getAAResults(),
3397                 &getAnalysis<MemorySSAWrapperPass>().getMSSA(),
3398                 F.getParent()->getDataLayout())
3399       .runGVN();
3400 }
3401
3402 INITIALIZE_PASS_BEGIN(NewGVNLegacyPass, "newgvn", "Global Value Numbering",
3403                       false, false)
3404 INITIALIZE_PASS_DEPENDENCY(AssumptionCacheTracker)
3405 INITIALIZE_PASS_DEPENDENCY(MemorySSAWrapperPass)
3406 INITIALIZE_PASS_DEPENDENCY(DominatorTreeWrapperPass)
3407 INITIALIZE_PASS_DEPENDENCY(TargetLibraryInfoWrapperPass)
3408 INITIALIZE_PASS_DEPENDENCY(AAResultsWrapperPass)
3409 INITIALIZE_PASS_DEPENDENCY(GlobalsAAWrapperPass)
3410 INITIALIZE_PASS_END(NewGVNLegacyPass, "newgvn", "Global Value Numbering", false,
3411                     false)
3412
3413 char NewGVNLegacyPass::ID = 0;
3414
3415 // createGVNPass - The public interface to this file.
3416 FunctionPass *llvm::createNewGVNPass() { return new NewGVNLegacyPass(); }
3417
3418 PreservedAnalyses NewGVNPass::run(Function &F, AnalysisManager<Function> &AM) {
3419   // Apparently the order in which we get these results matter for
3420   // the old GVN (see Chandler's comment in GVN.cpp). I'll keep
3421   // the same order here, just in case.
3422   auto &AC = AM.getResult<AssumptionAnalysis>(F);
3423   auto &DT = AM.getResult<DominatorTreeAnalysis>(F);
3424   auto &TLI = AM.getResult<TargetLibraryAnalysis>(F);
3425   auto &AA = AM.getResult<AAManager>(F);
3426   auto &MSSA = AM.getResult<MemorySSAAnalysis>(F).getMSSA();
3427   bool Changed =
3428       NewGVN(F, &DT, &AC, &TLI, &AA, &MSSA, F.getParent()->getDataLayout())
3429           .runGVN();
3430   if (!Changed)
3431     return PreservedAnalyses::all();
3432   PreservedAnalyses PA;
3433   PA.preserve<DominatorTreeAnalysis>();
3434   PA.preserve<GlobalsAA>();
3435   return PA;
3436 }