LLVM 20.0.0git
NewGVN.cpp
Go to the documentation of this file.
1//===- NewGVN.cpp - Global Value Numbering Pass ---------------------------===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
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 vast majority of complexity and code
34/// in this file is devoted to tracking what value numbers could change for what
35/// instructions when various things happen. The rest of the algorithm is
36/// devoted to performing symbolic evaluation, forward propagation, and
37/// simplification of operations based on the value numbers deduced so far
38///
39/// In order to make the GVN mostly-complete, we use a technique derived from
40/// "Detection of Redundant Expressions: A Complete and Polynomial-time
41/// Algorithm in SSA" by R.R. Pai. The source of incompleteness in most SSA
42/// based GVN algorithms is related to their inability to detect equivalence
43/// between phi of ops (IE phi(a+b, c+d)) and op of phis (phi(a,c) + phi(b, d)).
44/// We resolve this issue by generating the equivalent "phi of ops" form for
45/// each op of phis we see, in a way that only takes polynomial time to resolve.
46///
47/// We also do not perform elimination by using any published algorithm. All
48/// published algorithms are O(Instructions). Instead, we use a technique that
49/// is O(number of operations with the same value number), enabling us to skip
50/// trying to eliminate things that have unique value numbers.
51//
52//===----------------------------------------------------------------------===//
53
55#include "llvm/ADT/ArrayRef.h"
56#include "llvm/ADT/BitVector.h"
57#include "llvm/ADT/DenseMap.h"
59#include "llvm/ADT/DenseSet.h"
62#include "llvm/ADT/Hashing.h"
69#include "llvm/ADT/Statistic.h"
81#include "llvm/IR/Argument.h"
82#include "llvm/IR/BasicBlock.h"
83#include "llvm/IR/Constant.h"
84#include "llvm/IR/Constants.h"
85#include "llvm/IR/Dominators.h"
86#include "llvm/IR/Function.h"
87#include "llvm/IR/InstrTypes.h"
88#include "llvm/IR/Instruction.h"
92#include "llvm/IR/Type.h"
93#include "llvm/IR/Use.h"
94#include "llvm/IR/User.h"
95#include "llvm/IR/Value.h"
100#include "llvm/Support/Debug.h"
110#include <algorithm>
111#include <cassert>
112#include <cstdint>
113#include <iterator>
114#include <map>
115#include <memory>
116#include <set>
117#include <string>
118#include <tuple>
119#include <utility>
120#include <vector>
121
122using namespace llvm;
123using namespace llvm::GVNExpression;
124using namespace llvm::VNCoercion;
125using namespace llvm::PatternMatch;
126
127#define DEBUG_TYPE "newgvn"
128
129STATISTIC(NumGVNInstrDeleted, "Number of instructions deleted");
130STATISTIC(NumGVNBlocksDeleted, "Number of blocks deleted");
131STATISTIC(NumGVNOpsSimplified, "Number of Expressions simplified");
132STATISTIC(NumGVNPhisAllSame, "Number of PHIs whos arguments are all the same");
133STATISTIC(NumGVNMaxIterations,
134 "Maximum Number of iterations it took to converge GVN");
135STATISTIC(NumGVNLeaderChanges, "Number of leader changes");
136STATISTIC(NumGVNSortedLeaderChanges, "Number of sorted leader changes");
137STATISTIC(NumGVNAvoidedSortedLeaderChanges,
138 "Number of avoided sorted leader changes");
139STATISTIC(NumGVNDeadStores, "Number of redundant/dead stores eliminated");
140STATISTIC(NumGVNPHIOfOpsCreated, "Number of PHI of ops created");
141STATISTIC(NumGVNPHIOfOpsEliminations,
142 "Number of things eliminated using PHI of ops");
143DEBUG_COUNTER(VNCounter, "newgvn-vn",
144 "Controls which instructions are value numbered");
145DEBUG_COUNTER(PHIOfOpsCounter, "newgvn-phi",
146 "Controls which instructions we create phi of ops for");
147// Currently store defining access refinement is too slow due to basicaa being
148// egregiously slow. This flag lets us keep it working while we work on this
149// issue.
150static cl::opt<bool> EnableStoreRefinement("enable-store-refinement",
151 cl::init(false), cl::Hidden);
152
153/// Currently, the generation "phi of ops" can result in correctness issues.
154static cl::opt<bool> EnablePhiOfOps("enable-phi-of-ops", cl::init(true),
155 cl::Hidden);
156
157//===----------------------------------------------------------------------===//
158// GVN Pass
159//===----------------------------------------------------------------------===//
160
161// Anchor methods.
162namespace llvm {
163namespace GVNExpression {
164
165Expression::~Expression() = default;
172
173} // end namespace GVNExpression
174} // end namespace llvm
175
176namespace {
177
178// Tarjan's SCC finding algorithm with Nuutila's improvements
179// SCCIterator is actually fairly complex for the simple thing we want.
180// It also wants to hand us SCC's that are unrelated to the phi node we ask
181// about, and have us process them there or risk redoing work.
182// Graph traits over a filter iterator also doesn't work that well here.
183// This SCC finder is specialized to walk use-def chains, and only follows
184// instructions,
185// not generic values (arguments, etc).
186struct TarjanSCC {
187 TarjanSCC() : Components(1) {}
188
189 void Start(const Instruction *Start) {
190 if (Root.lookup(Start) == 0)
191 FindSCC(Start);
192 }
193
194 const SmallPtrSetImpl<const Value *> &getComponentFor(const Value *V) const {
195 unsigned ComponentID = ValueToComponent.lookup(V);
196
197 assert(ComponentID > 0 &&
198 "Asking for a component for a value we never processed");
199 return Components[ComponentID];
200 }
201
202private:
203 void FindSCC(const Instruction *I) {
204 Root[I] = ++DFSNum;
205 // Store the DFS Number we had before it possibly gets incremented.
206 unsigned int OurDFS = DFSNum;
207 for (const auto &Op : I->operands()) {
208 if (auto *InstOp = dyn_cast<Instruction>(Op)) {
209 if (Root.lookup(Op) == 0)
210 FindSCC(InstOp);
211 if (!InComponent.count(Op))
212 Root[I] = std::min(Root.lookup(I), Root.lookup(Op));
213 }
214 }
215 // See if we really were the root of a component, by seeing if we still have
216 // our DFSNumber. If we do, we are the root of the component, and we have
217 // completed a component. If we do not, we are not the root of a component,
218 // and belong on the component stack.
219 if (Root.lookup(I) == OurDFS) {
220 unsigned ComponentID = Components.size();
221 Components.resize(Components.size() + 1);
222 auto &Component = Components.back();
223 Component.insert(I);
224 LLVM_DEBUG(dbgs() << "Component root is " << *I << "\n");
225 InComponent.insert(I);
226 ValueToComponent[I] = ComponentID;
227 // Pop a component off the stack and label it.
228 while (!Stack.empty() && Root.lookup(Stack.back()) >= OurDFS) {
229 auto *Member = Stack.back();
230 LLVM_DEBUG(dbgs() << "Component member is " << *Member << "\n");
231 Component.insert(Member);
232 InComponent.insert(Member);
233 ValueToComponent[Member] = ComponentID;
234 Stack.pop_back();
235 }
236 } else {
237 // Part of a component, push to stack
238 Stack.push_back(I);
239 }
240 }
241
242 unsigned int DFSNum = 1;
246
247 // Store the components as vector of ptr sets, because we need the topo order
248 // of SCC's, but not individual member order
250
251 DenseMap<const Value *, unsigned> ValueToComponent;
252};
253
254// Congruence classes represent the set of expressions/instructions
255// that are all the same *during some scope in the function*.
256// That is, because of the way we perform equality propagation, and
257// because of memory value numbering, it is not correct to assume
258// you can willy-nilly replace any member with any other at any
259// point in the function.
260//
261// For any Value in the Member set, it is valid to replace any dominated member
262// with that Value.
263//
264// Every congruence class has a leader, and the leader is used to symbolize
265// instructions in a canonical way (IE every operand of an instruction that is a
266// member of the same congruence class will always be replaced with leader
267// during symbolization). To simplify symbolization, we keep the leader as a
268// constant if class can be proved to be a constant value. Otherwise, the
269// leader is the member of the value set with the smallest DFS number. Each
270// congruence class also has a defining expression, though the expression may be
271// null. If it exists, it can be used for forward propagation and reassociation
272// of values.
273
274// For memory, we also track a representative MemoryAccess, and a set of memory
275// members for MemoryPhis (which have no real instructions). Note that for
276// memory, it seems tempting to try to split the memory members into a
277// MemoryCongruenceClass or something. Unfortunately, this does not work
278// easily. The value numbering of a given memory expression depends on the
279// leader of the memory congruence class, and the leader of memory congruence
280// class depends on the value numbering of a given memory expression. This
281// leads to wasted propagation, and in some cases, missed optimization. For
282// example: If we had value numbered two stores together before, but now do not,
283// we move them to a new value congruence class. This in turn will move at one
284// of the memorydefs to a new memory congruence class. Which in turn, affects
285// the value numbering of the stores we just value numbered (because the memory
286// congruence class is part of the value number). So while theoretically
287// possible to split them up, it turns out to be *incredibly* complicated to get
288// it to work right, because of the interdependency. While structurally
289// slightly messier, it is algorithmically much simpler and faster to do what we
290// do here, and track them both at once in the same class.
291// Note: The default iterators for this class iterate over values
292class CongruenceClass {
293public:
294 using MemberType = Value;
295 using MemberSet = SmallPtrSet<MemberType *, 4>;
296 using MemoryMemberType = MemoryPhi;
297 using MemoryMemberSet = SmallPtrSet<const MemoryMemberType *, 2>;
298
299 explicit CongruenceClass(unsigned ID) : ID(ID) {}
300 CongruenceClass(unsigned ID, std::pair<Value *, unsigned int> Leader,
301 const Expression *E)
302 : ID(ID), RepLeader(Leader), DefiningExpr(E) {}
303
304 unsigned getID() const { return ID; }
305
306 // True if this class has no members left. This is mainly used for assertion
307 // purposes, and for skipping empty classes.
308 bool isDead() const {
309 // If it's both dead from a value perspective, and dead from a memory
310 // perspective, it's really dead.
311 return empty() && memory_empty();
312 }
313
314 // Leader functions
315 Value *getLeader() const { return RepLeader.first; }
316 void setLeader(std::pair<Value *, unsigned int> Leader) {
317 RepLeader = Leader;
318 }
319 const std::pair<Value *, unsigned int> &getNextLeader() const {
320 return NextLeader;
321 }
322 void resetNextLeader() { NextLeader = {nullptr, ~0}; }
323 bool addPossibleLeader(std::pair<Value *, unsigned int> LeaderPair) {
324 if (LeaderPair.second < RepLeader.second) {
325 NextLeader = RepLeader;
326 RepLeader = LeaderPair;
327 return true;
328 } else if (LeaderPair.second < NextLeader.second) {
329 NextLeader = LeaderPair;
330 }
331 return false;
332 }
333
334 Value *getStoredValue() const { return RepStoredValue; }
335 void setStoredValue(Value *Leader) { RepStoredValue = Leader; }
336 const MemoryAccess *getMemoryLeader() const { return RepMemoryAccess; }
337 void setMemoryLeader(const MemoryAccess *Leader) { RepMemoryAccess = Leader; }
338
339 // Forward propagation info
340 const Expression *getDefiningExpr() const { return DefiningExpr; }
341
342 // Value member set
343 bool empty() const { return Members.empty(); }
344 unsigned size() const { return Members.size(); }
345 MemberSet::const_iterator begin() const { return Members.begin(); }
346 MemberSet::const_iterator end() const { return Members.end(); }
347 void insert(MemberType *M) { Members.insert(M); }
348 void erase(MemberType *M) { Members.erase(M); }
349 void swap(MemberSet &Other) { Members.swap(Other); }
350
351 // Memory member set
352 bool memory_empty() const { return MemoryMembers.empty(); }
353 unsigned memory_size() const { return MemoryMembers.size(); }
354 MemoryMemberSet::const_iterator memory_begin() const {
355 return MemoryMembers.begin();
356 }
357 MemoryMemberSet::const_iterator memory_end() const {
358 return MemoryMembers.end();
359 }
361 return make_range(memory_begin(), memory_end());
362 }
363
364 void memory_insert(const MemoryMemberType *M) { MemoryMembers.insert(M); }
365 void memory_erase(const MemoryMemberType *M) { MemoryMembers.erase(M); }
366
367 // Store count
368 unsigned getStoreCount() const { return StoreCount; }
369 void incStoreCount() { ++StoreCount; }
370 void decStoreCount() {
371 assert(StoreCount != 0 && "Store count went negative");
372 --StoreCount;
373 }
374
375 // True if this class has no memory members.
376 bool definesNoMemory() const { return StoreCount == 0 && memory_empty(); }
377
378 // Return true if two congruence classes are equivalent to each other. This
379 // means that every field but the ID number and the dead field are equivalent.
380 bool isEquivalentTo(const CongruenceClass *Other) const {
381 if (!Other)
382 return false;
383 if (this == Other)
384 return true;
385
386 if (std::tie(StoreCount, RepLeader, RepStoredValue, RepMemoryAccess) !=
387 std::tie(Other->StoreCount, Other->RepLeader, Other->RepStoredValue,
388 Other->RepMemoryAccess))
389 return false;
390 if (DefiningExpr != Other->DefiningExpr)
391 if (!DefiningExpr || !Other->DefiningExpr ||
392 *DefiningExpr != *Other->DefiningExpr)
393 return false;
394
395 if (Members.size() != Other->Members.size())
396 return false;
397
398 return llvm::set_is_subset(Members, Other->Members);
399 }
400
401private:
402 unsigned ID;
403
404 // Representative leader and its corresponding RPO number.
405 // The leader must have the lowest RPO number.
406 std::pair<Value *, unsigned int> RepLeader = {nullptr, ~0U};
407
408 // The most dominating leader after our current leader (given by the RPO
409 // number), because the member set is not sorted and is expensive to keep
410 // sorted all the time.
411 std::pair<Value *, unsigned int> NextLeader = {nullptr, ~0U};
412
413 // If this is represented by a store, the value of the store.
414 Value *RepStoredValue = nullptr;
415
416 // If this class contains MemoryDefs or MemoryPhis, this is the leading memory
417 // access.
418 const MemoryAccess *RepMemoryAccess = nullptr;
419
420 // Defining Expression.
421 const Expression *DefiningExpr = nullptr;
422
423 // Actual members of this class.
424 MemberSet Members;
425
426 // This is the set of MemoryPhis that exist in the class. MemoryDefs and
427 // MemoryUses have real instructions representing them, so we only need to
428 // track MemoryPhis here.
429 MemoryMemberSet MemoryMembers;
430
431 // Number of stores in this congruence class.
432 // This is used so we can detect store equivalence changes properly.
433 int StoreCount = 0;
434};
435
436} // end anonymous namespace
437
438namespace llvm {
439
441 const Expression &E;
442
443 explicit ExactEqualsExpression(const Expression &E) : E(E) {}
444
445 hash_code getComputedHash() const { return E.getComputedHash(); }
446
447 bool operator==(const Expression &Other) const {
448 return E.exactlyEquals(Other);
449 }
450};
451
452template <> struct DenseMapInfo<const Expression *> {
453 static const Expression *getEmptyKey() {
454 auto Val = static_cast<uintptr_t>(-1);
455 Val <<= PointerLikeTypeTraits<const Expression *>::NumLowBitsAvailable;
456 return reinterpret_cast<const Expression *>(Val);
457 }
458
459 static const Expression *getTombstoneKey() {
460 auto Val = static_cast<uintptr_t>(~1U);
461 Val <<= PointerLikeTypeTraits<const Expression *>::NumLowBitsAvailable;
462 return reinterpret_cast<const Expression *>(Val);
463 }
464
465 static unsigned getHashValue(const Expression *E) {
466 return E->getComputedHash();
467 }
468
469 static unsigned getHashValue(const ExactEqualsExpression &E) {
470 return E.getComputedHash();
471 }
472
473 static bool isEqual(const ExactEqualsExpression &LHS, const Expression *RHS) {
474 if (RHS == getTombstoneKey() || RHS == getEmptyKey())
475 return false;
476 return LHS == *RHS;
477 }
478
479 static bool isEqual(const Expression *LHS, const Expression *RHS) {
480 if (LHS == RHS)
481 return true;
482 if (LHS == getTombstoneKey() || RHS == getTombstoneKey() ||
483 LHS == getEmptyKey() || RHS == getEmptyKey())
484 return false;
485 // Compare hashes before equality. This is *not* what the hashtable does,
486 // since it is computing it modulo the number of buckets, whereas we are
487 // using the full hash keyspace. Since the hashes are precomputed, this
488 // check is *much* faster than equality.
489 if (LHS->getComputedHash() != RHS->getComputedHash())
490 return false;
491 return *LHS == *RHS;
492 }
493};
494
495} // end namespace llvm
496
497namespace {
498
499class NewGVN {
500 Function &F;
501 DominatorTree *DT = nullptr;
502 const TargetLibraryInfo *TLI = nullptr;
503 AliasAnalysis *AA = nullptr;
504 MemorySSA *MSSA = nullptr;
505 MemorySSAWalker *MSSAWalker = nullptr;
506 AssumptionCache *AC = nullptr;
507 const DataLayout &DL;
508 std::unique_ptr<PredicateInfo> PredInfo;
509
510 // These are the only two things the create* functions should have
511 // side-effects on due to allocating memory.
512 mutable BumpPtrAllocator ExpressionAllocator;
513 mutable ArrayRecycler<Value *> ArgRecycler;
514 mutable TarjanSCC SCCFinder;
515 const SimplifyQuery SQ;
516
517 // Number of function arguments, used by ranking
518 unsigned int NumFuncArgs = 0;
519
520 // RPOOrdering of basic blocks
522
523 // Congruence class info.
524
525 // This class is called INITIAL in the paper. It is the class everything
526 // startsout in, and represents any value. Being an optimistic analysis,
527 // anything in the TOP class has the value TOP, which is indeterminate and
528 // equivalent to everything.
529 CongruenceClass *TOPClass = nullptr;
530 std::vector<CongruenceClass *> CongruenceClasses;
531 unsigned NextCongruenceNum = 0;
532
533 // Value Mappings.
536
537 // Value PHI handling, used to make equivalence between phi(op, op) and
538 // op(phi, phi).
539 // These mappings just store various data that would normally be part of the
540 // IR.
542
543 // The cached results, in general, are only valid for the specific block where
544 // they were computed. The unsigned part of the key is a unique block
545 // identifier
546 DenseMap<std::pair<const Value *, unsigned>, bool> OpSafeForPHIOfOps;
547 unsigned CacheIdx;
548
549 // Map a temporary instruction we created to a parent block.
551
552 // Map between the already in-program instructions and the temporary phis we
553 // created that they are known equivalent to.
555
556 // In order to know when we should re-process instructions that have
557 // phi-of-ops, we track the set of expressions that they needed as
558 // leaders. When we discover new leaders for those expressions, we process the
559 // associated phi-of-op instructions again in case they have changed. The
560 // other way they may change is if they had leaders, and those leaders
561 // disappear. However, at the point they have leaders, there are uses of the
562 // relevant operands in the created phi node, and so they will get reprocessed
563 // through the normal user marking we perform.
566 ExpressionToPhiOfOps;
567
568 // Map from temporary operation to MemoryAccess.
570
571 // Set of all temporary instructions we created.
572 // Note: This will include instructions that were just created during value
573 // numbering. The way to test if something is using them is to check
574 // RealToTemp.
575 DenseSet<Instruction *> AllTempInstructions;
576
577 // This is the set of instructions to revisit on a reachability change. At
578 // the end of the main iteration loop it will contain at least all the phi of
579 // ops instructions that will be changed to phis, as well as regular phis.
580 // During the iteration loop, it may contain other things, such as phi of ops
581 // instructions that used edge reachability to reach a result, and so need to
582 // be revisited when the edge changes, independent of whether the phi they
583 // depended on changes.
584 DenseMap<BasicBlock *, SparseBitVector<>> RevisitOnReachabilityChange;
585
586 // Mapping from predicate info we used to the instructions we used it with.
587 // In order to correctly ensure propagation, we must keep track of what
588 // comparisons we used, so that when the values of the comparisons change, we
589 // propagate the information to the places we used the comparison.
591 PredicateToUsers;
592
593 // the same reasoning as PredicateToUsers. When we skip MemoryAccesses for
594 // stores, we no longer can rely solely on the def-use chains of MemorySSA.
596 MemoryToUsers;
597
598 // A table storing which memorydefs/phis represent a memory state provably
599 // equivalent to another memory state.
600 // We could use the congruence class machinery, but the MemoryAccess's are
601 // abstract memory states, so they can only ever be equivalent to each other,
602 // and not to constants, etc.
604
605 // We could, if we wanted, build MemoryPhiExpressions and
606 // MemoryVariableExpressions, etc, and value number them the same way we value
607 // number phi expressions. For the moment, this seems like overkill. They
608 // can only exist in one of three states: they can be TOP (equal to
609 // everything), Equivalent to something else, or unique. Because we do not
610 // create expressions for them, we need to simulate leader change not just
611 // when they change class, but when they change state. Note: We can do the
612 // same thing for phis, and avoid having phi expressions if we wanted, We
613 // should eventually unify in one direction or the other, so this is a little
614 // bit of an experiment in which turns out easier to maintain.
615 enum MemoryPhiState { MPS_Invalid, MPS_TOP, MPS_Equivalent, MPS_Unique };
617
618 enum InstCycleState { ICS_Unknown, ICS_CycleFree, ICS_Cycle };
620
621 // Expression to class mapping.
622 using ExpressionClassMap = DenseMap<const Expression *, CongruenceClass *>;
623 ExpressionClassMap ExpressionToClass;
624
625 // We have a single expression that represents currently DeadExpressions.
626 // For dead expressions we can prove will stay dead, we mark them with
627 // DFS number zero. However, it's possible in the case of phi nodes
628 // for us to assume/prove all arguments are dead during fixpointing.
629 // We use DeadExpression for that case.
630 DeadExpression *SingletonDeadExpression = nullptr;
631
632 // Which values have changed as a result of leader changes.
633 SmallPtrSet<Value *, 8> LeaderChanges;
634
635 // Reachability info.
636 using BlockEdge = BasicBlockEdge;
637 DenseSet<BlockEdge> ReachableEdges;
639
640 // This is a bitvector because, on larger functions, we may have
641 // thousands of touched instructions at once (entire blocks,
642 // instructions with hundreds of uses, etc). Even with optimization
643 // for when we mark whole blocks as touched, when this was a
644 // SmallPtrSet or DenseSet, for some functions, we spent >20% of all
645 // the time in GVN just managing this list. The bitvector, on the
646 // other hand, efficiently supports test/set/clear of both
647 // individual and ranges, as well as "find next element" This
648 // enables us to use it as a worklist with essentially 0 cost.
649 BitVector TouchedInstructions;
650
652 mutable DenseMap<const IntrinsicInst *, const Value *> IntrinsicInstPred;
653
654#ifndef NDEBUG
655 // Debugging for how many times each block and instruction got processed.
657#endif
658
659 // DFS info.
660 // This contains a mapping from Instructions to DFS numbers.
661 // The numbering starts at 1. An instruction with DFS number zero
662 // means that the instruction is dead.
664
665 // This contains the mapping DFS numbers to instructions.
666 SmallVector<Value *, 32> DFSToInstr;
667
668 // Deletion info.
669 SmallPtrSet<Instruction *, 8> InstructionsToErase;
670
671public:
672 NewGVN(Function &F, DominatorTree *DT, AssumptionCache *AC,
674 const DataLayout &DL)
675 : F(F), DT(DT), TLI(TLI), AA(AA), MSSA(MSSA), AC(AC), DL(DL),
676 PredInfo(std::make_unique<PredicateInfo>(F, *DT, *AC)),
677 SQ(DL, TLI, DT, AC, /*CtxI=*/nullptr, /*UseInstrInfo=*/false,
678 /*CanUseUndef=*/false) {}
679
680 bool runGVN();
681
682private:
683 /// Helper struct return a Expression with an optional extra dependency.
684 struct ExprResult {
685 const Expression *Expr;
686 Value *ExtraDep;
687 const PredicateBase *PredDep;
688
689 ExprResult(const Expression *Expr, Value *ExtraDep = nullptr,
690 const PredicateBase *PredDep = nullptr)
691 : Expr(Expr), ExtraDep(ExtraDep), PredDep(PredDep) {}
692 ExprResult(const ExprResult &) = delete;
693 ExprResult(ExprResult &&Other)
694 : Expr(Other.Expr), ExtraDep(Other.ExtraDep), PredDep(Other.PredDep) {
695 Other.Expr = nullptr;
696 Other.ExtraDep = nullptr;
697 Other.PredDep = nullptr;
698 }
699 ExprResult &operator=(const ExprResult &Other) = delete;
700 ExprResult &operator=(ExprResult &&Other) = delete;
701
702 ~ExprResult() { assert(!ExtraDep && "unhandled ExtraDep"); }
703
704 operator bool() const { return Expr; }
705
706 static ExprResult none() { return {nullptr, nullptr, nullptr}; }
707 static ExprResult some(const Expression *Expr, Value *ExtraDep = nullptr) {
708 return {Expr, ExtraDep, nullptr};
709 }
710 static ExprResult some(const Expression *Expr,
711 const PredicateBase *PredDep) {
712 return {Expr, nullptr, PredDep};
713 }
714 static ExprResult some(const Expression *Expr, Value *ExtraDep,
715 const PredicateBase *PredDep) {
716 return {Expr, ExtraDep, PredDep};
717 }
718 };
719
720 // Expression handling.
721 ExprResult createExpression(Instruction *) const;
722 const Expression *createBinaryExpression(unsigned, Type *, Value *, Value *,
723 Instruction *) const;
724
725 // Our canonical form for phi arguments is a pair of incoming value, incoming
726 // basic block.
727 using ValPair = std::pair<Value *, BasicBlock *>;
728
729 PHIExpression *createPHIExpression(ArrayRef<ValPair>, const Instruction *,
730 BasicBlock *, bool &HasBackEdge,
731 bool &OriginalOpsConstant) const;
732 const DeadExpression *createDeadExpression() const;
733 const VariableExpression *createVariableExpression(Value *) const;
734 const ConstantExpression *createConstantExpression(Constant *) const;
735 const Expression *createVariableOrConstant(Value *V) const;
736 const UnknownExpression *createUnknownExpression(Instruction *) const;
737 const StoreExpression *createStoreExpression(StoreInst *,
738 const MemoryAccess *) const;
739 LoadExpression *createLoadExpression(Type *, Value *, LoadInst *,
740 const MemoryAccess *) const;
741 const CallExpression *createCallExpression(CallInst *,
742 const MemoryAccess *) const;
744 createAggregateValueExpression(Instruction *) const;
745 bool setBasicExpressionInfo(Instruction *, BasicExpression *) const;
746
747 // Congruence class handling.
748 CongruenceClass *createCongruenceClass(Value *Leader, const Expression *E) {
749 // Set RPO to 0 for values that are always available (constants and function
750 // args). These should always be made leader.
751 unsigned LeaderDFS = 0;
752
753 // If Leader is not specified, either we have a memory class or the leader
754 // will be set later. Otherwise, if Leader is an Instruction, set LeaderDFS
755 // to its RPO number.
756 if (!Leader)
757 LeaderDFS = ~0;
758 else if (auto *I = dyn_cast<Instruction>(Leader))
759 LeaderDFS = InstrToDFSNum(I);
760 auto *result =
761 new CongruenceClass(NextCongruenceNum++, {Leader, LeaderDFS}, E);
762 CongruenceClasses.emplace_back(result);
763 return result;
764 }
765
766 CongruenceClass *createMemoryClass(MemoryAccess *MA) {
767 auto *CC = createCongruenceClass(nullptr, nullptr);
768 CC->setMemoryLeader(MA);
769 return CC;
770 }
771
772 CongruenceClass *ensureLeaderOfMemoryClass(MemoryAccess *MA) {
773 auto *CC = getMemoryClass(MA);
774 if (CC->getMemoryLeader() != MA)
775 CC = createMemoryClass(MA);
776 return CC;
777 }
778
779 CongruenceClass *createSingletonCongruenceClass(Value *Member) {
780 CongruenceClass *CClass = createCongruenceClass(Member, nullptr);
781 CClass->insert(Member);
782 ValueToClass[Member] = CClass;
783 return CClass;
784 }
785
786 void initializeCongruenceClasses(Function &F);
787 const Expression *makePossiblePHIOfOps(Instruction *,
789 Value *findLeaderForInst(Instruction *ValueOp,
791 MemoryAccess *MemAccess, Instruction *OrigInst,
792 BasicBlock *PredBB);
793 bool OpIsSafeForPHIOfOps(Value *Op, const BasicBlock *PHIBlock,
795 void addPhiOfOps(PHINode *Op, BasicBlock *BB, Instruction *ExistingValue);
796 void removePhiOfOps(Instruction *I, PHINode *PHITemp);
797
798 // Value number an Instruction or MemoryPhi.
799 void valueNumberMemoryPhi(MemoryPhi *);
800 void valueNumberInstruction(Instruction *);
801
802 // Symbolic evaluation.
803 ExprResult checkExprResults(Expression *, Instruction *, Value *) const;
804 ExprResult performSymbolicEvaluation(Instruction *,
806 const Expression *performSymbolicLoadCoercion(Type *, Value *, LoadInst *,
807 Instruction *,
808 MemoryAccess *) const;
809 const Expression *performSymbolicLoadEvaluation(Instruction *) const;
810 const Expression *performSymbolicStoreEvaluation(Instruction *) const;
811 ExprResult performSymbolicCallEvaluation(Instruction *) const;
812 void sortPHIOps(MutableArrayRef<ValPair> Ops) const;
813 const Expression *performSymbolicPHIEvaluation(ArrayRef<ValPair>,
814 Instruction *I,
815 BasicBlock *PHIBlock) const;
816 const Expression *performSymbolicAggrValueEvaluation(Instruction *) const;
817 ExprResult performSymbolicCmpEvaluation(Instruction *) const;
818 ExprResult performSymbolicPredicateInfoEvaluation(IntrinsicInst *) const;
819
820 // Congruence finding.
821 bool someEquivalentDominates(const Instruction *, const Instruction *) const;
822 Value *lookupOperandLeader(Value *) const;
823 CongruenceClass *getClassForExpression(const Expression *E) const;
824 void performCongruenceFinding(Instruction *, const Expression *);
825 void moveValueToNewCongruenceClass(Instruction *, const Expression *,
826 CongruenceClass *, CongruenceClass *);
827 void moveMemoryToNewCongruenceClass(Instruction *, MemoryAccess *,
828 CongruenceClass *, CongruenceClass *);
829 Value *getNextValueLeader(CongruenceClass *) const;
830 const MemoryAccess *getNextMemoryLeader(CongruenceClass *) const;
831 bool setMemoryClass(const MemoryAccess *From, CongruenceClass *To);
832 CongruenceClass *getMemoryClass(const MemoryAccess *MA) const;
833 const MemoryAccess *lookupMemoryLeader(const MemoryAccess *) const;
834 bool isMemoryAccessTOP(const MemoryAccess *) const;
835
836 // Ranking
837 unsigned int getRank(const Value *) const;
838 bool shouldSwapOperands(const Value *, const Value *) const;
839 bool shouldSwapOperandsForIntrinsic(const Value *, const Value *,
840 const IntrinsicInst *I) const;
841
842 // Reachability handling.
843 void updateReachableEdge(BasicBlock *, BasicBlock *);
844 void processOutgoingEdges(Instruction *, BasicBlock *);
845 Value *findConditionEquivalence(Value *) const;
846
847 // Elimination.
848 struct ValueDFS;
849 void convertClassToDFSOrdered(const CongruenceClass &,
853 void convertClassToLoadsAndStores(const CongruenceClass &,
855
856 bool eliminateInstructions(Function &);
857 void replaceInstruction(Instruction *, Value *);
858 void markInstructionForDeletion(Instruction *);
859 void deleteInstructionsInBlock(BasicBlock *);
860 Value *findPHIOfOpsLeader(const Expression *, const Instruction *,
861 const BasicBlock *) const;
862
863 // Various instruction touch utilities
864 template <typename Map, typename KeyType>
865 void touchAndErase(Map &, const KeyType &);
866 void markUsersTouched(Value *);
867 void markMemoryUsersTouched(const MemoryAccess *);
868 void markMemoryDefTouched(const MemoryAccess *);
869 void markPredicateUsersTouched(Instruction *);
870 void markValueLeaderChangeTouched(CongruenceClass *CC);
871 void markMemoryLeaderChangeTouched(CongruenceClass *CC);
872 void markPhiOfOpsChanged(const Expression *E);
873 void addMemoryUsers(const MemoryAccess *To, MemoryAccess *U) const;
874 void addAdditionalUsers(Value *To, Value *User) const;
875 void addAdditionalUsers(ExprResult &Res, Instruction *User) const;
876
877 // Main loop of value numbering
878 void iterateTouchedInstructions();
879
880 // Utilities.
881 void cleanupTables();
882 std::pair<unsigned, unsigned> assignDFSNumbers(BasicBlock *, unsigned);
883 void updateProcessedCount(const Value *V);
884 void verifyMemoryCongruency() const;
885 void verifyIterationSettled(Function &F);
886 void verifyStoreExpressions() const;
887 bool singleReachablePHIPath(SmallPtrSet<const MemoryAccess *, 8> &,
888 const MemoryAccess *, const MemoryAccess *) const;
889 BasicBlock *getBlockForValue(Value *V) const;
890 void deleteExpression(const Expression *E) const;
891 MemoryUseOrDef *getMemoryAccess(const Instruction *) const;
892 MemoryPhi *getMemoryAccess(const BasicBlock *) const;
893 template <class T, class Range> T *getMinDFSOfRange(const Range &) const;
894
895 unsigned InstrToDFSNum(const Value *V) const {
896 assert(isa<Instruction>(V) && "This should not be used for MemoryAccesses");
897 return InstrDFS.lookup(V);
898 }
899
900 unsigned InstrToDFSNum(const MemoryAccess *MA) const {
901 return MemoryToDFSNum(MA);
902 }
903
904 Value *InstrFromDFSNum(unsigned DFSNum) { return DFSToInstr[DFSNum]; }
905
906 // Given a MemoryAccess, return the relevant instruction DFS number. Note:
907 // This deliberately takes a value so it can be used with Use's, which will
908 // auto-convert to Value's but not to MemoryAccess's.
909 unsigned MemoryToDFSNum(const Value *MA) const {
910 assert(isa<MemoryAccess>(MA) &&
911 "This should not be used with instructions");
912 return isa<MemoryUseOrDef>(MA)
913 ? InstrToDFSNum(cast<MemoryUseOrDef>(MA)->getMemoryInst())
914 : InstrDFS.lookup(MA);
915 }
916
917 bool isCycleFree(const Instruction *) const;
918 bool isBackedge(BasicBlock *From, BasicBlock *To) const;
919
920 // Debug counter info. When verifying, we have to reset the value numbering
921 // debug counter to the same state it started in to get the same results.
922 DebugCounter::CounterState StartingVNCounter;
923};
924
925} // end anonymous namespace
926
927template <typename T>
928static bool equalsLoadStoreHelper(const T &LHS, const Expression &RHS) {
929 if (!isa<LoadExpression>(RHS) && !isa<StoreExpression>(RHS))
930 return false;
931 return LHS.MemoryExpression::equals(RHS);
932}
933
935 return equalsLoadStoreHelper(*this, Other);
936}
937
939 if (!equalsLoadStoreHelper(*this, Other))
940 return false;
941 // Make sure that store vs store includes the value operand.
942 if (const auto *S = dyn_cast<StoreExpression>(&Other))
943 if (getStoredValue() != S->getStoredValue())
944 return false;
945 return true;
946}
947
950 return false;
951
952 if (auto *RHS = dyn_cast<CallExpression>(&Other))
953 return Call->getAttributes()
954 .intersectWith(Call->getContext(), RHS->Call->getAttributes())
955 .has_value();
956
957 return false;
958}
959
960// Determine if the edge From->To is a backedge
961bool NewGVN::isBackedge(BasicBlock *From, BasicBlock *To) const {
962 return From == To ||
963 RPOOrdering.lookup(DT->getNode(From)) >=
964 RPOOrdering.lookup(DT->getNode(To));
965}
966
967#ifndef NDEBUG
968static std::string getBlockName(const BasicBlock *B) {
970}
971#endif
972
973// Get a MemoryAccess for an instruction, fake or real.
974MemoryUseOrDef *NewGVN::getMemoryAccess(const Instruction *I) const {
975 auto *Result = MSSA->getMemoryAccess(I);
976 return Result ? Result : TempToMemory.lookup(I);
977}
978
979// Get a MemoryPhi for a basic block. These are all real.
980MemoryPhi *NewGVN::getMemoryAccess(const BasicBlock *BB) const {
981 return MSSA->getMemoryAccess(BB);
982}
983
984// Get the basic block from an instruction/memory value.
985BasicBlock *NewGVN::getBlockForValue(Value *V) const {
986 if (auto *I = dyn_cast<Instruction>(V)) {
987 auto *Parent = I->getParent();
988 if (Parent)
989 return Parent;
990 Parent = TempToBlock.lookup(V);
991 assert(Parent && "Every fake instruction should have a block");
992 return Parent;
993 }
994
995 auto *MP = dyn_cast<MemoryPhi>(V);
996 assert(MP && "Should have been an instruction or a MemoryPhi");
997 return MP->getBlock();
998}
999
1000// Delete a definitely dead expression, so it can be reused by the expression
1001// allocator. Some of these are not in creation functions, so we have to accept
1002// const versions.
1003void NewGVN::deleteExpression(const Expression *E) const {
1004 assert(isa<BasicExpression>(E));
1005 auto *BE = cast<BasicExpression>(E);
1006 const_cast<BasicExpression *>(BE)->deallocateOperands(ArgRecycler);
1007 ExpressionAllocator.Deallocate(E);
1008}
1009
1010// If V is a predicateinfo copy, get the thing it is a copy of.
1011static Value *getCopyOf(const Value *V) {
1012 if (auto *II = dyn_cast<IntrinsicInst>(V))
1013 if (II->getIntrinsicID() == Intrinsic::ssa_copy)
1014 return II->getOperand(0);
1015 return nullptr;
1016}
1017
1018// Return true if V is really PN, even accounting for predicateinfo copies.
1019static bool isCopyOfPHI(const Value *V, const PHINode *PN) {
1020 return V == PN || getCopyOf(V) == PN;
1021}
1022
1023static bool isCopyOfAPHI(const Value *V) {
1024 auto *CO = getCopyOf(V);
1025 return CO && isa<PHINode>(CO);
1026}
1027
1028// Sort PHI Operands into a canonical order. What we use here is an RPO
1029// order. The BlockInstRange numbers are generated in an RPO walk of the basic
1030// blocks.
1031void NewGVN::sortPHIOps(MutableArrayRef<ValPair> Ops) const {
1032 llvm::sort(Ops, [&](const ValPair &P1, const ValPair &P2) {
1033 return BlockInstRange.lookup(P1.second).first <
1034 BlockInstRange.lookup(P2.second).first;
1035 });
1036}
1037
1038// Return true if V is a value that will always be available (IE can
1039// be placed anywhere) in the function. We don't do globals here
1040// because they are often worse to put in place.
1041static bool alwaysAvailable(Value *V) {
1042 return isa<Constant>(V) || isa<Argument>(V);
1043}
1044
1045// Create a PHIExpression from an array of {incoming edge, value} pairs. I is
1046// the original instruction we are creating a PHIExpression for (but may not be
1047// a phi node). We require, as an invariant, that all the PHIOperands in the
1048// same block are sorted the same way. sortPHIOps will sort them into a
1049// canonical order.
1050PHIExpression *NewGVN::createPHIExpression(ArrayRef<ValPair> PHIOperands,
1051 const Instruction *I,
1052 BasicBlock *PHIBlock,
1053 bool &HasBackedge,
1054 bool &OriginalOpsConstant) const {
1055 unsigned NumOps = PHIOperands.size();
1056 auto *E = new (ExpressionAllocator) PHIExpression(NumOps, PHIBlock);
1057
1058 E->allocateOperands(ArgRecycler, ExpressionAllocator);
1059 E->setType(PHIOperands.begin()->first->getType());
1060 E->setOpcode(Instruction::PHI);
1061
1062 // Filter out unreachable phi operands.
1063 auto Filtered = make_filter_range(PHIOperands, [&](const ValPair &P) {
1064 auto *BB = P.second;
1065 if (auto *PHIOp = dyn_cast<PHINode>(I))
1066 if (isCopyOfPHI(P.first, PHIOp))
1067 return false;
1068 if (!ReachableEdges.count({BB, PHIBlock}))
1069 return false;
1070 // Things in TOPClass are equivalent to everything.
1071 if (ValueToClass.lookup(P.first) == TOPClass)
1072 return false;
1073 OriginalOpsConstant = OriginalOpsConstant && isa<Constant>(P.first);
1074 HasBackedge = HasBackedge || isBackedge(BB, PHIBlock);
1075 return lookupOperandLeader(P.first) != I;
1076 });
1077 std::transform(Filtered.begin(), Filtered.end(), op_inserter(E),
1078 [&](const ValPair &P) -> Value * {
1079 return lookupOperandLeader(P.first);
1080 });
1081 return E;
1082}
1083
1084// Set basic expression info (Arguments, type, opcode) for Expression
1085// E from Instruction I in block B.
1086bool NewGVN::setBasicExpressionInfo(Instruction *I, BasicExpression *E) const {
1087 bool AllConstant = true;
1088 if (auto *GEP = dyn_cast<GetElementPtrInst>(I))
1089 E->setType(GEP->getSourceElementType());
1090 else
1091 E->setType(I->getType());
1092 E->setOpcode(I->getOpcode());
1093 E->allocateOperands(ArgRecycler, ExpressionAllocator);
1094
1095 // Transform the operand array into an operand leader array, and keep track of
1096 // whether all members are constant.
1097 std::transform(I->op_begin(), I->op_end(), op_inserter(E), [&](Value *O) {
1098 auto Operand = lookupOperandLeader(O);
1099 AllConstant = AllConstant && isa<Constant>(Operand);
1100 return Operand;
1101 });
1102
1103 return AllConstant;
1104}
1105
1106const Expression *NewGVN::createBinaryExpression(unsigned Opcode, Type *T,
1107 Value *Arg1, Value *Arg2,
1108 Instruction *I) const {
1109 auto *E = new (ExpressionAllocator) BasicExpression(2);
1110 // TODO: we need to remove context instruction after Value Tracking
1111 // can run without context instruction
1112 const SimplifyQuery Q = SQ.getWithInstruction(I);
1113
1114 E->setType(T);
1115 E->setOpcode(Opcode);
1116 E->allocateOperands(ArgRecycler, ExpressionAllocator);
1117 if (Instruction::isCommutative(Opcode)) {
1118 // Ensure that commutative instructions that only differ by a permutation
1119 // of their operands get the same value number by sorting the operand value
1120 // numbers. Since all commutative instructions have two operands it is more
1121 // efficient to sort by hand rather than using, say, std::sort.
1122 if (shouldSwapOperands(Arg1, Arg2))
1123 std::swap(Arg1, Arg2);
1124 }
1125 E->op_push_back(lookupOperandLeader(Arg1));
1126 E->op_push_back(lookupOperandLeader(Arg2));
1127
1128 Value *V = simplifyBinOp(Opcode, E->getOperand(0), E->getOperand(1), Q);
1129 if (auto Simplified = checkExprResults(E, I, V)) {
1130 addAdditionalUsers(Simplified, I);
1131 return Simplified.Expr;
1132 }
1133 return E;
1134}
1135
1136// Take a Value returned by simplification of Expression E/Instruction
1137// I, and see if it resulted in a simpler expression. If so, return
1138// that expression.
1139NewGVN::ExprResult NewGVN::checkExprResults(Expression *E, Instruction *I,
1140 Value *V) const {
1141 if (!V)
1142 return ExprResult::none();
1143
1144 if (auto *C = dyn_cast<Constant>(V)) {
1145 if (I)
1146 LLVM_DEBUG(dbgs() << "Simplified " << *I << " to "
1147 << " constant " << *C << "\n");
1148 NumGVNOpsSimplified++;
1149 assert(isa<BasicExpression>(E) &&
1150 "We should always have had a basic expression here");
1151 deleteExpression(E);
1152 return ExprResult::some(createConstantExpression(C));
1153 } else if (isa<Argument>(V) || isa<GlobalVariable>(V)) {
1154 if (I)
1155 LLVM_DEBUG(dbgs() << "Simplified " << *I << " to "
1156 << " variable " << *V << "\n");
1157 deleteExpression(E);
1158 return ExprResult::some(createVariableExpression(V));
1159 }
1160
1161 CongruenceClass *CC = ValueToClass.lookup(V);
1162 if (CC) {
1163 if (CC->getLeader() && CC->getLeader() != I) {
1164 return ExprResult::some(createVariableOrConstant(CC->getLeader()), V);
1165 }
1166 if (CC->getDefiningExpr()) {
1167 if (I)
1168 LLVM_DEBUG(dbgs() << "Simplified " << *I << " to "
1169 << " expression " << *CC->getDefiningExpr() << "\n");
1170 NumGVNOpsSimplified++;
1171 deleteExpression(E);
1172 return ExprResult::some(CC->getDefiningExpr(), V);
1173 }
1174 }
1175
1176 return ExprResult::none();
1177}
1178
1179// Create a value expression from the instruction I, replacing operands with
1180// their leaders.
1181
1182NewGVN::ExprResult NewGVN::createExpression(Instruction *I) const {
1183 auto *E = new (ExpressionAllocator) BasicExpression(I->getNumOperands());
1184 // TODO: we need to remove context instruction after Value Tracking
1185 // can run without context instruction
1186 const SimplifyQuery Q = SQ.getWithInstruction(I);
1187
1188 bool AllConstant = setBasicExpressionInfo(I, E);
1189
1190 if (I->isCommutative()) {
1191 // Ensure that commutative instructions that only differ by a permutation
1192 // of their operands get the same value number by sorting the operand value
1193 // numbers. Since all commutative instructions have two operands it is more
1194 // efficient to sort by hand rather than using, say, std::sort.
1195 assert(I->getNumOperands() == 2 && "Unsupported commutative instruction!");
1196 if (shouldSwapOperands(E->getOperand(0), E->getOperand(1)))
1197 E->swapOperands(0, 1);
1198 }
1199 // Perform simplification.
1200 if (auto *CI = dyn_cast<CmpInst>(I)) {
1201 // Sort the operand value numbers so x<y and y>x get the same value
1202 // number.
1203 CmpInst::Predicate Predicate = CI->getPredicate();
1204 if (shouldSwapOperands(E->getOperand(0), E->getOperand(1))) {
1205 E->swapOperands(0, 1);
1207 }
1208 E->setOpcode((CI->getOpcode() << 8) | Predicate);
1209 // TODO: 25% of our time is spent in simplifyCmpInst with pointer operands
1210 assert(I->getOperand(0)->getType() == I->getOperand(1)->getType() &&
1211 "Wrong types on cmp instruction");
1212 assert((E->getOperand(0)->getType() == I->getOperand(0)->getType() &&
1213 E->getOperand(1)->getType() == I->getOperand(1)->getType()));
1214 Value *V =
1215 simplifyCmpInst(Predicate, E->getOperand(0), E->getOperand(1), Q);
1216 if (auto Simplified = checkExprResults(E, I, V))
1217 return Simplified;
1218 } else if (isa<SelectInst>(I)) {
1219 if (isa<Constant>(E->getOperand(0)) ||
1220 E->getOperand(1) == E->getOperand(2)) {
1221 assert(E->getOperand(1)->getType() == I->getOperand(1)->getType() &&
1222 E->getOperand(2)->getType() == I->getOperand(2)->getType());
1223 Value *V = simplifySelectInst(E->getOperand(0), E->getOperand(1),
1224 E->getOperand(2), Q);
1225 if (auto Simplified = checkExprResults(E, I, V))
1226 return Simplified;
1227 }
1228 } else if (I->isBinaryOp()) {
1229 Value *V =
1230 simplifyBinOp(E->getOpcode(), E->getOperand(0), E->getOperand(1), Q);
1231 if (auto Simplified = checkExprResults(E, I, V))
1232 return Simplified;
1233 } else if (auto *CI = dyn_cast<CastInst>(I)) {
1234 Value *V =
1235 simplifyCastInst(CI->getOpcode(), E->getOperand(0), CI->getType(), Q);
1236 if (auto Simplified = checkExprResults(E, I, V))
1237 return Simplified;
1238 } else if (auto *GEPI = dyn_cast<GetElementPtrInst>(I)) {
1239 Value *V = simplifyGEPInst(GEPI->getSourceElementType(), *E->op_begin(),
1240 ArrayRef(std::next(E->op_begin()), E->op_end()),
1241 GEPI->getNoWrapFlags(), Q);
1242 if (auto Simplified = checkExprResults(E, I, V))
1243 return Simplified;
1244 } else if (AllConstant) {
1245 // We don't bother trying to simplify unless all of the operands
1246 // were constant.
1247 // TODO: There are a lot of Simplify*'s we could call here, if we
1248 // wanted to. The original motivating case for this code was a
1249 // zext i1 false to i8, which we don't have an interface to
1250 // simplify (IE there is no SimplifyZExt).
1251
1253 for (Value *Arg : E->operands())
1254 C.emplace_back(cast<Constant>(Arg));
1255
1256 if (Value *V = ConstantFoldInstOperands(I, C, DL, TLI))
1257 if (auto Simplified = checkExprResults(E, I, V))
1258 return Simplified;
1259 }
1260 return ExprResult::some(E);
1261}
1262
1264NewGVN::createAggregateValueExpression(Instruction *I) const {
1265 if (auto *II = dyn_cast<InsertValueInst>(I)) {
1266 auto *E = new (ExpressionAllocator)
1267 AggregateValueExpression(I->getNumOperands(), II->getNumIndices());
1268 setBasicExpressionInfo(I, E);
1269 E->allocateIntOperands(ExpressionAllocator);
1270 std::copy(II->idx_begin(), II->idx_end(), int_op_inserter(E));
1271 return E;
1272 } else if (auto *EI = dyn_cast<ExtractValueInst>(I)) {
1273 auto *E = new (ExpressionAllocator)
1274 AggregateValueExpression(I->getNumOperands(), EI->getNumIndices());
1275 setBasicExpressionInfo(EI, E);
1276 E->allocateIntOperands(ExpressionAllocator);
1277 std::copy(EI->idx_begin(), EI->idx_end(), int_op_inserter(E));
1278 return E;
1279 }
1280 llvm_unreachable("Unhandled type of aggregate value operation");
1281}
1282
1283const DeadExpression *NewGVN::createDeadExpression() const {
1284 // DeadExpression has no arguments and all DeadExpression's are the same,
1285 // so we only need one of them.
1286 return SingletonDeadExpression;
1287}
1288
1289const VariableExpression *NewGVN::createVariableExpression(Value *V) const {
1290 auto *E = new (ExpressionAllocator) VariableExpression(V);
1291 E->setOpcode(V->getValueID());
1292 return E;
1293}
1294
1295const Expression *NewGVN::createVariableOrConstant(Value *V) const {
1296 if (auto *C = dyn_cast<Constant>(V))
1297 return createConstantExpression(C);
1298 return createVariableExpression(V);
1299}
1300
1301const ConstantExpression *NewGVN::createConstantExpression(Constant *C) const {
1302 auto *E = new (ExpressionAllocator) ConstantExpression(C);
1303 E->setOpcode(C->getValueID());
1304 return E;
1305}
1306
1307const UnknownExpression *NewGVN::createUnknownExpression(Instruction *I) const {
1308 auto *E = new (ExpressionAllocator) UnknownExpression(I);
1309 E->setOpcode(I->getOpcode());
1310 return E;
1311}
1312
1313const CallExpression *
1314NewGVN::createCallExpression(CallInst *CI, const MemoryAccess *MA) const {
1315 // FIXME: Add operand bundles for calls.
1316 auto *E =
1317 new (ExpressionAllocator) CallExpression(CI->getNumOperands(), CI, MA);
1318 setBasicExpressionInfo(CI, E);
1319 if (CI->isCommutative()) {
1320 // Ensure that commutative intrinsics that only differ by a permutation
1321 // of their operands get the same value number by sorting the operand value
1322 // numbers.
1323 assert(CI->getNumOperands() >= 2 && "Unsupported commutative intrinsic!");
1324 if (shouldSwapOperands(E->getOperand(0), E->getOperand(1)))
1325 E->swapOperands(0, 1);
1326 }
1327 return E;
1328}
1329
1330// Return true if some equivalent of instruction Inst dominates instruction U.
1331bool NewGVN::someEquivalentDominates(const Instruction *Inst,
1332 const Instruction *U) const {
1333 auto *CC = ValueToClass.lookup(Inst);
1334 // This must be an instruction because we are only called from phi nodes
1335 // in the case that the value it needs to check against is an instruction.
1336
1337 // The most likely candidates for dominance are the leader and the next leader.
1338 // The leader or nextleader will dominate in all cases where there is an
1339 // equivalent that is higher up in the dom tree.
1340 // We can't *only* check them, however, because the
1341 // dominator tree could have an infinite number of non-dominating siblings
1342 // with instructions that are in the right congruence class.
1343 // A
1344 // B C D E F G
1345 // |
1346 // H
1347 // Instruction U could be in H, with equivalents in every other sibling.
1348 // Depending on the rpo order picked, the leader could be the equivalent in
1349 // any of these siblings.
1350 if (!CC)
1351 return false;
1352 if (alwaysAvailable(CC->getLeader()))
1353 return true;
1354 if (DT->dominates(cast<Instruction>(CC->getLeader()), U))
1355 return true;
1356 if (CC->getNextLeader().first &&
1357 DT->dominates(cast<Instruction>(CC->getNextLeader().first), U))
1358 return true;
1359 return llvm::any_of(*CC, [&](const Value *Member) {
1360 return Member != CC->getLeader() &&
1361 DT->dominates(cast<Instruction>(Member), U);
1362 });
1363}
1364
1365// See if we have a congruence class and leader for this operand, and if so,
1366// return it. Otherwise, return the operand itself.
1367Value *NewGVN::lookupOperandLeader(Value *V) const {
1368 CongruenceClass *CC = ValueToClass.lookup(V);
1369 if (CC) {
1370 // Everything in TOP is represented by poison, as it can be any value.
1371 // We do have to make sure we get the type right though, so we can't set the
1372 // RepLeader to poison.
1373 if (CC == TOPClass)
1374 return PoisonValue::get(V->getType());
1375 return CC->getStoredValue() ? CC->getStoredValue() : CC->getLeader();
1376 }
1377
1378 return V;
1379}
1380
1381const MemoryAccess *NewGVN::lookupMemoryLeader(const MemoryAccess *MA) const {
1382 auto *CC = getMemoryClass(MA);
1383 assert(CC->getMemoryLeader() &&
1384 "Every MemoryAccess should be mapped to a congruence class with a "
1385 "representative memory access");
1386 return CC->getMemoryLeader();
1387}
1388
1389// Return true if the MemoryAccess is really equivalent to everything. This is
1390// equivalent to the lattice value "TOP" in most lattices. This is the initial
1391// state of all MemoryAccesses.
1392bool NewGVN::isMemoryAccessTOP(const MemoryAccess *MA) const {
1393 return getMemoryClass(MA) == TOPClass;
1394}
1395
1396LoadExpression *NewGVN::createLoadExpression(Type *LoadType, Value *PointerOp,
1397 LoadInst *LI,
1398 const MemoryAccess *MA) const {
1399 auto *E =
1400 new (ExpressionAllocator) LoadExpression(1, LI, lookupMemoryLeader(MA));
1401 E->allocateOperands(ArgRecycler, ExpressionAllocator);
1402 E->setType(LoadType);
1403
1404 // Give store and loads same opcode so they value number together.
1405 E->setOpcode(0);
1406 E->op_push_back(PointerOp);
1407
1408 // TODO: Value number heap versions. We may be able to discover
1409 // things alias analysis can't on it's own (IE that a store and a
1410 // load have the same value, and thus, it isn't clobbering the load).
1411 return E;
1412}
1413
1414const StoreExpression *
1415NewGVN::createStoreExpression(StoreInst *SI, const MemoryAccess *MA) const {
1416 auto *StoredValueLeader = lookupOperandLeader(SI->getValueOperand());
1417 auto *E = new (ExpressionAllocator)
1418 StoreExpression(SI->getNumOperands(), SI, StoredValueLeader, MA);
1419 E->allocateOperands(ArgRecycler, ExpressionAllocator);
1420 E->setType(SI->getValueOperand()->getType());
1421
1422 // Give store and loads same opcode so they value number together.
1423 E->setOpcode(0);
1424 E->op_push_back(lookupOperandLeader(SI->getPointerOperand()));
1425
1426 // TODO: Value number heap versions. We may be able to discover
1427 // things alias analysis can't on it's own (IE that a store and a
1428 // load have the same value, and thus, it isn't clobbering the load).
1429 return E;
1430}
1431
1432const Expression *NewGVN::performSymbolicStoreEvaluation(Instruction *I) const {
1433 // Unlike loads, we never try to eliminate stores, so we do not check if they
1434 // are simple and avoid value numbering them.
1435 auto *SI = cast<StoreInst>(I);
1436 auto *StoreAccess = getMemoryAccess(SI);
1437 // Get the expression, if any, for the RHS of the MemoryDef.
1438 const MemoryAccess *StoreRHS = StoreAccess->getDefiningAccess();
1440 StoreRHS = MSSAWalker->getClobberingMemoryAccess(StoreAccess);
1441 // If we bypassed the use-def chains, make sure we add a use.
1442 StoreRHS = lookupMemoryLeader(StoreRHS);
1443 if (StoreRHS != StoreAccess->getDefiningAccess())
1444 addMemoryUsers(StoreRHS, StoreAccess);
1445 // If we are defined by ourselves, use the live on entry def.
1446 if (StoreRHS == StoreAccess)
1447 StoreRHS = MSSA->getLiveOnEntryDef();
1448
1449 if (SI->isSimple()) {
1450 // See if we are defined by a previous store expression, it already has a
1451 // value, and it's the same value as our current store. FIXME: Right now, we
1452 // only do this for simple stores, we should expand to cover memcpys, etc.
1453 const auto *LastStore = createStoreExpression(SI, StoreRHS);
1454 const auto *LastCC = ExpressionToClass.lookup(LastStore);
1455 // We really want to check whether the expression we matched was a store. No
1456 // easy way to do that. However, we can check that the class we found has a
1457 // store, which, assuming the value numbering state is not corrupt, is
1458 // sufficient, because we must also be equivalent to that store's expression
1459 // for it to be in the same class as the load.
1460 if (LastCC && LastCC->getStoredValue() == LastStore->getStoredValue())
1461 return LastStore;
1462 // Also check if our value operand is defined by a load of the same memory
1463 // location, and the memory state is the same as it was then (otherwise, it
1464 // could have been overwritten later. See test32 in
1465 // transforms/DeadStoreElimination/simple.ll).
1466 if (auto *LI = dyn_cast<LoadInst>(LastStore->getStoredValue()))
1467 if ((lookupOperandLeader(LI->getPointerOperand()) ==
1468 LastStore->getOperand(0)) &&
1469 (lookupMemoryLeader(getMemoryAccess(LI)->getDefiningAccess()) ==
1470 StoreRHS))
1471 return LastStore;
1472 deleteExpression(LastStore);
1473 }
1474
1475 // If the store is not equivalent to anything, value number it as a store that
1476 // produces a unique memory state (instead of using it's MemoryUse, we use
1477 // it's MemoryDef).
1478 return createStoreExpression(SI, StoreAccess);
1479}
1480
1481// See if we can extract the value of a loaded pointer from a load, a store, or
1482// a memory instruction.
1483const Expression *
1484NewGVN::performSymbolicLoadCoercion(Type *LoadType, Value *LoadPtr,
1485 LoadInst *LI, Instruction *DepInst,
1486 MemoryAccess *DefiningAccess) const {
1487 assert((!LI || LI->isSimple()) && "Not a simple load");
1488 if (auto *DepSI = dyn_cast<StoreInst>(DepInst)) {
1489 // Can't forward from non-atomic to atomic without violating memory model.
1490 // Also don't need to coerce if they are the same type, we will just
1491 // propagate.
1492 if (LI->isAtomic() > DepSI->isAtomic() ||
1493 LoadType == DepSI->getValueOperand()->getType())
1494 return nullptr;
1495 int Offset = analyzeLoadFromClobberingStore(LoadType, LoadPtr, DepSI, DL);
1496 if (Offset >= 0) {
1497 if (auto *C = dyn_cast<Constant>(
1498 lookupOperandLeader(DepSI->getValueOperand()))) {
1499 if (Constant *Res = getConstantValueForLoad(C, Offset, LoadType, DL)) {
1500 LLVM_DEBUG(dbgs() << "Coercing load from store " << *DepSI
1501 << " to constant " << *Res << "\n");
1502 return createConstantExpression(Res);
1503 }
1504 }
1505 }
1506 } else if (auto *DepLI = dyn_cast<LoadInst>(DepInst)) {
1507 // Can't forward from non-atomic to atomic without violating memory model.
1508 if (LI->isAtomic() > DepLI->isAtomic())
1509 return nullptr;
1510 int Offset = analyzeLoadFromClobberingLoad(LoadType, LoadPtr, DepLI, DL);
1511 if (Offset >= 0) {
1512 // We can coerce a constant load into a load.
1513 if (auto *C = dyn_cast<Constant>(lookupOperandLeader(DepLI)))
1514 if (auto *PossibleConstant =
1515 getConstantValueForLoad(C, Offset, LoadType, DL)) {
1516 LLVM_DEBUG(dbgs() << "Coercing load from load " << *LI
1517 << " to constant " << *PossibleConstant << "\n");
1518 return createConstantExpression(PossibleConstant);
1519 }
1520 }
1521 } else if (auto *DepMI = dyn_cast<MemIntrinsic>(DepInst)) {
1522 int Offset = analyzeLoadFromClobberingMemInst(LoadType, LoadPtr, DepMI, DL);
1523 if (Offset >= 0) {
1524 if (auto *PossibleConstant =
1525 getConstantMemInstValueForLoad(DepMI, Offset, LoadType, DL)) {
1526 LLVM_DEBUG(dbgs() << "Coercing load from meminst " << *DepMI
1527 << " to constant " << *PossibleConstant << "\n");
1528 return createConstantExpression(PossibleConstant);
1529 }
1530 }
1531 }
1532
1533 // All of the below are only true if the loaded pointer is produced
1534 // by the dependent instruction.
1535 if (LoadPtr != lookupOperandLeader(DepInst) &&
1536 !AA->isMustAlias(LoadPtr, DepInst))
1537 return nullptr;
1538 // If this load really doesn't depend on anything, then we must be loading an
1539 // undef value. This can happen when loading for a fresh allocation with no
1540 // intervening stores, for example. Note that this is only true in the case
1541 // that the result of the allocation is pointer equal to the load ptr.
1542 if (isa<AllocaInst>(DepInst)) {
1543 return createConstantExpression(UndefValue::get(LoadType));
1544 }
1545 // If this load occurs either right after a lifetime begin,
1546 // then the loaded value is undefined.
1547 else if (auto *II = dyn_cast<IntrinsicInst>(DepInst)) {
1548 if (II->getIntrinsicID() == Intrinsic::lifetime_start)
1549 return createConstantExpression(UndefValue::get(LoadType));
1550 } else if (auto *InitVal =
1551 getInitialValueOfAllocation(DepInst, TLI, LoadType))
1552 return createConstantExpression(InitVal);
1553
1554 return nullptr;
1555}
1556
1557const Expression *NewGVN::performSymbolicLoadEvaluation(Instruction *I) const {
1558 auto *LI = cast<LoadInst>(I);
1559
1560 // We can eliminate in favor of non-simple loads, but we won't be able to
1561 // eliminate the loads themselves.
1562 if (!LI->isSimple())
1563 return nullptr;
1564
1565 Value *LoadAddressLeader = lookupOperandLeader(LI->getPointerOperand());
1566 // Load of undef is UB.
1567 if (isa<UndefValue>(LoadAddressLeader))
1568 return createConstantExpression(PoisonValue::get(LI->getType()));
1569 MemoryAccess *OriginalAccess = getMemoryAccess(I);
1570 MemoryAccess *DefiningAccess =
1571 MSSAWalker->getClobberingMemoryAccess(OriginalAccess);
1572
1573 if (!MSSA->isLiveOnEntryDef(DefiningAccess)) {
1574 if (auto *MD = dyn_cast<MemoryDef>(DefiningAccess)) {
1575 Instruction *DefiningInst = MD->getMemoryInst();
1576 // If the defining instruction is not reachable, replace with poison.
1577 if (!ReachableBlocks.count(DefiningInst->getParent()))
1578 return createConstantExpression(PoisonValue::get(LI->getType()));
1579 // This will handle stores and memory insts. We only do if it the
1580 // defining access has a different type, or it is a pointer produced by
1581 // certain memory operations that cause the memory to have a fixed value
1582 // (IE things like calloc).
1583 if (const auto *CoercionResult =
1584 performSymbolicLoadCoercion(LI->getType(), LoadAddressLeader, LI,
1585 DefiningInst, DefiningAccess))
1586 return CoercionResult;
1587 }
1588 }
1589
1590 const auto *LE = createLoadExpression(LI->getType(), LoadAddressLeader, LI,
1591 DefiningAccess);
1592 // If our MemoryLeader is not our defining access, add a use to the
1593 // MemoryLeader, so that we get reprocessed when it changes.
1594 if (LE->getMemoryLeader() != DefiningAccess)
1595 addMemoryUsers(LE->getMemoryLeader(), OriginalAccess);
1596 return LE;
1597}
1598
1599NewGVN::ExprResult
1600NewGVN::performSymbolicPredicateInfoEvaluation(IntrinsicInst *I) const {
1601 auto *PI = PredInfo->getPredicateInfoFor(I);
1602 if (!PI)
1603 return ExprResult::none();
1604
1605 LLVM_DEBUG(dbgs() << "Found predicate info from instruction !\n");
1606
1607 const std::optional<PredicateConstraint> &Constraint = PI->getConstraint();
1608 if (!Constraint)
1609 return ExprResult::none();
1610
1611 CmpInst::Predicate Predicate = Constraint->Predicate;
1612 Value *CmpOp0 = I->getOperand(0);
1613 Value *CmpOp1 = Constraint->OtherOp;
1614
1615 Value *FirstOp = lookupOperandLeader(CmpOp0);
1616 Value *SecondOp = lookupOperandLeader(CmpOp1);
1617 Value *AdditionallyUsedValue = CmpOp0;
1618
1619 // Sort the ops.
1620 if (shouldSwapOperandsForIntrinsic(FirstOp, SecondOp, I)) {
1621 std::swap(FirstOp, SecondOp);
1623 AdditionallyUsedValue = CmpOp1;
1624 }
1625
1626 if (Predicate == CmpInst::ICMP_EQ)
1627 return ExprResult::some(createVariableOrConstant(FirstOp),
1628 AdditionallyUsedValue, PI);
1629
1630 // Handle the special case of floating point.
1631 if (Predicate == CmpInst::FCMP_OEQ && isa<ConstantFP>(FirstOp) &&
1632 !cast<ConstantFP>(FirstOp)->isZero())
1633 return ExprResult::some(createConstantExpression(cast<Constant>(FirstOp)),
1634 AdditionallyUsedValue, PI);
1635
1636 return ExprResult::none();
1637}
1638
1639// Evaluate read only and pure calls, and create an expression result.
1640NewGVN::ExprResult NewGVN::performSymbolicCallEvaluation(Instruction *I) const {
1641 auto *CI = cast<CallInst>(I);
1642 if (auto *II = dyn_cast<IntrinsicInst>(I)) {
1643 // Intrinsics with the returned attribute are copies of arguments.
1644 if (auto *ReturnedValue = II->getReturnedArgOperand()) {
1645 if (II->getIntrinsicID() == Intrinsic::ssa_copy)
1646 if (auto Res = performSymbolicPredicateInfoEvaluation(II))
1647 return Res;
1648 return ExprResult::some(createVariableOrConstant(ReturnedValue));
1649 }
1650 }
1651
1652 // FIXME: Currently the calls which may access the thread id may
1653 // be considered as not accessing the memory. But this is
1654 // problematic for coroutines, since coroutines may resume in a
1655 // different thread. So we disable the optimization here for the
1656 // correctness. However, it may block many other correct
1657 // optimizations. Revert this one when we detect the memory
1658 // accessing kind more precisely.
1659 if (CI->getFunction()->isPresplitCoroutine())
1660 return ExprResult::none();
1661
1662 // Do not combine convergent calls since they implicitly depend on the set of
1663 // threads that is currently executing, and they might be in different basic
1664 // blocks.
1665 if (CI->isConvergent())
1666 return ExprResult::none();
1667
1668 if (AA->doesNotAccessMemory(CI)) {
1669 return ExprResult::some(
1670 createCallExpression(CI, TOPClass->getMemoryLeader()));
1671 } else if (AA->onlyReadsMemory(CI)) {
1672 if (auto *MA = MSSA->getMemoryAccess(CI)) {
1673 auto *DefiningAccess = MSSAWalker->getClobberingMemoryAccess(MA);
1674 return ExprResult::some(createCallExpression(CI, DefiningAccess));
1675 } else // MSSA determined that CI does not access memory.
1676 return ExprResult::some(
1677 createCallExpression(CI, TOPClass->getMemoryLeader()));
1678 }
1679 return ExprResult::none();
1680}
1681
1682// Retrieve the memory class for a given MemoryAccess.
1683CongruenceClass *NewGVN::getMemoryClass(const MemoryAccess *MA) const {
1684 auto *Result = MemoryAccessToClass.lookup(MA);
1685 assert(Result && "Should have found memory class");
1686 return Result;
1687}
1688
1689// Update the MemoryAccess equivalence table to say that From is equal to To,
1690// and return true if this is different from what already existed in the table.
1691bool NewGVN::setMemoryClass(const MemoryAccess *From,
1692 CongruenceClass *NewClass) {
1693 assert(NewClass &&
1694 "Every MemoryAccess should be getting mapped to a non-null class");
1695 LLVM_DEBUG(dbgs() << "Setting " << *From);
1696 LLVM_DEBUG(dbgs() << " equivalent to congruence class ");
1697 LLVM_DEBUG(dbgs() << NewClass->getID()
1698 << " with current MemoryAccess leader ");
1699 LLVM_DEBUG(dbgs() << *NewClass->getMemoryLeader() << "\n");
1700
1701 auto LookupResult = MemoryAccessToClass.find(From);
1702 bool Changed = false;
1703 // If it's already in the table, see if the value changed.
1704 if (LookupResult != MemoryAccessToClass.end()) {
1705 auto *OldClass = LookupResult->second;
1706 if (OldClass != NewClass) {
1707 // If this is a phi, we have to handle memory member updates.
1708 if (auto *MP = dyn_cast<MemoryPhi>(From)) {
1709 OldClass->memory_erase(MP);
1710 NewClass->memory_insert(MP);
1711 // This may have killed the class if it had no non-memory members
1712 if (OldClass->getMemoryLeader() == From) {
1713 if (OldClass->definesNoMemory()) {
1714 OldClass->setMemoryLeader(nullptr);
1715 } else {
1716 OldClass->setMemoryLeader(getNextMemoryLeader(OldClass));
1717 LLVM_DEBUG(dbgs() << "Memory class leader change for class "
1718 << OldClass->getID() << " to "
1719 << *OldClass->getMemoryLeader()
1720 << " due to removal of a memory member " << *From
1721 << "\n");
1722 markMemoryLeaderChangeTouched(OldClass);
1723 }
1724 }
1725 }
1726 // It wasn't equivalent before, and now it is.
1727 LookupResult->second = NewClass;
1728 Changed = true;
1729 }
1730 }
1731
1732 return Changed;
1733}
1734
1735// Determine if a instruction is cycle-free. That means the values in the
1736// instruction don't depend on any expressions that can change value as a result
1737// of the instruction. For example, a non-cycle free instruction would be v =
1738// phi(0, v+1).
1739bool NewGVN::isCycleFree(const Instruction *I) const {
1740 // In order to compute cycle-freeness, we do SCC finding on the instruction,
1741 // and see what kind of SCC it ends up in. If it is a singleton, it is
1742 // cycle-free. If it is not in a singleton, it is only cycle free if the
1743 // other members are all phi nodes (as they do not compute anything, they are
1744 // copies).
1745 auto ICS = InstCycleState.lookup(I);
1746 if (ICS == ICS_Unknown) {
1747 SCCFinder.Start(I);
1748 auto &SCC = SCCFinder.getComponentFor(I);
1749 // It's cycle free if it's size 1 or the SCC is *only* phi nodes.
1750 if (SCC.size() == 1)
1751 InstCycleState.insert({I, ICS_CycleFree});
1752 else {
1753 bool AllPhis = llvm::all_of(SCC, [](const Value *V) {
1754 return isa<PHINode>(V) || isCopyOfAPHI(V);
1755 });
1756 ICS = AllPhis ? ICS_CycleFree : ICS_Cycle;
1757 for (const auto *Member : SCC)
1758 if (auto *MemberPhi = dyn_cast<PHINode>(Member))
1759 InstCycleState.insert({MemberPhi, ICS});
1760 }
1761 }
1762 if (ICS == ICS_Cycle)
1763 return false;
1764 return true;
1765}
1766
1767// Evaluate PHI nodes symbolically and create an expression result.
1768const Expression *
1769NewGVN::performSymbolicPHIEvaluation(ArrayRef<ValPair> PHIOps,
1770 Instruction *I,
1771 BasicBlock *PHIBlock) const {
1772 // True if one of the incoming phi edges is a backedge.
1773 bool HasBackedge = false;
1774 // All constant tracks the state of whether all the *original* phi operands
1775 // This is really shorthand for "this phi cannot cycle due to forward
1776 // change in value of the phi is guaranteed not to later change the value of
1777 // the phi. IE it can't be v = phi(undef, v+1)
1778 bool OriginalOpsConstant = true;
1779 auto *E = cast<PHIExpression>(createPHIExpression(
1780 PHIOps, I, PHIBlock, HasBackedge, OriginalOpsConstant));
1781 // We match the semantics of SimplifyPhiNode from InstructionSimplify here.
1782 // See if all arguments are the same.
1783 // We track if any were undef because they need special handling.
1784 bool HasUndef = false, HasPoison = false;
1785 auto Filtered = make_filter_range(E->operands(), [&](Value *Arg) {
1786 if (isa<PoisonValue>(Arg)) {
1787 HasPoison = true;
1788 return false;
1789 }
1790 if (isa<UndefValue>(Arg)) {
1791 HasUndef = true;
1792 return false;
1793 }
1794 return true;
1795 });
1796 // If we are left with no operands, it's dead.
1797 if (Filtered.empty()) {
1798 // If it has undef or poison at this point, it means there are no-non-undef
1799 // arguments, and thus, the value of the phi node must be undef.
1800 if (HasUndef) {
1801 LLVM_DEBUG(
1802 dbgs() << "PHI Node " << *I
1803 << " has no non-undef arguments, valuing it as undef\n");
1804 return createConstantExpression(UndefValue::get(I->getType()));
1805 }
1806 if (HasPoison) {
1807 LLVM_DEBUG(
1808 dbgs() << "PHI Node " << *I
1809 << " has no non-poison arguments, valuing it as poison\n");
1810 return createConstantExpression(PoisonValue::get(I->getType()));
1811 }
1812
1813 LLVM_DEBUG(dbgs() << "No arguments of PHI node " << *I << " are live\n");
1814 deleteExpression(E);
1815 return createDeadExpression();
1816 }
1817 Value *AllSameValue = *(Filtered.begin());
1818 ++Filtered.begin();
1819 // Can't use std::equal here, sadly, because filter.begin moves.
1820 if (llvm::all_of(Filtered, [&](Value *Arg) { return Arg == AllSameValue; })) {
1821 // Can't fold phi(undef, X) -> X unless X can't be poison (thus X is undef
1822 // in the worst case).
1823 if (HasUndef && !isGuaranteedNotToBePoison(AllSameValue, AC, nullptr, DT))
1824 return E;
1825
1826 // In LLVM's non-standard representation of phi nodes, it's possible to have
1827 // phi nodes with cycles (IE dependent on other phis that are .... dependent
1828 // on the original phi node), especially in weird CFG's where some arguments
1829 // are unreachable, or uninitialized along certain paths. This can cause
1830 // infinite loops during evaluation. We work around this by not trying to
1831 // really evaluate them independently, but instead using a variable
1832 // expression to say if one is equivalent to the other.
1833 // We also special case undef/poison, so that if we have an undef, we can't
1834 // use the common value unless it dominates the phi block.
1835 if (HasPoison || HasUndef) {
1836 // If we have undef and at least one other value, this is really a
1837 // multivalued phi, and we need to know if it's cycle free in order to
1838 // evaluate whether we can ignore the undef. The other parts of this are
1839 // just shortcuts. If there is no backedge, or all operands are
1840 // constants, it also must be cycle free.
1841 if (HasBackedge && !OriginalOpsConstant &&
1842 !isa<UndefValue>(AllSameValue) && !isCycleFree(I))
1843 return E;
1844
1845 // Only have to check for instructions
1846 if (auto *AllSameInst = dyn_cast<Instruction>(AllSameValue))
1847 if (!someEquivalentDominates(AllSameInst, I))
1848 return E;
1849 }
1850 // Can't simplify to something that comes later in the iteration.
1851 // Otherwise, when and if it changes congruence class, we will never catch
1852 // up. We will always be a class behind it.
1853 if (isa<Instruction>(AllSameValue) &&
1854 InstrToDFSNum(AllSameValue) > InstrToDFSNum(I))
1855 return E;
1856 NumGVNPhisAllSame++;
1857 LLVM_DEBUG(dbgs() << "Simplified PHI node " << *I << " to " << *AllSameValue
1858 << "\n");
1859 deleteExpression(E);
1860 return createVariableOrConstant(AllSameValue);
1861 }
1862 return E;
1863}
1864
1865const Expression *
1866NewGVN::performSymbolicAggrValueEvaluation(Instruction *I) const {
1867 if (auto *EI = dyn_cast<ExtractValueInst>(I)) {
1868 auto *WO = dyn_cast<WithOverflowInst>(EI->getAggregateOperand());
1869 if (WO && EI->getNumIndices() == 1 && *EI->idx_begin() == 0)
1870 // EI is an extract from one of our with.overflow intrinsics. Synthesize
1871 // a semantically equivalent expression instead of an extract value
1872 // expression.
1873 return createBinaryExpression(WO->getBinaryOp(), EI->getType(),
1874 WO->getLHS(), WO->getRHS(), I);
1875 }
1876
1877 return createAggregateValueExpression(I);
1878}
1879
1880NewGVN::ExprResult NewGVN::performSymbolicCmpEvaluation(Instruction *I) const {
1881 assert(isa<CmpInst>(I) && "Expected a cmp instruction.");
1882
1883 auto *CI = cast<CmpInst>(I);
1884 // See if our operands are equal to those of a previous predicate, and if so,
1885 // if it implies true or false.
1886 auto Op0 = lookupOperandLeader(CI->getOperand(0));
1887 auto Op1 = lookupOperandLeader(CI->getOperand(1));
1888 auto OurPredicate = CI->getPredicate();
1889 if (shouldSwapOperands(Op0, Op1)) {
1890 std::swap(Op0, Op1);
1891 OurPredicate = CI->getSwappedPredicate();
1892 }
1893
1894 // Avoid processing the same info twice.
1895 const PredicateBase *LastPredInfo = nullptr;
1896 // See if we know something about the comparison itself, like it is the target
1897 // of an assume.
1898 auto *CmpPI = PredInfo->getPredicateInfoFor(I);
1899 if (isa_and_nonnull<PredicateAssume>(CmpPI))
1900 return ExprResult::some(
1901 createConstantExpression(ConstantInt::getTrue(CI->getType())));
1902
1903 if (Op0 == Op1) {
1904 // This condition does not depend on predicates, no need to add users
1905 if (CI->isTrueWhenEqual())
1906 return ExprResult::some(
1907 createConstantExpression(ConstantInt::getTrue(CI->getType())));
1908 else if (CI->isFalseWhenEqual())
1909 return ExprResult::some(
1910 createConstantExpression(ConstantInt::getFalse(CI->getType())));
1911 }
1912
1913 // NOTE: Because we are comparing both operands here and below, and using
1914 // previous comparisons, we rely on fact that predicateinfo knows to mark
1915 // comparisons that use renamed operands as users of the earlier comparisons.
1916 // It is *not* enough to just mark predicateinfo renamed operands as users of
1917 // the earlier comparisons, because the *other* operand may have changed in a
1918 // previous iteration.
1919 // Example:
1920 // icmp slt %a, %b
1921 // %b.0 = ssa.copy(%b)
1922 // false branch:
1923 // icmp slt %c, %b.0
1924
1925 // %c and %a may start out equal, and thus, the code below will say the second
1926 // %icmp is false. c may become equal to something else, and in that case the
1927 // %second icmp *must* be reexamined, but would not if only the renamed
1928 // %operands are considered users of the icmp.
1929
1930 // *Currently* we only check one level of comparisons back, and only mark one
1931 // level back as touched when changes happen. If you modify this code to look
1932 // back farther through comparisons, you *must* mark the appropriate
1933 // comparisons as users in PredicateInfo.cpp, or you will cause bugs. See if
1934 // we know something just from the operands themselves
1935
1936 // See if our operands have predicate info, so that we may be able to derive
1937 // something from a previous comparison.
1938 for (const auto &Op : CI->operands()) {
1939 auto *PI = PredInfo->getPredicateInfoFor(Op);
1940 if (const auto *PBranch = dyn_cast_or_null<PredicateBranch>(PI)) {
1941 if (PI == LastPredInfo)
1942 continue;
1943 LastPredInfo = PI;
1944 // In phi of ops cases, we may have predicate info that we are evaluating
1945 // in a different context.
1946 if (!DT->dominates(PBranch->To, I->getParent()))
1947 continue;
1948 // TODO: Along the false edge, we may know more things too, like
1949 // icmp of
1950 // same operands is false.
1951 // TODO: We only handle actual comparison conditions below, not
1952 // and/or.
1953 auto *BranchCond = dyn_cast<CmpInst>(PBranch->Condition);
1954 if (!BranchCond)
1955 continue;
1956 auto *BranchOp0 = lookupOperandLeader(BranchCond->getOperand(0));
1957 auto *BranchOp1 = lookupOperandLeader(BranchCond->getOperand(1));
1958 auto BranchPredicate = BranchCond->getPredicate();
1959 if (shouldSwapOperands(BranchOp0, BranchOp1)) {
1960 std::swap(BranchOp0, BranchOp1);
1961 BranchPredicate = BranchCond->getSwappedPredicate();
1962 }
1963 if (BranchOp0 == Op0 && BranchOp1 == Op1) {
1964 if (PBranch->TrueEdge) {
1965 // If we know the previous predicate is true and we are in the true
1966 // edge then we may be implied true or false.
1967 if (CmpInst::isImpliedTrueByMatchingCmp(BranchPredicate,
1968 OurPredicate)) {
1969 return ExprResult::some(
1970 createConstantExpression(ConstantInt::getTrue(CI->getType())),
1971 PI);
1972 }
1973
1974 if (CmpInst::isImpliedFalseByMatchingCmp(BranchPredicate,
1975 OurPredicate)) {
1976 return ExprResult::some(
1977 createConstantExpression(ConstantInt::getFalse(CI->getType())),
1978 PI);
1979 }
1980 } else {
1981 // Just handle the ne and eq cases, where if we have the same
1982 // operands, we may know something.
1983 if (BranchPredicate == OurPredicate) {
1984 // Same predicate, same ops,we know it was false, so this is false.
1985 return ExprResult::some(
1986 createConstantExpression(ConstantInt::getFalse(CI->getType())),
1987 PI);
1988 } else if (BranchPredicate ==
1989 CmpInst::getInversePredicate(OurPredicate)) {
1990 // Inverse predicate, we know the other was false, so this is true.
1991 return ExprResult::some(
1992 createConstantExpression(ConstantInt::getTrue(CI->getType())),
1993 PI);
1994 }
1995 }
1996 }
1997 }
1998 }
1999 // Create expression will take care of simplifyCmpInst
2000 return createExpression(I);
2001}
2002
2003// Substitute and symbolize the instruction before value numbering.
2004NewGVN::ExprResult
2005NewGVN::performSymbolicEvaluation(Instruction *I,
2006 SmallPtrSetImpl<Value *> &Visited) const {
2007
2008 const Expression *E = nullptr;
2009 // TODO: memory intrinsics.
2010 // TODO: Some day, we should do the forward propagation and reassociation
2011 // parts of the algorithm.
2012 switch (I->getOpcode()) {
2013 case Instruction::ExtractValue:
2014 case Instruction::InsertValue:
2015 E = performSymbolicAggrValueEvaluation(I);
2016 break;
2017 case Instruction::PHI: {
2019 auto *PN = cast<PHINode>(I);
2020 for (unsigned i = 0; i < PN->getNumOperands(); ++i)
2021 Ops.push_back({PN->getIncomingValue(i), PN->getIncomingBlock(i)});
2022 // Sort to ensure the invariant createPHIExpression requires is met.
2023 sortPHIOps(Ops);
2024 E = performSymbolicPHIEvaluation(Ops, I, getBlockForValue(I));
2025 } break;
2026 case Instruction::Call:
2027 return performSymbolicCallEvaluation(I);
2028 break;
2029 case Instruction::Store:
2030 E = performSymbolicStoreEvaluation(I);
2031 break;
2032 case Instruction::Load:
2033 E = performSymbolicLoadEvaluation(I);
2034 break;
2035 case Instruction::BitCast:
2036 case Instruction::AddrSpaceCast:
2037 case Instruction::Freeze:
2038 return createExpression(I);
2039 break;
2040 case Instruction::ICmp:
2041 case Instruction::FCmp:
2042 return performSymbolicCmpEvaluation(I);
2043 break;
2044 case Instruction::FNeg:
2045 case Instruction::Add:
2046 case Instruction::FAdd:
2047 case Instruction::Sub:
2048 case Instruction::FSub:
2049 case Instruction::Mul:
2050 case Instruction::FMul:
2051 case Instruction::UDiv:
2052 case Instruction::SDiv:
2053 case Instruction::FDiv:
2054 case Instruction::URem:
2055 case Instruction::SRem:
2056 case Instruction::FRem:
2057 case Instruction::Shl:
2058 case Instruction::LShr:
2059 case Instruction::AShr:
2060 case Instruction::And:
2061 case Instruction::Or:
2062 case Instruction::Xor:
2063 case Instruction::Trunc:
2064 case Instruction::ZExt:
2065 case Instruction::SExt:
2066 case Instruction::FPToUI:
2067 case Instruction::FPToSI:
2068 case Instruction::UIToFP:
2069 case Instruction::SIToFP:
2070 case Instruction::FPTrunc:
2071 case Instruction::FPExt:
2072 case Instruction::PtrToInt:
2073 case Instruction::IntToPtr:
2074 case Instruction::Select:
2075 case Instruction::ExtractElement:
2076 case Instruction::InsertElement:
2077 case Instruction::GetElementPtr:
2078 return createExpression(I);
2079 break;
2080 case Instruction::ShuffleVector:
2081 // FIXME: Add support for shufflevector to createExpression.
2082 return ExprResult::none();
2083 default:
2084 return ExprResult::none();
2085 }
2086 return ExprResult::some(E);
2087}
2088
2089// Look up a container of values/instructions in a map, and touch all the
2090// instructions in the container. Then erase value from the map.
2091template <typename Map, typename KeyType>
2092void NewGVN::touchAndErase(Map &M, const KeyType &Key) {
2093 const auto Result = M.find_as(Key);
2094 if (Result != M.end()) {
2095 for (const typename Map::mapped_type::value_type Mapped : Result->second)
2096 TouchedInstructions.set(InstrToDFSNum(Mapped));
2097 M.erase(Result);
2098 }
2099}
2100
2101void NewGVN::addAdditionalUsers(Value *To, Value *User) const {
2102 assert(User && To != User);
2103 if (isa<Instruction>(To))
2104 AdditionalUsers[To].insert(User);
2105}
2106
2107void NewGVN::addAdditionalUsers(ExprResult &Res, Instruction *User) const {
2108 if (Res.ExtraDep && Res.ExtraDep != User)
2109 addAdditionalUsers(Res.ExtraDep, User);
2110 Res.ExtraDep = nullptr;
2111
2112 if (Res.PredDep) {
2113 if (const auto *PBranch = dyn_cast<PredicateBranch>(Res.PredDep))
2114 PredicateToUsers[PBranch->Condition].insert(User);
2115 else if (const auto *PAssume = dyn_cast<PredicateAssume>(Res.PredDep))
2116 PredicateToUsers[PAssume->Condition].insert(User);
2117 }
2118 Res.PredDep = nullptr;
2119}
2120
2121void NewGVN::markUsersTouched(Value *V) {
2122 // Now mark the users as touched.
2123 for (auto *User : V->users()) {
2124 assert(isa<Instruction>(User) && "Use of value not within an instruction?");
2125 TouchedInstructions.set(InstrToDFSNum(User));
2126 }
2127 touchAndErase(AdditionalUsers, V);
2128}
2129
2130void NewGVN::addMemoryUsers(const MemoryAccess *To, MemoryAccess *U) const {
2131 LLVM_DEBUG(dbgs() << "Adding memory user " << *U << " to " << *To << "\n");
2132 MemoryToUsers[To].insert(U);
2133}
2134
2135void NewGVN::markMemoryDefTouched(const MemoryAccess *MA) {
2136 TouchedInstructions.set(MemoryToDFSNum(MA));
2137}
2138
2139void NewGVN::markMemoryUsersTouched(const MemoryAccess *MA) {
2140 if (isa<MemoryUse>(MA))
2141 return;
2142 for (const auto *U : MA->users())
2143 TouchedInstructions.set(MemoryToDFSNum(U));
2144 touchAndErase(MemoryToUsers, MA);
2145}
2146
2147// Touch all the predicates that depend on this instruction.
2148void NewGVN::markPredicateUsersTouched(Instruction *I) {
2149 touchAndErase(PredicateToUsers, I);
2150}
2151
2152// Mark users affected by a memory leader change.
2153void NewGVN::markMemoryLeaderChangeTouched(CongruenceClass *CC) {
2154 for (const auto *M : CC->memory())
2155 markMemoryDefTouched(M);
2156}
2157
2158// Touch the instructions that need to be updated after a congruence class has a
2159// leader change, and mark changed values.
2160void NewGVN::markValueLeaderChangeTouched(CongruenceClass *CC) {
2161 for (auto *M : *CC) {
2162 if (auto *I = dyn_cast<Instruction>(M))
2163 TouchedInstructions.set(InstrToDFSNum(I));
2164 LeaderChanges.insert(M);
2165 }
2166}
2167
2168// Give a range of things that have instruction DFS numbers, this will return
2169// the member of the range with the smallest dfs number.
2170template <class T, class Range>
2171T *NewGVN::getMinDFSOfRange(const Range &R) const {
2172 std::pair<T *, unsigned> MinDFS = {nullptr, ~0U};
2173 for (const auto X : R) {
2174 auto DFSNum = InstrToDFSNum(X);
2175 if (DFSNum < MinDFS.second)
2176 MinDFS = {X, DFSNum};
2177 }
2178 return MinDFS.first;
2179}
2180
2181// This function returns the MemoryAccess that should be the next leader of
2182// congruence class CC, under the assumption that the current leader is going to
2183// disappear.
2184const MemoryAccess *NewGVN::getNextMemoryLeader(CongruenceClass *CC) const {
2185 // TODO: If this ends up to slow, we can maintain a next memory leader like we
2186 // do for regular leaders.
2187 // Make sure there will be a leader to find.
2188 assert(!CC->definesNoMemory() && "Can't get next leader if there is none");
2189 if (CC->getStoreCount() > 0) {
2190 if (auto *NL = dyn_cast_or_null<StoreInst>(CC->getNextLeader().first))
2191 return getMemoryAccess(NL);
2192 // Find the store with the minimum DFS number.
2193 auto *V = getMinDFSOfRange<Value>(make_filter_range(
2194 *CC, [&](const Value *V) { return isa<StoreInst>(V); }));
2195 return getMemoryAccess(cast<StoreInst>(V));
2196 }
2197 assert(CC->getStoreCount() == 0);
2198
2199 // Given our assertion, hitting this part must mean
2200 // !OldClass->memory_empty()
2201 if (CC->memory_size() == 1)
2202 return *CC->memory_begin();
2203 return getMinDFSOfRange<const MemoryPhi>(CC->memory());
2204}
2205
2206// This function returns the next value leader of a congruence class, under the
2207// assumption that the current leader is going away. This should end up being
2208// the next most dominating member.
2209Value *NewGVN::getNextValueLeader(CongruenceClass *CC) const {
2210 // We don't need to sort members if there is only 1, and we don't care about
2211 // sorting the TOP class because everything either gets out of it or is
2212 // unreachable.
2213
2214 if (CC->size() == 1 || CC == TOPClass) {
2215 return *(CC->begin());
2216 } else if (CC->getNextLeader().first) {
2217 ++NumGVNAvoidedSortedLeaderChanges;
2218 return CC->getNextLeader().first;
2219 } else {
2220 ++NumGVNSortedLeaderChanges;
2221 // NOTE: If this ends up to slow, we can maintain a dual structure for
2222 // member testing/insertion, or keep things mostly sorted, and sort only
2223 // here, or use SparseBitVector or ....
2224 return getMinDFSOfRange<Value>(*CC);
2225 }
2226}
2227
2228// Move a MemoryAccess, currently in OldClass, to NewClass, including updates to
2229// the memory members, etc for the move.
2230//
2231// The invariants of this function are:
2232//
2233// - I must be moving to NewClass from OldClass
2234// - The StoreCount of OldClass and NewClass is expected to have been updated
2235// for I already if it is a store.
2236// - The OldClass memory leader has not been updated yet if I was the leader.
2237void NewGVN::moveMemoryToNewCongruenceClass(Instruction *I,
2238 MemoryAccess *InstMA,
2239 CongruenceClass *OldClass,
2240 CongruenceClass *NewClass) {
2241 // If the leader is I, and we had a representative MemoryAccess, it should
2242 // be the MemoryAccess of OldClass.
2243 assert((!InstMA || !OldClass->getMemoryLeader() ||
2244 OldClass->getLeader() != I ||
2245 MemoryAccessToClass.lookup(OldClass->getMemoryLeader()) ==
2246 MemoryAccessToClass.lookup(InstMA)) &&
2247 "Representative MemoryAccess mismatch");
2248 // First, see what happens to the new class
2249 if (!NewClass->getMemoryLeader()) {
2250 // Should be a new class, or a store becoming a leader of a new class.
2251 assert(NewClass->size() == 1 ||
2252 (isa<StoreInst>(I) && NewClass->getStoreCount() == 1));
2253 NewClass->setMemoryLeader(InstMA);
2254 // Mark it touched if we didn't just create a singleton
2255 LLVM_DEBUG(dbgs() << "Memory class leader change for class "
2256 << NewClass->getID()
2257 << " due to new memory instruction becoming leader\n");
2258 markMemoryLeaderChangeTouched(NewClass);
2259 }
2260 setMemoryClass(InstMA, NewClass);
2261 // Now, fixup the old class if necessary
2262 if (OldClass->getMemoryLeader() == InstMA) {
2263 if (!OldClass->definesNoMemory()) {
2264 OldClass->setMemoryLeader(getNextMemoryLeader(OldClass));
2265 LLVM_DEBUG(dbgs() << "Memory class leader change for class "
2266 << OldClass->getID() << " to "
2267 << *OldClass->getMemoryLeader()
2268 << " due to removal of old leader " << *InstMA << "\n");
2269 markMemoryLeaderChangeTouched(OldClass);
2270 } else
2271 OldClass->setMemoryLeader(nullptr);
2272 }
2273}
2274
2275// Move a value, currently in OldClass, to be part of NewClass
2276// Update OldClass and NewClass for the move (including changing leaders, etc).
2277void NewGVN::moveValueToNewCongruenceClass(Instruction *I, const Expression *E,
2278 CongruenceClass *OldClass,
2279 CongruenceClass *NewClass) {
2280 if (I == OldClass->getNextLeader().first)
2281 OldClass->resetNextLeader();
2282
2283 OldClass->erase(I);
2284 NewClass->insert(I);
2285
2286 // Ensure that the leader has the lowest RPO. If the leader changed notify all
2287 // members of the class.
2288 if (NewClass->getLeader() != I &&
2289 NewClass->addPossibleLeader({I, InstrToDFSNum(I)})) {
2290 markValueLeaderChangeTouched(NewClass);
2291 }
2292
2293 // Handle our special casing of stores.
2294 if (auto *SI = dyn_cast<StoreInst>(I)) {
2295 OldClass->decStoreCount();
2296 // Okay, so when do we want to make a store a leader of a class?
2297 // If we have a store defined by an earlier load, we want the earlier load
2298 // to lead the class.
2299 // If we have a store defined by something else, we want the store to lead
2300 // the class so everything else gets the "something else" as a value.
2301 // If we have a store as the single member of the class, we want the store
2302 // as the leader
2303 if (NewClass->getStoreCount() == 0 && !NewClass->getStoredValue()) {
2304 // If it's a store expression we are using, it means we are not equivalent
2305 // to something earlier.
2306 if (auto *SE = dyn_cast<StoreExpression>(E)) {
2307 NewClass->setStoredValue(SE->getStoredValue());
2308 markValueLeaderChangeTouched(NewClass);
2309 // Shift the new class leader to be the store
2310 LLVM_DEBUG(dbgs() << "Changing leader of congruence class "
2311 << NewClass->getID() << " from "
2312 << *NewClass->getLeader() << " to " << *SI
2313 << " because store joined class\n");
2314 // If we changed the leader, we have to mark it changed because we don't
2315 // know what it will do to symbolic evaluation.
2316 NewClass->setLeader({SI, InstrToDFSNum(SI)});
2317 }
2318 // We rely on the code below handling the MemoryAccess change.
2319 }
2320 NewClass->incStoreCount();
2321 }
2322 // True if there is no memory instructions left in a class that had memory
2323 // instructions before.
2324
2325 // If it's not a memory use, set the MemoryAccess equivalence
2326 auto *InstMA = dyn_cast_or_null<MemoryDef>(getMemoryAccess(I));
2327 if (InstMA)
2328 moveMemoryToNewCongruenceClass(I, InstMA, OldClass, NewClass);
2329 ValueToClass[I] = NewClass;
2330 // See if we destroyed the class or need to swap leaders.
2331 if (OldClass->empty() && OldClass != TOPClass) {
2332 if (OldClass->getDefiningExpr()) {
2333 LLVM_DEBUG(dbgs() << "Erasing expression " << *OldClass->getDefiningExpr()
2334 << " from table\n");
2335 // We erase it as an exact expression to make sure we don't just erase an
2336 // equivalent one.
2337 auto Iter = ExpressionToClass.find_as(
2338 ExactEqualsExpression(*OldClass->getDefiningExpr()));
2339 if (Iter != ExpressionToClass.end())
2340 ExpressionToClass.erase(Iter);
2341#ifdef EXPENSIVE_CHECKS
2342 assert(
2343 (*OldClass->getDefiningExpr() != *E || ExpressionToClass.lookup(E)) &&
2344 "We erased the expression we just inserted, which should not happen");
2345#endif
2346 }
2347 } else if (OldClass->getLeader() == I) {
2348 // When the leader changes, the value numbering of
2349 // everything may change due to symbolization changes, so we need to
2350 // reprocess.
2351 LLVM_DEBUG(dbgs() << "Value class leader change for class "
2352 << OldClass->getID() << "\n");
2353 ++NumGVNLeaderChanges;
2354 // Destroy the stored value if there are no more stores to represent it.
2355 // Note that this is basically clean up for the expression removal that
2356 // happens below. If we remove stores from a class, we may leave it as a
2357 // class of equivalent memory phis.
2358 if (OldClass->getStoreCount() == 0) {
2359 if (OldClass->getStoredValue())
2360 OldClass->setStoredValue(nullptr);
2361 }
2362 OldClass->setLeader({getNextValueLeader(OldClass),
2363 InstrToDFSNum(getNextValueLeader(OldClass))});
2364 OldClass->resetNextLeader();
2365 markValueLeaderChangeTouched(OldClass);
2366 }
2367}
2368
2369// For a given expression, mark the phi of ops instructions that could have
2370// changed as a result.
2371void NewGVN::markPhiOfOpsChanged(const Expression *E) {
2372 touchAndErase(ExpressionToPhiOfOps, E);
2373}
2374
2375// Perform congruence finding on a given value numbering expression.
2376void NewGVN::performCongruenceFinding(Instruction *I, const Expression *E) {
2377 // This is guaranteed to return something, since it will at least find
2378 // TOP.
2379
2380 CongruenceClass *IClass = ValueToClass.lookup(I);
2381 assert(IClass && "Should have found a IClass");
2382 // Dead classes should have been eliminated from the mapping.
2383 assert(!IClass->isDead() && "Found a dead class");
2384
2385 CongruenceClass *EClass = nullptr;
2386 if (const auto *VE = dyn_cast<VariableExpression>(E)) {
2387 EClass = ValueToClass.lookup(VE->getVariableValue());
2388 } else if (isa<DeadExpression>(E)) {
2389 EClass = TOPClass;
2390 }
2391 if (!EClass) {
2392 auto lookupResult = ExpressionToClass.insert({E, nullptr});
2393
2394 // If it's not in the value table, create a new congruence class.
2395 if (lookupResult.second) {
2396 CongruenceClass *NewClass = createCongruenceClass(nullptr, E);
2397 auto place = lookupResult.first;
2398 place->second = NewClass;
2399
2400 // Constants and variables should always be made the leader.
2401 if (const auto *CE = dyn_cast<ConstantExpression>(E)) {
2402 NewClass->setLeader({CE->getConstantValue(), 0});
2403 } else if (const auto *SE = dyn_cast<StoreExpression>(E)) {
2404 StoreInst *SI = SE->getStoreInst();
2405 NewClass->setLeader({SI, InstrToDFSNum(SI)});
2406 NewClass->setStoredValue(SE->getStoredValue());
2407 // The RepMemoryAccess field will be filled in properly by the
2408 // moveValueToNewCongruenceClass call.
2409 } else {
2410 NewClass->setLeader({I, InstrToDFSNum(I)});
2411 }
2412 assert(!isa<VariableExpression>(E) &&
2413 "VariableExpression should have been handled already");
2414
2415 EClass = NewClass;
2416 LLVM_DEBUG(dbgs() << "Created new congruence class for " << *I
2417 << " using expression " << *E << " at "
2418 << NewClass->getID() << " and leader "
2419 << *(NewClass->getLeader()));
2420 if (NewClass->getStoredValue())
2421 LLVM_DEBUG(dbgs() << " and stored value "
2422 << *(NewClass->getStoredValue()));
2423 LLVM_DEBUG(dbgs() << "\n");
2424 } else {
2425 EClass = lookupResult.first->second;
2426 if (isa<ConstantExpression>(E))
2427 assert((isa<Constant>(EClass->getLeader()) ||
2428 (EClass->getStoredValue() &&
2429 isa<Constant>(EClass->getStoredValue()))) &&
2430 "Any class with a constant expression should have a "
2431 "constant leader");
2432
2433 assert(EClass && "Somehow don't have an eclass");
2434
2435 assert(!EClass->isDead() && "We accidentally looked up a dead class");
2436 }
2437 }
2438 bool ClassChanged = IClass != EClass;
2439 bool LeaderChanged = LeaderChanges.erase(I);
2440 if (ClassChanged || LeaderChanged) {
2441 LLVM_DEBUG(dbgs() << "New class " << EClass->getID() << " for expression "
2442 << *E << "\n");
2443 if (ClassChanged) {
2444 moveValueToNewCongruenceClass(I, E, IClass, EClass);
2445 markPhiOfOpsChanged(E);
2446 }
2447
2448 markUsersTouched(I);
2449 if (MemoryAccess *MA = getMemoryAccess(I))
2450 markMemoryUsersTouched(MA);
2451 if (auto *CI = dyn_cast<CmpInst>(I))
2452 markPredicateUsersTouched(CI);
2453 }
2454 // If we changed the class of the store, we want to ensure nothing finds the
2455 // old store expression. In particular, loads do not compare against stored
2456 // value, so they will find old store expressions (and associated class
2457 // mappings) if we leave them in the table.
2458 if (ClassChanged && isa<StoreInst>(I)) {
2459 auto *OldE = ValueToExpression.lookup(I);
2460 // It could just be that the old class died. We don't want to erase it if we
2461 // just moved classes.
2462 if (OldE && isa<StoreExpression>(OldE) && *E != *OldE) {
2463 // Erase this as an exact expression to ensure we don't erase expressions
2464 // equivalent to it.
2465 auto Iter = ExpressionToClass.find_as(ExactEqualsExpression(*OldE));
2466 if (Iter != ExpressionToClass.end())
2467 ExpressionToClass.erase(Iter);
2468 }
2469 }
2470 ValueToExpression[I] = E;
2471}
2472
2473// Process the fact that Edge (from, to) is reachable, including marking
2474// any newly reachable blocks and instructions for processing.
2475void NewGVN::updateReachableEdge(BasicBlock *From, BasicBlock *To) {
2476 // Check if the Edge was reachable before.
2477 if (ReachableEdges.insert({From, To}).second) {
2478 // If this block wasn't reachable before, all instructions are touched.
2479 if (ReachableBlocks.insert(To).second) {
2480 LLVM_DEBUG(dbgs() << "Block " << getBlockName(To)
2481 << " marked reachable\n");
2482 const auto &InstRange = BlockInstRange.lookup(To);
2483 TouchedInstructions.set(InstRange.first, InstRange.second);
2484 } else {
2485 LLVM_DEBUG(dbgs() << "Block " << getBlockName(To)
2486 << " was reachable, but new edge {"
2487 << getBlockName(From) << "," << getBlockName(To)
2488 << "} to it found\n");
2489
2490 // We've made an edge reachable to an existing block, which may
2491 // impact predicates. Otherwise, only mark the phi nodes as touched, as
2492 // they are the only thing that depend on new edges. Anything using their
2493 // values will get propagated to if necessary.
2494 if (MemoryAccess *MemPhi = getMemoryAccess(To))
2495 TouchedInstructions.set(InstrToDFSNum(MemPhi));
2496
2497 // FIXME: We should just add a union op on a Bitvector and
2498 // SparseBitVector. We can do it word by word faster than we are doing it
2499 // here.
2500 for (auto InstNum : RevisitOnReachabilityChange[To])
2501 TouchedInstructions.set(InstNum);
2502 }
2503 }
2504}
2505
2506// Given a predicate condition (from a switch, cmp, or whatever) and a block,
2507// see if we know some constant value for it already.
2508Value *NewGVN::findConditionEquivalence(Value *Cond) const {
2509 auto Result = lookupOperandLeader(Cond);
2510 return isa<Constant>(Result) ? Result : nullptr;
2511}
2512
2513// Process the outgoing edges of a block for reachability.
2514void NewGVN::processOutgoingEdges(Instruction *TI, BasicBlock *B) {
2515 // Evaluate reachability of terminator instruction.
2516 Value *Cond;
2517 BasicBlock *TrueSucc, *FalseSucc;
2518 if (match(TI, m_Br(m_Value(Cond), TrueSucc, FalseSucc))) {
2519 Value *CondEvaluated = findConditionEquivalence(Cond);
2520 if (!CondEvaluated) {
2521 if (auto *I = dyn_cast<Instruction>(Cond)) {
2523 auto Res = performSymbolicEvaluation(I, Visited);
2524 if (const auto *CE = dyn_cast_or_null<ConstantExpression>(Res.Expr)) {
2525 CondEvaluated = CE->getConstantValue();
2526 addAdditionalUsers(Res, I);
2527 } else {
2528 // Did not use simplification result, no need to add the extra
2529 // dependency.
2530 Res.ExtraDep = nullptr;
2531 }
2532 } else if (isa<ConstantInt>(Cond)) {
2533 CondEvaluated = Cond;
2534 }
2535 }
2536 ConstantInt *CI;
2537 if (CondEvaluated && (CI = dyn_cast<ConstantInt>(CondEvaluated))) {
2538 if (CI->isOne()) {
2539 LLVM_DEBUG(dbgs() << "Condition for Terminator " << *TI
2540 << " evaluated to true\n");
2541 updateReachableEdge(B, TrueSucc);
2542 } else if (CI->isZero()) {
2543 LLVM_DEBUG(dbgs() << "Condition for Terminator " << *TI
2544 << " evaluated to false\n");
2545 updateReachableEdge(B, FalseSucc);
2546 }
2547 } else {
2548 updateReachableEdge(B, TrueSucc);
2549 updateReachableEdge(B, FalseSucc);
2550 }
2551 } else if (auto *SI = dyn_cast<SwitchInst>(TI)) {
2552 // For switches, propagate the case values into the case
2553 // destinations.
2554
2555 Value *SwitchCond = SI->getCondition();
2556 Value *CondEvaluated = findConditionEquivalence(SwitchCond);
2557 // See if we were able to turn this switch statement into a constant.
2558 if (CondEvaluated && isa<ConstantInt>(CondEvaluated)) {
2559 auto *CondVal = cast<ConstantInt>(CondEvaluated);
2560 // We should be able to get case value for this.
2561 auto Case = *SI->findCaseValue(CondVal);
2562 if (Case.getCaseSuccessor() == SI->getDefaultDest()) {
2563 // We proved the value is outside of the range of the case.
2564 // We can't do anything other than mark the default dest as reachable,
2565 // and go home.
2566 updateReachableEdge(B, SI->getDefaultDest());
2567 return;
2568 }
2569 // Now get where it goes and mark it reachable.
2570 BasicBlock *TargetBlock = Case.getCaseSuccessor();
2571 updateReachableEdge(B, TargetBlock);
2572 } else {
2573 for (BasicBlock *TargetBlock : successors(SI->getParent()))
2574 updateReachableEdge(B, TargetBlock);
2575 }
2576 } else {
2577 // Otherwise this is either unconditional, or a type we have no
2578 // idea about. Just mark successors as reachable.
2579 for (BasicBlock *TargetBlock : successors(TI->getParent()))
2580 updateReachableEdge(B, TargetBlock);
2581
2582 // This also may be a memory defining terminator, in which case, set it
2583 // equivalent only to itself.
2584 //
2585 auto *MA = getMemoryAccess(TI);
2586 if (MA && !isa<MemoryUse>(MA)) {
2587 auto *CC = ensureLeaderOfMemoryClass(MA);
2588 if (setMemoryClass(MA, CC))
2589 markMemoryUsersTouched(MA);
2590 }
2591 }
2592}
2593
2594// Remove the PHI of Ops PHI for I
2595void NewGVN::removePhiOfOps(Instruction *I, PHINode *PHITemp) {
2596 InstrDFS.erase(PHITemp);
2597 // It's still a temp instruction. We keep it in the array so it gets erased.
2598 // However, it's no longer used by I, or in the block
2599 TempToBlock.erase(PHITemp);
2600 RealToTemp.erase(I);
2601 // We don't remove the users from the phi node uses. This wastes a little
2602 // time, but such is life. We could use two sets to track which were there
2603 // are the start of NewGVN, and which were added, but right nowt he cost of
2604 // tracking is more than the cost of checking for more phi of ops.
2605}
2606
2607// Add PHI Op in BB as a PHI of operations version of ExistingValue.
2608void NewGVN::addPhiOfOps(PHINode *Op, BasicBlock *BB,
2609 Instruction *ExistingValue) {
2610 InstrDFS[Op] = InstrToDFSNum(ExistingValue);
2611 AllTempInstructions.insert(Op);
2612 TempToBlock[Op] = BB;
2613 RealToTemp[ExistingValue] = Op;
2614 // Add all users to phi node use, as they are now uses of the phi of ops phis
2615 // and may themselves be phi of ops.
2616 for (auto *U : ExistingValue->users())
2617 if (auto *UI = dyn_cast<Instruction>(U))
2618 PHINodeUses.insert(UI);
2619}
2620
2621static bool okayForPHIOfOps(const Instruction *I) {
2622 if (!EnablePhiOfOps)
2623 return false;
2624 return isa<BinaryOperator>(I) || isa<SelectInst>(I) || isa<CmpInst>(I) ||
2625 isa<LoadInst>(I);
2626}
2627
2628// Return true if this operand will be safe to use for phi of ops.
2629//
2630// The reason some operands are unsafe is that we are not trying to recursively
2631// translate everything back through phi nodes. We actually expect some lookups
2632// of expressions to fail. In particular, a lookup where the expression cannot
2633// exist in the predecessor. This is true even if the expression, as shown, can
2634// be determined to be constant.
2635bool NewGVN::OpIsSafeForPHIOfOps(Value *V, const BasicBlock *PHIBlock,
2637 SmallVector<Value *, 4> Worklist;
2638 Worklist.push_back(V);
2639 while (!Worklist.empty()) {
2640 auto *I = Worklist.pop_back_val();
2641 if (!isa<Instruction>(I))
2642 continue;
2643
2644 auto OISIt = OpSafeForPHIOfOps.find({I, CacheIdx});
2645 if (OISIt != OpSafeForPHIOfOps.end())
2646 return OISIt->second;
2647
2648 // Keep walking until we either dominate the phi block, or hit a phi, or run
2649 // out of things to check.
2650 if (DT->properlyDominates(getBlockForValue(I), PHIBlock)) {
2651 OpSafeForPHIOfOps.insert({{I, CacheIdx}, true});
2652 continue;
2653 }
2654 // PHI in the same block.
2655 if (isa<PHINode>(I) && getBlockForValue(I) == PHIBlock) {
2656 OpSafeForPHIOfOps.insert({{I, CacheIdx}, false});
2657 return false;
2658 }
2659
2660 auto *OrigI = cast<Instruction>(I);
2661 // When we hit an instruction that reads memory (load, call, etc), we must
2662 // consider any store that may happen in the loop. For now, we assume the
2663 // worst: there is a store in the loop that alias with this read.
2664 // The case where the load is outside the loop is already covered by the
2665 // dominator check above.
2666 // TODO: relax this condition
2667 if (OrigI->mayReadFromMemory())
2668 return false;
2669
2670 // Check the operands of the current instruction.
2671 for (auto *Op : OrigI->operand_values()) {
2672 if (!isa<Instruction>(Op))
2673 continue;
2674 // Stop now if we find an unsafe operand.
2675 auto OISIt = OpSafeForPHIOfOps.find({OrigI, CacheIdx});
2676 if (OISIt != OpSafeForPHIOfOps.end()) {
2677 if (!OISIt->second) {
2678 OpSafeForPHIOfOps.insert({{I, CacheIdx}, false});
2679 return false;
2680 }
2681 continue;
2682 }
2683 if (!Visited.insert(Op).second)
2684 continue;
2685 Worklist.push_back(cast<Instruction>(Op));
2686 }
2687 }
2688 OpSafeForPHIOfOps.insert({{V, CacheIdx}, true});
2689 return true;
2690}
2691
2692// Try to find a leader for instruction TransInst, which is a phi translated
2693// version of something in our original program. Visited is used to ensure we
2694// don't infinite loop during translations of cycles. OrigInst is the
2695// instruction in the original program, and PredBB is the predecessor we
2696// translated it through.
2697Value *NewGVN::findLeaderForInst(Instruction *TransInst,
2698 SmallPtrSetImpl<Value *> &Visited,
2699 MemoryAccess *MemAccess, Instruction *OrigInst,
2700 BasicBlock *PredBB) {
2701 unsigned IDFSNum = InstrToDFSNum(OrigInst);
2702 // Make sure it's marked as a temporary instruction.
2703 AllTempInstructions.insert(TransInst);
2704 // and make sure anything that tries to add it's DFS number is
2705 // redirected to the instruction we are making a phi of ops
2706 // for.
2707 TempToBlock.insert({TransInst, PredBB});
2708 InstrDFS.insert({TransInst, IDFSNum});
2709
2710 auto Res = performSymbolicEvaluation(TransInst, Visited);
2711 const Expression *E = Res.Expr;
2712 addAdditionalUsers(Res, OrigInst);
2713 InstrDFS.erase(TransInst);
2714 AllTempInstructions.erase(TransInst);
2715 TempToBlock.erase(TransInst);
2716 if (MemAccess)
2717 TempToMemory.erase(TransInst);
2718 if (!E)
2719 return nullptr;
2720 auto *FoundVal = findPHIOfOpsLeader(E, OrigInst, PredBB);
2721 if (!FoundVal) {
2722 ExpressionToPhiOfOps[E].insert(OrigInst);
2723 LLVM_DEBUG(dbgs() << "Cannot find phi of ops operand for " << *TransInst
2724 << " in block " << getBlockName(PredBB) << "\n");
2725 return nullptr;
2726 }
2727 if (auto *SI = dyn_cast<StoreInst>(FoundVal))
2728 FoundVal = SI->getValueOperand();
2729 return FoundVal;
2730}
2731
2732// When we see an instruction that is an op of phis, generate the equivalent phi
2733// of ops form.
2734const Expression *
2735NewGVN::makePossiblePHIOfOps(Instruction *I,
2736 SmallPtrSetImpl<Value *> &Visited) {
2737 if (!okayForPHIOfOps(I))
2738 return nullptr;
2739
2740 if (!Visited.insert(I).second)
2741 return nullptr;
2742 // For now, we require the instruction be cycle free because we don't
2743 // *always* create a phi of ops for instructions that could be done as phi
2744 // of ops, we only do it if we think it is useful. If we did do it all the
2745 // time, we could remove the cycle free check.
2746 if (!isCycleFree(I))
2747 return nullptr;
2748
2749 SmallPtrSet<const Value *, 8> ProcessedPHIs;
2750 // TODO: We don't do phi translation on memory accesses because it's
2751 // complicated. For a load, we'd need to be able to simulate a new memoryuse,
2752 // which we don't have a good way of doing ATM.
2753 auto *MemAccess = getMemoryAccess(I);
2754 // If the memory operation is defined by a memory operation this block that
2755 // isn't a MemoryPhi, transforming the pointer backwards through a scalar phi
2756 // can't help, as it would still be killed by that memory operation.
2757 if (MemAccess && !isa<MemoryPhi>(MemAccess->getDefiningAccess()) &&
2758 MemAccess->getDefiningAccess()->getBlock() == I->getParent())
2759 return nullptr;
2760
2761 // Convert op of phis to phi of ops
2763 SmallVector<Value *, 4> Ops(I->operand_values());
2764 BasicBlock *SamePHIBlock = nullptr;
2765 PHINode *OpPHI = nullptr;
2766 if (!DebugCounter::shouldExecute(PHIOfOpsCounter))
2767 return nullptr;
2768 for (auto *Op : Ops) {
2769 if (!isa<PHINode>(Op)) {
2770 auto *ValuePHI = RealToTemp.lookup(Op);
2771 if (!ValuePHI)
2772 continue;
2773 LLVM_DEBUG(dbgs() << "Found possible dependent phi of ops\n");
2774 Op = ValuePHI;
2775 }
2776 OpPHI = cast<PHINode>(Op);
2777 if (!SamePHIBlock) {
2778 SamePHIBlock = getBlockForValue(OpPHI);
2779 } else if (SamePHIBlock != getBlockForValue(OpPHI)) {
2780 LLVM_DEBUG(
2781 dbgs()
2782 << "PHIs for operands are not all in the same block, aborting\n");
2783 return nullptr;
2784 }
2785 // No point in doing this for one-operand phis.
2786 // Since all PHIs for operands must be in the same block, then they must
2787 // have the same number of operands so we can just abort.
2788 if (OpPHI->getNumOperands() == 1)
2789 return nullptr;
2790 }
2791
2792 if (!OpPHI)
2793 return nullptr;
2794
2797 auto *PHIBlock = getBlockForValue(OpPHI);
2798 RevisitOnReachabilityChange[PHIBlock].reset(InstrToDFSNum(I));
2799 for (unsigned PredNum = 0; PredNum < OpPHI->getNumOperands(); ++PredNum) {
2800 auto *PredBB = OpPHI->getIncomingBlock(PredNum);
2801 Value *FoundVal = nullptr;
2802 SmallPtrSet<Value *, 4> CurrentDeps;
2803 // We could just skip unreachable edges entirely but it's tricky to do
2804 // with rewriting existing phi nodes.
2805 if (ReachableEdges.count({PredBB, PHIBlock})) {
2806 // Clone the instruction, create an expression from it that is
2807 // translated back into the predecessor, and see if we have a leader.
2808 Instruction *ValueOp = I->clone();
2809 // Emit the temporal instruction in the predecessor basic block where the
2810 // corresponding value is defined.
2811 ValueOp->insertBefore(PredBB->getTerminator());
2812 if (MemAccess)
2813 TempToMemory.insert({ValueOp, MemAccess});
2814 bool SafeForPHIOfOps = true;
2815 VisitedOps.clear();
2816 for (auto &Op : ValueOp->operands()) {
2817 auto *OrigOp = &*Op;
2818 // When these operand changes, it could change whether there is a
2819 // leader for us or not, so we have to add additional users.
2820 if (isa<PHINode>(Op)) {
2821 Op = Op->DoPHITranslation(PHIBlock, PredBB);
2822 if (Op != OrigOp && Op != I)
2823 CurrentDeps.insert(Op);
2824 } else if (auto *ValuePHI = RealToTemp.lookup(Op)) {
2825 if (getBlockForValue(ValuePHI) == PHIBlock)
2826 Op = ValuePHI->getIncomingValueForBlock(PredBB);
2827 }
2828 // If we phi-translated the op, it must be safe.
2829 SafeForPHIOfOps =
2830 SafeForPHIOfOps &&
2831 (Op != OrigOp || OpIsSafeForPHIOfOps(Op, PHIBlock, VisitedOps));
2832 }
2833 // FIXME: For those things that are not safe we could generate
2834 // expressions all the way down, and see if this comes out to a
2835 // constant. For anything where that is true, and unsafe, we should
2836 // have made a phi-of-ops (or value numbered it equivalent to something)
2837 // for the pieces already.
2838 FoundVal = !SafeForPHIOfOps ? nullptr
2839 : findLeaderForInst(ValueOp, Visited,
2840 MemAccess, I, PredBB);
2841 ValueOp->eraseFromParent();
2842 if (!FoundVal) {
2843 // We failed to find a leader for the current ValueOp, but this might
2844 // change in case of the translated operands change.
2845 if (SafeForPHIOfOps)
2846 for (auto *Dep : CurrentDeps)
2847 addAdditionalUsers(Dep, I);
2848
2849 return nullptr;
2850 }
2851 Deps.insert(CurrentDeps.begin(), CurrentDeps.end());
2852 } else {
2853 LLVM_DEBUG(dbgs() << "Skipping phi of ops operand for incoming block "
2854 << getBlockName(PredBB)
2855 << " because the block is unreachable\n");
2856 FoundVal = PoisonValue::get(I->getType());
2857 RevisitOnReachabilityChange[PHIBlock].set(InstrToDFSNum(I));
2858 }
2859
2860 PHIOps.push_back({FoundVal, PredBB});
2861 LLVM_DEBUG(dbgs() << "Found phi of ops operand " << *FoundVal << " in "
2862 << getBlockName(PredBB) << "\n");
2863 }
2864 for (auto *Dep : Deps)
2865 addAdditionalUsers(Dep, I);
2866 sortPHIOps(PHIOps);
2867 auto *E = performSymbolicPHIEvaluation(PHIOps, I, PHIBlock);
2868 if (isa<ConstantExpression>(E) || isa<VariableExpression>(E)) {
2869 LLVM_DEBUG(
2870 dbgs()
2871 << "Not creating real PHI of ops because it simplified to existing "
2872 "value or constant\n");
2873 // We have leaders for all operands, but do not create a real PHI node with
2874 // those leaders as operands, so the link between the operands and the
2875 // PHI-of-ops is not materialized in the IR. If any of those leaders
2876 // changes, the PHI-of-op may change also, so we need to add the operands as
2877 // additional users.
2878 for (auto &O : PHIOps)
2879 addAdditionalUsers(O.first, I);
2880
2881 return E;
2882 }
2883 auto *ValuePHI = RealToTemp.lookup(I);
2884 bool NewPHI = false;
2885 if (!ValuePHI) {
2886 ValuePHI =
2887 PHINode::Create(I->getType(), OpPHI->getNumOperands(), "phiofops");
2888 addPhiOfOps(ValuePHI, PHIBlock, I);
2889 NewPHI = true;
2890 NumGVNPHIOfOpsCreated++;
2891 }
2892 if (NewPHI) {
2893 for (auto PHIOp : PHIOps)
2894 ValuePHI->addIncoming(PHIOp.first, PHIOp.second);
2895 } else {
2896 TempToBlock[ValuePHI] = PHIBlock;
2897 unsigned int i = 0;
2898 for (auto PHIOp : PHIOps) {
2899 ValuePHI->setIncomingValue(i, PHIOp.first);
2900 ValuePHI->setIncomingBlock(i, PHIOp.second);
2901 ++i;
2902 }
2903 }
2904 RevisitOnReachabilityChange[PHIBlock].set(InstrToDFSNum(I));
2905 LLVM_DEBUG(dbgs() << "Created phi of ops " << *ValuePHI << " for " << *I
2906 << "\n");
2907
2908 return E;
2909}
2910
2911// The algorithm initially places the values of the routine in the TOP
2912// congruence class. The leader of TOP is the undetermined value `poison`.
2913// When the algorithm has finished, values still in TOP are unreachable.
2914void NewGVN::initializeCongruenceClasses(Function &F) {
2915 NextCongruenceNum = 0;
2916
2917 // Note that even though we use the live on entry def as a representative
2918 // MemoryAccess, it is *not* the same as the actual live on entry def. We
2919 // have no real equivalent to poison for MemoryAccesses, and so we really
2920 // should be checking whether the MemoryAccess is top if we want to know if it
2921 // is equivalent to everything. Otherwise, what this really signifies is that
2922 // the access "it reaches all the way back to the beginning of the function"
2923
2924 // Initialize all other instructions to be in TOP class.
2925 TOPClass = createCongruenceClass(nullptr, nullptr);
2926 TOPClass->setMemoryLeader(MSSA->getLiveOnEntryDef());
2927 // The live on entry def gets put into it's own class
2928 MemoryAccessToClass[MSSA->getLiveOnEntryDef()] =
2929 createMemoryClass(MSSA->getLiveOnEntryDef());
2930
2931 for (auto *DTN : nodes(DT)) {
2932 BasicBlock *BB = DTN->getBlock();
2933 // All MemoryAccesses are equivalent to live on entry to start. They must
2934 // be initialized to something so that initial changes are noticed. For
2935 // the maximal answer, we initialize them all to be the same as
2936 // liveOnEntry.
2937 auto *MemoryBlockDefs = MSSA->getBlockDefs(BB);
2938 if (MemoryBlockDefs)
2939 for (const auto &Def : *MemoryBlockDefs) {
2940 MemoryAccessToClass[&Def] = TOPClass;
2941 auto *MD = dyn_cast<MemoryDef>(&Def);
2942 // Insert the memory phis into the member list.
2943 if (!MD) {
2944 const MemoryPhi *MP = cast<MemoryPhi>(&Def);
2945 TOPClass->memory_insert(MP);
2946 MemoryPhiState.insert({MP, MPS_TOP});
2947 }
2948
2949 if (MD && isa<StoreInst>(MD->getMemoryInst()))
2950 TOPClass->incStoreCount();
2951 }
2952
2953 // FIXME: This is trying to discover which instructions are uses of phi
2954 // nodes. We should move this into one of the myriad of places that walk
2955 // all the operands already.
2956 for (auto &I : *BB) {
2957 if (isa<PHINode>(&I))
2958 for (auto *U : I.users())
2959 if (auto *UInst = dyn_cast<Instruction>(U))
2960 if (InstrToDFSNum(UInst) != 0 && okayForPHIOfOps(UInst))
2961 PHINodeUses.insert(UInst);
2962 // Don't insert void terminators into the class. We don't value number
2963 // them, and they just end up sitting in TOP.
2964 if (I.isTerminator() && I.getType()->isVoidTy())
2965 continue;
2966 TOPClass->insert(&I);
2967 ValueToClass[&I] = TOPClass;
2968 }
2969 }
2970
2971 // Initialize arguments to be in their own unique congruence classes
2972 for (auto &FA : F.args())
2973 createSingletonCongruenceClass(&FA);
2974}
2975
2976void NewGVN::cleanupTables() {
2977 for (CongruenceClass *&CC : CongruenceClasses) {
2978 LLVM_DEBUG(dbgs() << "Congruence class " << CC->getID() << " has "
2979 << CC->size() << " members\n");
2980 // Make sure we delete the congruence class (probably worth switching to
2981 // a unique_ptr at some point.
2982 delete CC;
2983 CC = nullptr;
2984 }
2985
2986 // Destroy the value expressions
2987 SmallVector<Instruction *, 8> TempInst(AllTempInstructions.begin(),
2988 AllTempInstructions.end());
2989 AllTempInstructions.clear();
2990
2991 // We have to drop all references for everything first, so there are no uses
2992 // left as we delete them.
2993 for (auto *I : TempInst) {
2994 I->dropAllReferences();
2995 }
2996
2997 while (!TempInst.empty()) {
2998 auto *I = TempInst.pop_back_val();
2999 I->deleteValue();
3000 }
3001
3002 ValueToClass.clear();
3003 ArgRecycler.clear(ExpressionAllocator);
3004 ExpressionAllocator.Reset();
3005 CongruenceClasses.clear();
3006 ExpressionToClass.clear();
3007 ValueToExpression.clear();
3008 RealToTemp.clear();
3009 AdditionalUsers.clear();
3010 ExpressionToPhiOfOps.clear();
3011 TempToBlock.clear();
3012 TempToMemory.clear();
3013 PHINodeUses.clear();
3014 OpSafeForPHIOfOps.clear();
3015 ReachableBlocks.clear();
3016 ReachableEdges.clear();
3017#ifndef NDEBUG
3018 ProcessedCount.clear();
3019#endif
3020 InstrDFS.clear();
3021 InstructionsToErase.clear();
3022 DFSToInstr.clear();
3023 BlockInstRange.clear();
3024 TouchedInstructions.clear();
3025 MemoryAccessToClass.clear();
3026 PredicateToUsers.clear();
3027 MemoryToUsers.clear();
3028 RevisitOnReachabilityChange.clear();
3029 IntrinsicInstPred.clear();
3030}
3031
3032// Assign local DFS number mapping to instructions, and leave space for Value
3033// PHI's.
3034std::pair<unsigned, unsigned> NewGVN::assignDFSNumbers(BasicBlock *B,
3035 unsigned Start) {
3036 unsigned End = Start;
3037 if (MemoryAccess *MemPhi = getMemoryAccess(B)) {
3038 InstrDFS[MemPhi] = End++;
3039 DFSToInstr.emplace_back(MemPhi);
3040 }
3041
3042 // Then the real block goes next.
3043 for (auto &I : *B) {
3044 // There's no need to call isInstructionTriviallyDead more than once on
3045 // an instruction. Therefore, once we know that an instruction is dead
3046 // we change its DFS number so that it doesn't get value numbered.
3047 if (isInstructionTriviallyDead(&I, TLI)) {
3048 InstrDFS[&I] = 0;
3049 LLVM_DEBUG(dbgs() << "Skipping trivially dead instruction " << I << "\n");
3050 markInstructionForDeletion(&I);
3051 continue;
3052 }
3053 if (isa<PHINode>(&I))
3054 RevisitOnReachabilityChange[B].set(End);
3055 InstrDFS[&I] = End++;
3056 DFSToInstr.emplace_back(&I);
3057 }
3058
3059 // All of the range functions taken half-open ranges (open on the end side).
3060 // So we do not subtract one from count, because at this point it is one
3061 // greater than the last instruction.
3062 return std::make_pair(Start, End);
3063}
3064
3065void NewGVN::updateProcessedCount(const Value *V) {
3066#ifndef NDEBUG
3067 if (ProcessedCount.count(V) == 0) {
3068 ProcessedCount.insert({V, 1});
3069 } else {
3070 ++ProcessedCount[V];
3071 assert(ProcessedCount[V] < 100 &&
3072 "Seem to have processed the same Value a lot");
3073 }
3074#endif
3075}
3076
3077// Evaluate MemoryPhi nodes symbolically, just like PHI nodes
3078void NewGVN::valueNumberMemoryPhi(MemoryPhi *MP) {
3079 // If all the arguments are the same, the MemoryPhi has the same value as the
3080 // argument. Filter out unreachable blocks and self phis from our operands.
3081 // TODO: We could do cycle-checking on the memory phis to allow valueizing for
3082 // self-phi checking.
3083 const BasicBlock *PHIBlock = MP->getBlock();
3084 auto Filtered = make_filter_range(MP->operands(), [&](const Use &U) {
3085 return cast<MemoryAccess>(U) != MP &&
3086 !isMemoryAccessTOP(cast<MemoryAccess>(U)) &&
3087 ReachableEdges.count({MP->getIncomingBlock(U), PHIBlock});
3088 });
3089 // If all that is left is nothing, our memoryphi is poison. We keep it as
3090 // InitialClass. Note: The only case this should happen is if we have at
3091 // least one self-argument.
3092 if (Filtered.begin() == Filtered.end()) {
3093 if (setMemoryClass(MP, TOPClass))
3094 markMemoryUsersTouched(MP);
3095 return;
3096 }
3097
3098 // Transform the remaining operands into operand leaders.
3099 // FIXME: mapped_iterator should have a range version.
3100 auto LookupFunc = [&](const Use &U) {
3101 return lookupMemoryLeader(cast<MemoryAccess>(U));
3102 };
3103 auto MappedBegin = map_iterator(Filtered.begin(), LookupFunc);
3104 auto MappedEnd = map_iterator(Filtered.end(), LookupFunc);
3105
3106 // and now check if all the elements are equal.
3107 // Sadly, we can't use std::equals since these are random access iterators.
3108 const auto *AllSameValue = *MappedBegin;
3109 ++MappedBegin;
3110 bool AllEqual = std::all_of(
3111 MappedBegin, MappedEnd,
3112 [&AllSameValue](const MemoryAccess *V) { return V == AllSameValue; });
3113
3114 if (AllEqual)
3115 LLVM_DEBUG(dbgs() << "Memory Phi value numbered to " << *AllSameValue
3116 << "\n");
3117 else
3118 LLVM_DEBUG(dbgs() << "Memory Phi value numbered to itself\n");
3119 // If it's equal to something, it's in that class. Otherwise, it has to be in
3120 // a class where it is the leader (other things may be equivalent to it, but
3121 // it needs to start off in its own class, which means it must have been the
3122 // leader, and it can't have stopped being the leader because it was never
3123 // removed).
3124 CongruenceClass *CC =
3125 AllEqual ? getMemoryClass(AllSameValue) : ensureLeaderOfMemoryClass(MP);
3126 auto OldState = MemoryPhiState.lookup(MP);
3127 assert(OldState != MPS_Invalid && "Invalid memory phi state");
3128 auto NewState = AllEqual ? MPS_Equivalent : MPS_Unique;
3129 MemoryPhiState[MP] = NewState;
3130 if (setMemoryClass(MP, CC) || OldState != NewState)
3131 markMemoryUsersTouched(MP);
3132}
3133
3134// Value number a single instruction, symbolically evaluating, performing
3135// congruence finding, and updating mappings.
3136void NewGVN::valueNumberInstruction(Instruction *I) {
3137 LLVM_DEBUG(dbgs() << "Processing instruction " << *I << "\n");
3138 if (!I->isTerminator()) {
3139 const Expression *Symbolized = nullptr;
3141 if (DebugCounter::shouldExecute(VNCounter)) {
3142 auto Res = performSymbolicEvaluation(I, Visited);
3143 Symbolized = Res.Expr;
3144 addAdditionalUsers(Res, I);
3145
3146 // Make a phi of ops if necessary
3147 if (Symbolized && !isa<ConstantExpression>(Symbolized) &&
3148 !isa<VariableExpression>(Symbolized) && PHINodeUses.count(I)) {
3149 auto *PHIE = makePossiblePHIOfOps(I, Visited);
3150 // If we created a phi of ops, use it.
3151 // If we couldn't create one, make sure we don't leave one lying around
3152 if (PHIE) {
3153 Symbolized = PHIE;
3154 } else if (auto *Op = RealToTemp.lookup(I)) {
3155 removePhiOfOps(I, Op);
3156 }
3157 }
3158 } else {
3159 // Mark the instruction as unused so we don't value number it again.
3160 InstrDFS[I] = 0;
3161 }
3162 // If we couldn't come up with a symbolic expression, use the unknown
3163 // expression
3164 if (Symbolized == nullptr)
3165 Symbolized = createUnknownExpression(I);
3166 performCongruenceFinding(I, Symbolized);
3167 } else {
3168 // Handle terminators that return values. All of them produce values we
3169 // don't currently understand. We don't place non-value producing
3170 // terminators in a class.
3171 if (!I->getType()->isVoidTy()) {
3172 auto *Symbolized = createUnknownExpression(I);
3173 performCongruenceFinding(I, Symbolized);
3174 }
3175 processOutgoingEdges(I, I->getParent());
3176 }
3177}
3178
3179// Check if there is a path, using single or equal argument phi nodes, from
3180// First to Second.
3181bool NewGVN::singleReachablePHIPath(
3183 const MemoryAccess *Second) const {
3184 if (First == Second)
3185 return true;
3186 if (MSSA->isLiveOnEntryDef(First))
3187 return false;
3188
3189 // This is not perfect, but as we're just verifying here, we can live with
3190 // the loss of precision. The real solution would be that of doing strongly
3191 // connected component finding in this routine, and it's probably not worth
3192 // the complexity for the time being. So, we just keep a set of visited
3193 // MemoryAccess and return true when we hit a cycle.
3194 if (!Visited.insert(First).second)
3195 return true;
3196
3197 const auto *EndDef = First;
3198 for (const auto *ChainDef : optimized_def_chain(First)) {
3199 if (ChainDef == Second)
3200 return true;
3201 if (MSSA->isLiveOnEntryDef(ChainDef))
3202 return false;
3203 EndDef = ChainDef;
3204 }
3205 auto *MP = cast<MemoryPhi>(EndDef);
3206 auto ReachableOperandPred = [&](const Use &U) {
3207 return ReachableEdges.count({MP->getIncomingBlock(U), MP->getBlock()});
3208 };
3209 auto FilteredPhiArgs =
3210 make_filter_range(MP->operands(), ReachableOperandPred);
3212 llvm::copy(FilteredPhiArgs, std::back_inserter(OperandList));
3213 bool Okay = all_equal(OperandList);
3214 if (Okay)
3215 return singleReachablePHIPath(Visited, cast<MemoryAccess>(OperandList[0]),
3216 Second);
3217 return false;
3218}
3219
3220// Verify the that the memory equivalence table makes sense relative to the
3221// congruence classes. Note that this checking is not perfect, and is currently
3222// subject to very rare false negatives. It is only useful for
3223// testing/debugging.
3224void NewGVN::verifyMemoryCongruency() const {
3225#ifndef NDEBUG
3226 // Verify that the memory table equivalence and memory member set match
3227 for (const auto *CC : CongruenceClasses) {
3228 if (CC == TOPClass || CC->isDead())
3229 continue;
3230 if (CC->getStoreCount() != 0) {
3231 assert((CC->getStoredValue() || !isa<StoreInst>(CC->getLeader())) &&
3232 "Any class with a store as a leader should have a "
3233 "representative stored value");
3234 assert(CC->getMemoryLeader() &&
3235 "Any congruence class with a store should have a "
3236 "representative access");
3237 }
3238
3239 if (CC->getMemoryLeader())
3240 assert(MemoryAccessToClass.lookup(CC->getMemoryLeader()) == CC &&
3241 "Representative MemoryAccess does not appear to be reverse "
3242 "mapped properly");
3243 for (const auto *M : CC->memory())
3244 assert(MemoryAccessToClass.lookup(M) == CC &&
3245 "Memory member does not appear to be reverse mapped properly");
3246 }
3247
3248 // Anything equivalent in the MemoryAccess table should be in the same
3249 // congruence class.
3250
3251 // Filter out the unreachable and trivially dead entries, because they may
3252 // never have been updated if the instructions were not processed.
3253 auto ReachableAccessPred =
3254 [&](const std::pair<const MemoryAccess *, CongruenceClass *> Pair) {
3255 bool Result = ReachableBlocks.count(Pair.first->getBlock());
3256 if (!Result || MSSA->isLiveOnEntryDef(Pair.first) ||
3257 MemoryToDFSNum(Pair.first) == 0)
3258 return false;
3259 if (auto *MemDef = dyn_cast<MemoryDef>(Pair.first))
3260 return !isInstructionTriviallyDead(MemDef->getMemoryInst());
3261
3262 // We could have phi nodes which operands are all trivially dead,
3263 // so we don't process them.
3264 if (auto *MemPHI = dyn_cast<MemoryPhi>(Pair.first)) {
3265 for (const auto &U : MemPHI->incoming_values()) {
3266 if (auto *I = dyn_cast<Instruction>(&*U)) {
3268 return true;
3269 }
3270 }
3271 return false;
3272 }
3273
3274 return true;
3275 };
3276
3277 auto Filtered = make_filter_range(MemoryAccessToClass, ReachableAccessPred);
3278 for (auto KV : Filtered) {
3279 if (auto *FirstMUD = dyn_cast<MemoryUseOrDef>(KV.first)) {
3280 auto *SecondMUD = dyn_cast<MemoryUseOrDef>(KV.second->getMemoryLeader());
3281 if (FirstMUD && SecondMUD) {
3283 assert((singleReachablePHIPath(VisitedMAS, FirstMUD, SecondMUD) ||
3284 ValueToClass.lookup(FirstMUD->getMemoryInst()) ==
3285 ValueToClass.lookup(SecondMUD->getMemoryInst())) &&
3286 "The instructions for these memory operations should have "
3287 "been in the same congruence class or reachable through"
3288 "a single argument phi");
3289 }
3290 } else if (auto *FirstMP = dyn_cast<MemoryPhi>(KV.first)) {
3291 // We can only sanely verify that MemoryDefs in the operand list all have
3292 // the same class.
3293 auto ReachableOperandPred = [&](const Use &U) {
3294 return ReachableEdges.count(
3295 {FirstMP->getIncomingBlock(U), FirstMP->getBlock()}) &&
3296 isa<MemoryDef>(U);
3297 };
3298 // All arguments should in the same class, ignoring unreachable arguments
3299 auto FilteredPhiArgs =
3300 make_filter_range(FirstMP->operands(), ReachableOperandPred);
3302 std::transform(FilteredPhiArgs.begin(), FilteredPhiArgs.end(),
3303 std::back_inserter(PhiOpClasses), [&](const Use &U) {
3304 const MemoryDef *MD = cast<MemoryDef>(U);
3305 return ValueToClass.lookup(MD->getMemoryInst());
3306 });
3307 assert(all_equal(PhiOpClasses) &&
3308 "All MemoryPhi arguments should be in the same class");
3309 }
3310 }
3311#endif
3312}
3313
3314// Verify that the sparse propagation we did actually found the maximal fixpoint
3315// We do this by storing the value to class mapping, touching all instructions,
3316// and redoing the iteration to see if anything changed.
3317void NewGVN::verifyIterationSettled(Function &F) {
3318#ifndef NDEBUG
3319 LLVM_DEBUG(dbgs() << "Beginning iteration verification\n");
3320 if (DebugCounter::isCounterSet(VNCounter))
3321 DebugCounter::setCounterState(VNCounter, StartingVNCounter);
3322
3323 // Note that we have to store the actual classes, as we may change existing
3324 // classes during iteration. This is because our memory iteration propagation
3325 // is not perfect, and so may waste a little work. But it should generate
3326 // exactly the same congruence classes we have now, with different IDs.
3327 std::map<const Value *, CongruenceClass> BeforeIteration;
3328
3329 for (auto &KV : ValueToClass) {
3330 if (auto *I = dyn_cast<Instruction>(KV.first))
3331 // Skip unused/dead instructions.
3332 if (InstrToDFSNum(I) == 0)
3333 continue;
3334 BeforeIteration.insert({KV.first, *KV.second});
3335 }
3336
3337 TouchedInstructions.set();
3338 TouchedInstructions.reset(0);
3339 OpSafeForPHIOfOps.clear();
3340 CacheIdx = 0;
3341 iterateTouchedInstructions();
3343 EqualClasses;
3344 for (const auto &KV : ValueToClass) {
3345 if (auto *I = dyn_cast<Instruction>(KV.first))
3346 // Skip unused/dead instructions.
3347 if (InstrToDFSNum(I) == 0)
3348 continue;
3349 // We could sink these uses, but i think this adds a bit of clarity here as
3350 // to what we are comparing.
3351 auto *BeforeCC = &BeforeIteration.find(KV.first)->second;
3352 auto *AfterCC = KV.second;
3353 // Note that the classes can't change at this point, so we memoize the set
3354 // that are equal.
3355 if (!EqualClasses.count({BeforeCC, AfterCC})) {
3356 assert(BeforeCC->isEquivalentTo(AfterCC) &&
3357 "Value number changed after main loop completed!");
3358 EqualClasses.insert({BeforeCC, AfterCC});
3359 }
3360 }
3361#endif
3362}
3363
3364// Verify that for each store expression in the expression to class mapping,
3365// only the latest appears, and multiple ones do not appear.
3366// Because loads do not use the stored value when doing equality with stores,
3367// if we don't erase the old store expressions from the table, a load can find
3368// a no-longer valid StoreExpression.
3369void NewGVN::verifyStoreExpressions() const {
3370#ifndef NDEBUG
3371 // This is the only use of this, and it's not worth defining a complicated
3372 // densemapinfo hash/equality function for it.
3373 std::set<
3374 std::pair<const Value *,
3375 std::tuple<const Value *, const CongruenceClass *, Value *>>>
3376 StoreExpressionSet;
3377 for (const auto &KV : ExpressionToClass) {
3378 if (auto *SE = dyn_cast<StoreExpression>(KV.first)) {
3379 // Make sure a version that will conflict with loads is not already there
3380 auto Res = StoreExpressionSet.insert(
3381 {SE->getOperand(0), std::make_tuple(SE->getMemoryLeader(), KV.second,
3382 SE->getStoredValue())});
3383 bool Okay = Res.second;
3384 // It's okay to have the same expression already in there if it is
3385 // identical in nature.
3386 // This can happen when the leader of the stored value changes over time.
3387 if (!Okay)
3388 Okay = (std::get<1>(Res.first->second) == KV.second) &&
3389 (lookupOperandLeader(std::get<2>(Res.first->second)) ==
3390 lookupOperandLeader(SE->getStoredValue()));
3391 assert(Okay && "Stored expression conflict exists in expression table");
3392 auto *ValueExpr = ValueToExpression.lookup(SE->getStoreInst());
3393 assert(ValueExpr && ValueExpr->equals(*SE) &&
3394 "StoreExpression in ExpressionToClass is not latest "
3395 "StoreExpression for value");
3396 }
3397 }
3398#endif
3399}
3400
3401// This is the main value numbering loop, it iterates over the initial touched
3402// instruction set, propagating value numbers, marking things touched, etc,
3403// until the set of touched instructions is completely empty.
3404void NewGVN::iterateTouchedInstructions() {
3405 uint64_t Iterations = 0;
3406 // Figure out where touchedinstructions starts
3407 int FirstInstr = TouchedInstructions.find_first();
3408 // Nothing set, nothing to iterate, just return.
3409 if (FirstInstr == -1)
3410 return;
3411 const BasicBlock *LastBlock = getBlockForValue(InstrFromDFSNum(FirstInstr));
3412 while (TouchedInstructions.any()) {
3413 ++Iterations;
3414 // Walk through all the instructions in all the blocks in RPO.
3415 // TODO: As we hit a new block, we should push and pop equalities into a
3416 // table lookupOperandLeader can use, to catch things PredicateInfo
3417 // might miss, like edge-only equivalences.
3418 for (unsigned InstrNum : TouchedInstructions.set_bits()) {
3419
3420 // This instruction was found to be dead. We don't bother looking
3421 // at it again.
3422 if (InstrNum == 0) {
3423 TouchedInstructions.reset(InstrNum);
3424 continue;
3425 }
3426
3427 Value *V = InstrFromDFSNum(InstrNum);
3428 const BasicBlock *CurrBlock = getBlockForValue(V);
3429
3430 // If we hit a new block, do reachability processing.
3431 if (CurrBlock != LastBlock) {
3432 LastBlock = CurrBlock;
3433 bool BlockReachable = ReachableBlocks.count(CurrBlock);
3434 const auto &CurrInstRange = BlockInstRange.lookup(CurrBlock);
3435
3436 // If it's not reachable, erase any touched instructions and move on.
3437 if (!BlockReachable) {
3438 TouchedInstructions.reset(CurrInstRange.first, CurrInstRange.second);
3439 LLVM_DEBUG(dbgs() << "Skipping instructions in block "
3440 << getBlockName(CurrBlock)
3441 << " because it is unreachable\n");
3442 continue;
3443 }
3444 // Use the appropriate cache for "OpIsSafeForPHIOfOps".
3445 CacheIdx = RPOOrdering.lookup(DT->getNode(CurrBlock)) - 1;
3446 updateProcessedCount(CurrBlock);
3447 }
3448 // Reset after processing (because we may mark ourselves as touched when
3449 // we propagate equalities).
3450 TouchedInstructions.reset(InstrNum);
3451
3452 if (auto *MP = dyn_cast<MemoryPhi>(V)) {
3453 LLVM_DEBUG(dbgs() << "Processing MemoryPhi " << *MP << "\n");
3454 valueNumberMemoryPhi(MP);
3455 } else if (auto *I = dyn_cast<Instruction>(V)) {
3456 valueNumberInstruction(I);
3457 } else {
3458 llvm_unreachable("Should have been a MemoryPhi or Instruction");
3459 }
3460 updateProcessedCount(V);
3461 }
3462 }
3463 NumGVNMaxIterations = std::max(NumGVNMaxIterations.getValue(), Iterations);
3464}
3465
3466// This is the main transformation entry point.
3467bool NewGVN::runGVN() {
3468 if (DebugCounter::isCounterSet(VNCounter))
3469 StartingVNCounter = DebugCounter::getCounterState(VNCounter);
3470 bool Changed = false;
3471 NumFuncArgs = F.arg_size();
3472 MSSAWalker = MSSA->getWalker();
3473 SingletonDeadExpression = new (ExpressionAllocator) DeadExpression();
3474
3475 // Count number of instructions for sizing of hash tables, and come
3476 // up with a global dfs numbering for instructions.
3477 unsigned ICount = 1;
3478 // Add an empty instruction to account for the fact that we start at 1
3479 DFSToInstr.emplace_back(nullptr);
3480 // Note: We want ideal RPO traversal of the blocks, which is not quite the
3481 // same as dominator tree order, particularly with regard whether backedges
3482 // get visited first or second, given a block with multiple successors.
3483 // If we visit in the wrong order, we will end up performing N times as many
3484 // iterations.
3485 // The dominator tree does guarantee that, for a given dom tree node, it's
3486 // parent must occur before it in the RPO ordering. Thus, we only need to sort
3487 // the siblings.
3489 unsigned Counter = 0;
3490 for (auto &B : RPOT) {
3491 auto *Node = DT->getNode(B);
3492 assert(Node && "RPO and Dominator tree should have same reachability");
3493 RPOOrdering[Node] = ++Counter;
3494 }
3495 // Sort dominator tree children arrays into RPO.
3496 for (auto &B : RPOT) {
3497 auto *Node = DT->getNode(B);
3498 if (Node->getNumChildren() > 1)
3499 llvm::sort(*Node, [&](const DomTreeNode *A, const DomTreeNode *B) {
3500 return RPOOrdering[A] < RPOOrdering[B];
3501 });
3502 }
3503
3504 // Now a standard depth first ordering of the domtree is equivalent to RPO.
3505 for (auto *DTN : depth_first(DT->getRootNode())) {
3506 BasicBlock *B = DTN->getBlock();
3507 const auto &BlockRange = assignDFSNumbers(B, ICount);
3508 BlockInstRange.insert({B, BlockRange});
3509 ICount += BlockRange.second - BlockRange.first;
3510 }
3511 initializeCongruenceClasses(F);
3512
3513 TouchedInstructions.resize(ICount);
3514 // Ensure we don't end up resizing the expressionToClass map, as
3515 // that can be quite expensive. At most, we have one expression per
3516 // instruction.
3517 ExpressionToClass.reserve(ICount);
3518
3519 // Initialize the touched instructions to include the entry block.
3520 const auto &InstRange = BlockInstRange.lookup(&F.getEntryBlock());
3521 TouchedInstructions.set(InstRange.first, InstRange.second);
3522 LLVM_DEBUG(dbgs() << "Block " << getBlockName(&F.getEntryBlock())
3523 << " marked reachable\n");
3524 ReachableBlocks.insert(&F.getEntryBlock());
3525 // Use index corresponding to entry block.
3526 CacheIdx = 0;
3527
3528 iterateTouchedInstructions();
3529 verifyMemoryCongruency();
3530 verifyIterationSettled(F);
3531 verifyStoreExpressions();
3532
3533 Changed |= eliminateInstructions(F);
3534
3535 // Delete all instructions marked for deletion.
3536 for (Instruction *ToErase : InstructionsToErase) {
3537 if (!ToErase->use_empty())
3538 ToErase->replaceAllUsesWith(PoisonValue::get(ToErase->getType()));
3539
3540 assert(ToErase->getParent() &&
3541 "BB containing ToErase deleted unexpectedly!");
3542 ToErase->eraseFromParent();
3543 }
3544 Changed |= !InstructionsToErase.empty();
3545
3546 // Delete all unreachable blocks.
3547 auto UnreachableBlockPred = [&](const BasicBlock &BB) {
3548 return !ReachableBlocks.count(&BB);
3549 };
3550
3551 for (auto &BB : make_filter_range(F, UnreachableBlockPred)) {
3552 LLVM_DEBUG(dbgs() << "We believe block " << getBlockName(&BB)
3553 << " is unreachable\n");
3554 deleteInstructionsInBlock(&BB);
3555 Changed = true;
3556 }
3557
3558 cleanupTables();
3559 return Changed;
3560}
3561
3563 int DFSIn = 0;
3564 int DFSOut = 0;
3565 int LocalNum = 0;
3566
3567 // Only one of Def and U will be set.
3568 // The bool in the Def tells us whether the Def is the stored value of a
3569 // store.
3571 Use *U = nullptr;
3572
3573 bool operator<(const ValueDFS &Other) const {
3574 // It's not enough that any given field be less than - we have sets
3575 // of fields that need to be evaluated together to give a proper ordering.
3576 // For example, if you have;
3577 // DFS (1, 3)
3578 // Val 0
3579 // DFS (1, 2)
3580 // Val 50
3581 // We want the second to be less than the first, but if we just go field
3582 // by field, we will get to Val 0 < Val 50 and say the first is less than
3583 // the second. We only want it to be less than if the DFS orders are equal.
3584 //
3585 // Each LLVM instruction only produces one value, and thus the lowest-level
3586 // differentiator that really matters for the stack (and what we use as a
3587 // replacement) is the local dfs number.
3588 // Everything else in the structure is instruction level, and only affects
3589 // the order in which we will replace operands of a given instruction.
3590 //
3591 // For a given instruction (IE things with equal dfsin, dfsout, localnum),
3592 // the order of replacement of uses does not matter.
3593 // IE given,
3594 // a = 5
3595 // b = a + a
3596 // When you hit b, you will have two valuedfs with the same dfsin, out, and
3597 // localnum.
3598 // The .val will be the same as well.
3599 // The .u's will be different.
3600 // You will replace both, and it does not matter what order you replace them
3601 // in (IE whether you replace operand 2, then operand 1, or operand 1, then
3602 // operand 2).
3603 // Similarly for the case of same dfsin, dfsout, localnum, but different
3604 // .val's
3605 // a = 5
3606 // b = 6
3607 // c = a + b
3608 // in c, we will a valuedfs for a, and one for b,with everything the same
3609 // but .val and .u.
3610 // It does not matter what order we replace these operands in.
3611 // You will always end up with the same IR, and this is guaranteed.
3612 return std::tie(DFSIn, DFSOut, LocalNum, Def, U) <
3613 std::tie(Other.DFSIn, Other.DFSOut, Other.LocalNum, Other.Def,
3614 Other.U);
3615 }
3616};
3617
3618// This function converts the set of members for a congruence class from values,
3619// to sets of defs and uses with associated DFS info. The total number of
3620// reachable uses for each value is stored in UseCount, and instructions that
3621// seem
3622// dead (have no non-dead uses) are stored in ProbablyDead.
3623void NewGVN::convertClassToDFSOrdered(
3624 const CongruenceClass &Dense, SmallVectorImpl<ValueDFS> &DFSOrderedSet,
3626 SmallPtrSetImpl<Instruction *> &ProbablyDead) const {
3627 for (auto *D : Dense) {
3628 // First add the value.
3629 BasicBlock *BB = getBlockForValue(D);
3630 // Constants are handled prior to ever calling this function, so
3631 // we should only be left with instructions as members.
3632 assert(BB && "Should have figured out a basic block for value");
3633 ValueDFS VDDef;
3634 DomTreeNode *DomNode = DT->getNode(BB);
3635 VDDef.DFSIn = DomNode->getDFSNumIn();
3636 VDDef.DFSOut = DomNode->getDFSNumOut();
3637 // If it's a store, use the leader of the value operand, if it's always
3638 // available, or the value operand. TODO: We could do dominance checks to
3639 // find a dominating leader, but not worth it ATM.
3640 if (auto *SI = dyn_cast<StoreInst>(D)) {
3641 auto Leader = lookupOperandLeader(SI->getValueOperand());
3642 if (alwaysAvailable(Leader)) {
3643 VDDef.Def.setPointer(Leader);
3644 } else {
3645 VDDef.Def.setPointer(SI->getValueOperand());
3646 VDDef.Def.setInt(true);
3647 }
3648 } else {
3649 VDDef.Def.setPointer(D);
3650 }
3651 assert(isa<Instruction>(D) &&
3652 "The dense set member should always be an instruction");
3653 Instruction *Def = cast<Instruction>(D);
3654 VDDef.LocalNum = InstrToDFSNum(D);
3655 DFSOrderedSet.push_back(VDDef);
3656 // If there is a phi node equivalent, add it
3657 if (auto *PN = RealToTemp.lookup(Def)) {
3658 auto *PHIE =
3659 dyn_cast_or_null<PHIExpression>(ValueToExpression.lookup(Def));
3660 if (PHIE) {
3661 VDDef.Def.setInt(false);
3662 VDDef.Def.setPointer(PN);
3663 VDDef.LocalNum = 0;
3664 DFSOrderedSet.push_back(VDDef);
3665 }
3666 }
3667
3668 unsigned int UseCount = 0;
3669 // Now add the uses.
3670 for (auto &U : Def->uses()) {
3671 if (auto *I = dyn_cast<Instruction>(U.getUser())) {
3672 // Don't try to replace into dead uses
3673 if (InstructionsToErase.count(I))
3674 continue;
3675 ValueDFS VDUse;
3676 // Put the phi node uses in the incoming block.
3677 BasicBlock *IBlock;
3678 if (auto *P = dyn_cast<PHINode>(I)) {
3679 IBlock = P->getIncomingBlock(U);
3680 // Make phi node users appear last in the incoming block
3681 // they are from.
3682 VDUse.LocalNum = InstrDFS.size() + 1;
3683 } else {
3684 IBlock = getBlockForValue(I);
3685 VDUse.LocalNum = InstrToDFSNum(I);
3686 }
3687
3688 // Skip uses in unreachable blocks, as we're going
3689 // to delete them.
3690 if (!ReachableBlocks.contains(IBlock))
3691 continue;
3692
3693 DomTreeNode *DomNode = DT->getNode(IBlock);
3694 VDUse.DFSIn = DomNode->getDFSNumIn();
3695 VDUse.DFSOut = DomNode->getDFSNumOut();
3696 VDUse.U = &U;
3697 ++UseCount;
3698 DFSOrderedSet.emplace_back(VDUse);
3699 }
3700 }
3701
3702 // If there are no uses, it's probably dead (but it may have side-effects,
3703 // so not definitely dead. Otherwise, store the number of uses so we can
3704 // track if it becomes dead later).
3705 if (UseCount == 0)
3706 ProbablyDead.insert(Def);
3707 else
3708 UseCounts[Def] = UseCount;
3709 }
3710}
3711
3712// This function converts the set of members for a congruence class from values,
3713// to the set of defs for loads and stores, with associated DFS info.
3714void NewGVN::convertClassToLoadsAndStores(
3715 const CongruenceClass &Dense,
3716 SmallVectorImpl<ValueDFS> &LoadsAndStores) const {
3717 for (auto *D : Dense) {
3718 if (!isa<LoadInst>(D) && !isa<StoreInst>(D))
3719 continue;
3720
3721 BasicBlock *BB = getBlockForValue(D);
3722 ValueDFS VD;
3723 DomTreeNode *DomNode = DT->getNode(BB);
3724 VD.DFSIn = DomNode->getDFSNumIn();
3725 VD.DFSOut = DomNode->getDFSNumOut();
3726 VD.Def.setPointer(D);
3727
3728 // If it's an instruction, use the real local dfs number.
3729 if (auto *I = dyn_cast<Instruction>(D))
3730 VD.LocalNum = InstrToDFSNum(I);
3731 else
3732 llvm_unreachable("Should have been an instruction");
3733
3734 LoadsAndStores.emplace_back(VD);
3735 }
3736}
3737
3740 I->replaceAllUsesWith(Repl);
3741}
3742
3743void NewGVN::deleteInstructionsInBlock(BasicBlock *BB) {
3744 LLVM_DEBUG(dbgs() << " BasicBlock Dead:" << *BB);
3745 ++NumGVNBlocksDeleted;
3746
3747 // Delete the instructions backwards, as it has a reduced likelihood of having
3748 // to update as many def-use and use-def chains. Start after the terminator.
3749 auto StartPoint = BB->rbegin();
3750 ++StartPoint;
3751 // Note that we explicitly recalculate BB->rend() on each iteration,
3752 // as it may change when we remove the first instruction.
3753 for (BasicBlock::reverse_iterator I(StartPoint); I != BB->rend();) {
3754 Instruction &Inst = *I++;
3755 if (!Inst.use_empty())
3757 if (isa<LandingPadInst>(Inst))
3758 continue;
3759 salvageKnowledge(&Inst, AC);
3760
3761 Inst.eraseFromParent();
3762 ++NumGVNInstrDeleted;
3763 }
3764 // Now insert something that simplifycfg will turn into an unreachable.
3765 Type *Int8Ty = Type::getInt8Ty(BB->getContext());
3766 new StoreInst(
3767 PoisonValue::get(Int8Ty),
3769 BB->getTerminator()->getIterator());
3770}
3771
3772void NewGVN::markInstructionForDeletion(Instruction *I) {
3773 LLVM_DEBUG(dbgs() << "Marking " << *I << " for deletion\n");
3774 InstructionsToErase.insert(I);
3775}
3776
3777void NewGVN::replaceInstruction(Instruction *I, Value *V) {
3778 LLVM_DEBUG(dbgs() << "Replacing " << *I << " with " << *V << "\n");
3780 // We save the actual erasing to avoid invalidating memory
3781 // dependencies until we are done with everything.
3782 markInstructionForDeletion(I);
3783}
3784
3785namespace {
3786
3787// This is a stack that contains both the value and dfs info of where
3788// that value is valid.
3789class ValueDFSStack {
3790public:
3791 Value *back() const { return ValueStack.back(); }
3792 std::pair<int, int> dfs_back() const { return DFSStack.back(); }
3793
3794 void push_back(Value *V, int DFSIn, int DFSOut) {
3795 ValueStack.emplace_back(V);
3796 DFSStack.emplace_back(DFSIn, DFSOut);
3797 }
3798
3799 bool empty() const { return DFSStack.empty(); }
3800
3801 bool isInScope(int DFSIn, int DFSOut) const {
3802 if (empty())
3803 return false;
3804 return DFSIn >= DFSStack.back().first && DFSOut <= DFSStack.back().second;
3805 }
3806
3807 void popUntilDFSScope(int DFSIn, int DFSOut) {
3808
3809 // These two should always be in sync at this point.
3810 assert(ValueStack.size() == DFSStack.size() &&
3811 "Mismatch between ValueStack and DFSStack");
3812 while (
3813 !DFSStack.empty() &&
3814 !(DFSIn >= DFSStack.back().first && DFSOut <= DFSStack.back().second)) {
3815 DFSStack.pop_back();
3816 ValueStack.pop_back();
3817 }
3818 }
3819
3820private:
3821 SmallVector<Value *, 8> ValueStack;
3823};
3824
3825} // end anonymous namespace
3826
3827// Given an expression, get the congruence class for it.
3828CongruenceClass *NewGVN::getClassForExpression(const Expression *E) const {
3829 if (auto *VE = dyn_cast<VariableExpression>(E))
3830 return ValueToClass.lookup(VE->getVariableValue());
3831 else if (isa<DeadExpression>(E))
3832 return TOPClass;
3833 return ExpressionToClass.lookup(E);
3834}
3835
3836// Given a value and a basic block we are trying to see if it is available in,
3837// see if the value has a leader available in that block.
3838Value *NewGVN::findPHIOfOpsLeader(const Expression *E,
3839 const Instruction *OrigInst,
3840 const BasicBlock *BB) const {
3841 // It would already be constant if we could make it constant
3842 if (auto *CE = dyn_cast<ConstantExpression>(E))
3843 return CE->getConstantValue();
3844 if (auto *VE = dyn_cast<VariableExpression>(E)) {
3845 auto *V = VE->getVariableValue();
3846 if (alwaysAvailable(V) || DT->dominates(getBlockForValue(V), BB))
3847 return VE->getVariableValue();
3848 }
3849
3850 auto *CC = getClassForExpression(E);
3851 if (!CC)
3852 return nullptr;
3853 if (alwaysAvailable(CC->getLeader()))
3854 return CC->getLeader();
3855
3856 for (auto *Member : *CC) {
3857 auto *MemberInst = dyn_cast<Instruction>(Member);
3858 if (MemberInst == OrigInst)
3859 continue;
3860 // Anything that isn't an instruction is always available.
3861 if (!MemberInst)
3862 return Member;
3863 if (DT->dominates(getBlockForValue(MemberInst), BB))
3864 return Member;
3865 }
3866 return nullptr;
3867}
3868
3869bool NewGVN::eliminateInstructions(Function &F) {
3870 // This is a non-standard eliminator. The normal way to eliminate is
3871 // to walk the dominator tree in order, keeping track of available
3872 // values, and eliminating them. However, this is mildly
3873 // pointless. It requires doing lookups on every instruction,
3874 // regardless of whether we will ever eliminate it. For
3875 // instructions part of most singleton congruence classes, we know we
3876 // will never eliminate them.
3877
3878 // Instead, this eliminator looks at the congruence classes directly, sorts
3879 // them into a DFS ordering of the dominator tree, and then we just
3880 // perform elimination straight on the sets by walking the congruence
3881 // class member uses in order, and eliminate the ones dominated by the
3882 // last member. This is worst case O(E log E) where E = number of
3883 // instructions in a single congruence class. In theory, this is all
3884 // instructions. In practice, it is much faster, as most instructions are
3885 // either in singleton congruence classes or can't possibly be eliminated
3886 // anyway (if there are no overlapping DFS ranges in class).
3887 // When we find something not dominated, it becomes the new leader
3888 // for elimination purposes.
3889 // TODO: If we wanted to be faster, We could remove any members with no
3890 // overlapping ranges while sorting, as we will never eliminate anything
3891 // with those members, as they don't dominate anything else in our set.
3892
3893 bool AnythingReplaced = false;
3894
3895 // Since we are going to walk the domtree anyway, and we can't guarantee the
3896 // DFS numbers are updated, we compute some ourselves.
3897 DT->updateDFSNumbers();
3898
3899 // Go through all of our phi nodes, and kill the arguments associated with
3900 // unreachable edges.
3901 auto ReplaceUnreachablePHIArgs = [&](PHINode *PHI, BasicBlock *BB) {
3902 for (auto &Operand : PHI->incoming_values())
3903 if (!ReachableEdges.count({PHI->getIncomingBlock(Operand), BB})) {
3904 LLVM_DEBUG(dbgs() << "Replacing incoming value of " << PHI
3905 << " for block "
3906 << getBlockName(PHI->getIncomingBlock(Operand))
3907 << " with poison due to it being unreachable\n");
3908 Operand.set(PoisonValue::get(PHI->getType()));
3909 }
3910 };
3911 // Replace unreachable phi arguments.
3912 // At this point, RevisitOnReachabilityChange only contains:
3913 //
3914 // 1. PHIs
3915 // 2. Temporaries that will convert to PHIs
3916 // 3. Operations that are affected by an unreachable edge but do not fit into
3917 // 1 or 2 (rare).
3918 // So it is a slight overshoot of what we want. We could make it exact by
3919 // using two SparseBitVectors per block.
3920 DenseMap<const BasicBlock *, unsigned> ReachablePredCount;
3921 for (auto &KV : ReachableEdges)
3922 ReachablePredCount[KV.getEnd()]++;
3923 for (auto &BBPair : RevisitOnReachabilityChange) {
3924 for (auto InstNum : BBPair.second) {
3925 auto *Inst = InstrFromDFSNum(InstNum);
3926 auto *PHI = dyn_cast<PHINode>(Inst);
3927 PHI = PHI ? PHI : dyn_cast_or_null<PHINode>(RealToTemp.lookup(Inst));
3928 if (!PHI)
3929 continue;
3930 auto *BB = BBPair.first;
3931 if (ReachablePredCount.lookup(BB) != PHI->getNumIncomingValues())
3932 ReplaceUnreachablePHIArgs(PHI, BB);
3933 }
3934 }
3935
3936 // Map to store the use counts
3938 for (auto *CC : reverse(CongruenceClasses)) {
3939 LLVM_DEBUG(dbgs() << "Eliminating in congruence class " << CC->getID()
3940 << "\n");
3941 // Track the equivalent store info so we can decide whether to try
3942 // dead store elimination.
3943 SmallVector<ValueDFS, 8> PossibleDeadStores;
3944 SmallPtrSet<Instruction *, 8> ProbablyDead;
3945 if (CC->isDead() || CC->empty())
3946 continue;
3947 // Everything still in the TOP class is unreachable or dead.
3948 if (CC == TOPClass) {
3949 for (auto *M : *CC) {
3950 auto *VTE = ValueToExpression.lookup(M);
3951 if (VTE && isa<DeadExpression>(VTE))
3952 markInstructionForDeletion(cast<Instruction>(M));
3953 assert((!ReachableBlocks.count(cast<Instruction>(M)->getParent()) ||
3954 InstructionsToErase.count(cast<Instruction>(M))) &&
3955 "Everything in TOP should be unreachable or dead at this "
3956 "point");
3957 }
3958 continue;
3959 }
3960
3961 assert(CC->getLeader() && "We should have had a leader");
3962 // If this is a leader that is always available, and it's a
3963 // constant or has no equivalences, just replace everything with
3964 // it. We then update the congruence class with whatever members
3965 // are left.
3966 Value *Leader =
3967 CC->getStoredValue() ? CC->getStoredValue() : CC->getLeader();
3968 if (alwaysAvailable(Leader)) {
3969 CongruenceClass::MemberSet MembersLeft;
3970 for (auto *M : *CC) {
3971 Value *Member = M;
3972 // Void things have no uses we can replace.
3973 if (Member == Leader || !isa<Instruction>(Member) ||
3974 Member->getType()->isVoidTy()) {
3975 MembersLeft.insert(Member);
3976 continue;
3977 }
3978
3979 LLVM_DEBUG(dbgs() << "Found replacement " << *(Leader) << " for "
3980 << *Member << "\n");
3981 auto *I = cast<Instruction>(Member);
3982 assert(Leader != I && "About to accidentally remove our leader");
3983 replaceInstruction(I, Leader);
3984 AnythingReplaced = true;
3985 }
3986 CC->swap(MembersLeft);
3987 } else {
3988 // If this is a singleton, we can skip it.
3989 if (CC->size() != 1 || RealToTemp.count(Leader)) {
3990 // This is a stack because equality replacement/etc may place
3991 // constants in the middle of the member list, and we want to use
3992 // those constant values in preference to the current leader, over
3993 // the scope of those constants.
3994 ValueDFSStack EliminationStack;
3995
3996 // Convert the members to DFS ordered sets and then merge them.
3997 SmallVector<ValueDFS, 8> DFSOrderedSet;
3998 convertClassToDFSOrdered(*CC, DFSOrderedSet, UseCounts, ProbablyDead);
3999
4000 // Sort the whole thing.
4001 llvm::sort(DFSOrderedSet);
4002 for (auto &VD : DFSOrderedSet) {
4003 int MemberDFSIn = VD.DFSIn;
4004 int MemberDFSOut = VD.DFSOut;
4005 Value *Def = VD.Def.getPointer();
4006 bool FromStore = VD.Def.getInt();
4007 Use *U = VD.U;
4008 // We ignore void things because we can't get a value from them.
4009 if (Def && Def->getType()->isVoidTy())
4010 continue;
4011 auto *DefInst = dyn_cast_or_null<Instruction>(Def);
4012 if (DefInst && AllTempInstructions.count(DefInst)) {
4013 auto *PN = cast<PHINode>(DefInst);
4014
4015 // If this is a value phi and that's the expression we used, insert
4016 // it into the program
4017 // remove from temp instruction list.
4018 AllTempInstructions.erase(PN);
4019 auto *DefBlock = getBlockForValue(Def);
4020 LLVM_DEBUG(dbgs() << "Inserting fully real phi of ops" << *Def
4021 << " into block "
4022 << getBlockName(getBlockForValue(Def)) << "\n");
4023 PN->insertBefore(&DefBlock->front());
4024 Def = PN;
4025 NumGVNPHIOfOpsEliminations++;
4026 }
4027
4028 if (EliminationStack.empty()) {
4029 LLVM_DEBUG(dbgs() << "Elimination Stack is empty\n");
4030 } else {
4031 LLVM_DEBUG(dbgs() << "Elimination Stack Top DFS numbers are ("
4032 << EliminationStack.dfs_back().first << ","
4033 << EliminationStack.dfs_back().second << ")\n");
4034 }
4035
4036 LLVM_DEBUG(dbgs() << "Current DFS numbers are (" << MemberDFSIn << ","
4037 << MemberDFSOut << ")\n");
4038 // First, we see if we are out of scope or empty. If so,
4039 // and there equivalences, we try to replace the top of
4040 // stack with equivalences (if it's on the stack, it must
4041 // not have been eliminated yet).
4042 // Then we synchronize to our current scope, by
4043 // popping until we are back within a DFS scope that
4044 // dominates the current member.
4045 // Then, what happens depends on a few factors
4046 // If the stack is now empty, we need to push
4047 // If we have a constant or a local equivalence we want to
4048 // start using, we also push.
4049 // Otherwise, we walk along, processing members who are
4050 // dominated by this scope, and eliminate them.
4051 bool ShouldPush = Def && EliminationStack.empty();
4052 bool OutOfScope =
4053 !EliminationStack.isInScope(MemberDFSIn, MemberDFSOut);
4054
4055 if (OutOfScope || ShouldPush) {
4056 // Sync to our current scope.
4057 EliminationStack.popUntilDFSScope(MemberDFSIn, MemberDFSOut);
4058 bool ShouldPush = Def && EliminationStack.empty();
4059 if (ShouldPush) {
4060 EliminationStack.push_back(Def, MemberDFSIn, MemberDFSOut);
4061 }
4062 }
4063
4064 // Skip the Def's, we only want to eliminate on their uses. But mark
4065 // dominated defs as dead.
4066 if (Def) {
4067 // For anything in this case, what and how we value number
4068 // guarantees that any side-effects that would have occurred (ie
4069 // throwing, etc) can be proven to either still occur (because it's
4070 // dominated by something that has the same side-effects), or never
4071 // occur. Otherwise, we would not have been able to prove it value
4072 // equivalent to something else. For these things, we can just mark
4073 // it all dead. Note that this is different from the "ProbablyDead"
4074 // set, which may not be dominated by anything, and thus, are only
4075 // easy to prove dead if they are also side-effect free. Note that
4076 // because stores are put in terms of the stored value, we skip
4077 // stored values here. If the stored value is really dead, it will
4078 // still be marked for deletion when we process it in its own class.
4079 auto *DefI = dyn_cast<Instruction>(Def);
4080 if (!EliminationStack.empty() && DefI && !FromStore) {
4081 Value *DominatingLeader = EliminationStack.back();
4082 if (DominatingLeader != Def) {
4083 // Even if the instruction is removed, we still need to update
4084 // flags/metadata due to downstreams users of the leader.
4085 if (!match(DefI, m_Intrinsic<Intrinsic::ssa_copy>()))
4086 patchReplacementInstruction(DefI, DominatingLeader);
4087
4088 markInstructionForDeletion(DefI);
4089 }
4090 }
4091 continue;
4092 }
4093 // At this point, we know it is a Use we are trying to possibly
4094 // replace.
4095
4096 assert(isa<Instruction>(U->get()) &&
4097 "Current def should have been an instruction");
4098 assert(isa<Instruction>(U->getUser()) &&
4099 "Current user should have been an instruction");
4100
4101 // If the thing we are replacing into is already marked to be dead,
4102 // this use is dead. Note that this is true regardless of whether
4103 // we have anything dominating the use or not. We do this here
4104 // because we are already walking all the uses anyway.
4105 Instruction *InstUse = cast<Instruction>(U->getUser());
4106 if (InstructionsToErase.count(InstUse)) {
4107 auto &UseCount = UseCounts[U->get()];
4108 if (--UseCount == 0) {
4109 ProbablyDead.insert(cast<Instruction>(U->get()));
4110 }
4111 }
4112
4113 // If we get to this point, and the stack is empty we must have a use
4114 // with nothing we can use to eliminate this use, so just skip it.
4115 if (EliminationStack.empty())
4116 continue;
4117
4118 Value *DominatingLeader = EliminationStack.back();
4119
4120 auto *II = dyn_cast<IntrinsicInst>(DominatingLeader);
4121 bool isSSACopy = II && II->getIntrinsicID() == Intrinsic::ssa_copy;
4122 if (isSSACopy)
4123 DominatingLeader = II->getOperand(0);
4124
4125 // Don't replace our existing users with ourselves.
4126 if (U->get() == DominatingLeader)
4127 continue;
4128
4129 // If we replaced something in an instruction, handle the patching of
4130 // metadata. Skip this if we are replacing predicateinfo with its
4131 // original operand, as we already know we can just drop it.
4132 auto *ReplacedInst = cast<Instruction>(U->get());
4133 auto *PI = PredInfo->getPredicateInfoFor(ReplacedInst);
4134 if (!PI || DominatingLeader != PI->OriginalOp)
4135 patchReplacementInstruction(ReplacedInst, DominatingLeader);
4136
4138 << "Found replacement " << *DominatingLeader << " for "
4139 << *U->get() << " in " << *(U->getUser()) << "\n");
4140 U->set(DominatingLeader);
4141 // This is now a use of the dominating leader, which means if the
4142 // dominating leader was dead, it's now live!
4143 auto &LeaderUseCount = UseCounts[DominatingLeader];
4144 // It's about to be alive again.
4145 if (LeaderUseCount == 0 && isa<Instruction>(DominatingLeader))
4146 ProbablyDead.erase(cast<Instruction>(DominatingLeader));
4147 // For copy instructions, we use their operand as a leader,
4148 // which means we remove a user of the copy and it may become dead.
4149 if (isSSACopy) {
4150 auto It = UseCounts.find(II);
4151 if (It != UseCounts.end()) {
4152 unsigned &IIUseCount = It->second;
4153 if (--IIUseCount == 0)
4154 ProbablyDead.insert(II);
4155 }
4156 }
4157 ++LeaderUseCount;
4158 AnythingReplaced = true;
4159 }
4160 }
4161 }
4162
4163 // At this point, anything still in the ProbablyDead set is actually dead if
4164 // would be trivially dead.
4165 for (auto *I : ProbablyDead)
4167 markInstructionForDeletion(I);
4168
4169 // Cleanup the congruence class.
4170 CongruenceClass::MemberSet MembersLeft;
4171 for (auto *Member : *CC)
4172 if (!isa<Instruction>(Member) ||
4173 !InstructionsToErase.count(cast<Instruction>(Member)))
4174 MembersLeft.insert(Member);
4175 CC->swap(MembersLeft);
4176
4177 // If we have possible dead stores to look at, try to eliminate them.
4178 if (CC->getStoreCount() > 0) {
4179 convertClassToLoadsAndStores(*CC, PossibleDeadStores);
4180 llvm::sort(PossibleDeadStores);
4181 ValueDFSStack EliminationStack;
4182 for (auto &VD : PossibleDeadStores) {
4183 int MemberDFSIn = VD.DFSIn;
4184 int MemberDFSOut = VD.DFSOut;
4185 Instruction *Member = cast<Instruction>(VD.Def.getPointer());
4186 if (EliminationStack.empty() ||
4187 !EliminationStack.isInScope(MemberDFSIn, MemberDFSOut)) {
4188 // Sync to our current scope.
4189 EliminationStack.popUntilDFSScope(MemberDFSIn, MemberDFSOut);
4190 if (EliminationStack.empty()) {
4191 EliminationStack.push_back(Member, MemberDFSIn, MemberDFSOut);
4192 continue;
4193 }
4194 }
4195 // We already did load elimination, so nothing to do here.
4196 if (isa<LoadInst>(Member))
4197 continue;
4198 assert(!EliminationStack.empty());
4199 Instruction *Leader = cast<Instruction>(EliminationStack.back());
4200 (void)Leader;
4201 assert(DT->dominates(Leader->getParent(), Member->getParent()));
4202 // Member is dominater by Leader, and thus dead
4203 LLVM_DEBUG(dbgs() << "Marking dead store " << *Member
4204 << " that is dominated by " << *Leader << "\n");
4205 markInstructionForDeletion(Member);
4206 CC->erase(Member);
4207 ++NumGVNDeadStores;
4208 }
4209 }
4210 }
4211 return AnythingReplaced;
4212}
4213
4214// This function provides global ranking of operations so that we can place them
4215// in a canonical order. Note that rank alone is not necessarily enough for a
4216// complete ordering, as constants all have the same rank. However, generally,
4217// we will simplify an operation with all constants so that it doesn't matter
4218// what order they appear in.
4219unsigned int NewGVN::getRank(const Value *V) const {
4220 // Prefer constants to undef to anything else
4221 // Undef is a constant, have to check it first.
4222 // Prefer poison to undef as it's less defined.
4223 // Prefer smaller constants to constantexprs
4224 // Note that the order here matters because of class inheritance
4225 if (isa<ConstantExpr>(V))
4226 return 3;
4227 if (isa<PoisonValue>(V))
4228 return 1;
4229 if (isa<UndefValue>(V))
4230 return 2;
4231 if (isa<Constant>(V))
4232 return 0;
4233 if (auto *A = dyn_cast<Argument>(V))
4234 return 4 + A->getArgNo();
4235
4236 // Need to shift the instruction DFS by number of arguments + 5 to account for
4237 // the constant and argument ranking above.
4238 unsigned Result = InstrToDFSNum(V);
4239 if (Result > 0)
4240 return 5 + NumFuncArgs + Result;
4241 // Unreachable or something else, just return a really large number.
4242 return ~0;
4243}
4244
4245// This is a function that says whether two commutative operations should
4246// have their order swapped when canonicalizing.
4247bool NewGVN::shouldSwapOperands(const Value *A, const Value *B) const {
4248 // Because we only care about a total ordering, and don't rewrite expressions
4249 // in this order, we order by rank, which will give a strict weak ordering to
4250 // everything but constants, and then we order by pointer address.
4251 return std::make_pair(getRank(A), A) > std::make_pair(getRank(B), B);
4252}
4253
4254bool NewGVN::shouldSwapOperandsForIntrinsic(const Value *A, const Value *B,
4255 const IntrinsicInst *I) const {
4256 auto LookupResult = IntrinsicInstPred.find(I);
4257 if (shouldSwapOperands(A, B)) {
4258 if (LookupResult == IntrinsicInstPred.end())
4259 IntrinsicInstPred.insert({I, B});
4260 else
4261 LookupResult->second = B;
4262 return true;
4263 }
4264
4265 if (LookupResult != IntrinsicInstPred.end()) {
4266 auto *SeenPredicate = LookupResult->second;
4267 if (SeenPredicate) {
4268 if (SeenPredicate == B)
4269 return true;
4270 else
4271 LookupResult->second = nullptr;
4272 }
4273 }
4274 return false;
4275}
4276
4278 // Apparently the order in which we get these results matter for
4279 // the old GVN (see Chandler's comment in GVN.cpp). I'll keep
4280 // the same order here, just in case.
4281 auto &AC = AM.getResult<AssumptionAnalysis>(F);
4282 auto &DT = AM.getResult<DominatorTreeAnalysis>(F);
4283 auto &TLI = AM.getResult<TargetLibraryAnalysis>(F);
4284 auto &AA = AM.getResult<AAManager>(F);
4285 auto &MSSA = AM.getResult<MemorySSAAnalysis>(F).getMSSA();
4286 bool Changed =
4287 NewGVN(F, &DT, &AC, &TLI, &AA, &MSSA, F.getDataLayout())
4288 .runGVN();
4289 if (!Changed)
4290 return PreservedAnalyses::all();
4293 return PA;
4294}
aarch64 promote const
Rewrite undef for PHI
Unify divergent function exit nodes
MachineBasicBlock MachineBasicBlock::iterator DebugLoc DL
This file defines the BumpPtrAllocator interface.
This file implements the BitVector class.
BlockVerifier::State From
static GCRegistry::Add< OcamlGC > B("ocaml", "ocaml 3.10-compatible GC")
static GCRegistry::Add< ErlangGC > A("erlang", "erlang-compatible garbage collector")
static GCRegistry::Add< StatepointGC > D("statepoint-example", "an example strategy for statepoint")
static GCRegistry::Add< CoreCLRGC > E("coreclr", "CoreCLR-compatible GC")
This file contains the declarations for the subclasses of Constant, which represent the different fla...
This file provides an implementation of debug counters.
#define DEBUG_COUNTER(VARNAME, COUNTERNAME, DESC)
Definition: DebugCounter.h:190
#define LLVM_DEBUG(...)
Definition: Debug.h:106
This file defines DenseMapInfo traits for DenseMap.
This file defines the DenseMap class.
This file defines the DenseSet and SmallDenseSet classes.
This file builds on the ADT/GraphTraits.h file to build generic depth first graph iterator.
std::optional< std::vector< StOtherPiece > > Other
Definition: ELFYAML.cpp:1313
bool End
Definition: ELF_riscv.cpp:480
static GCMetadataPrinterRegistry::Add< ErlangGCPrinter > X("erlang", "erlang-compatible garbage collector")
The header file for the GVN pass that contains expression handling classes.
static void patchAndReplaceAllUsesWith(Instruction *I, Value *Repl)
Definition: GVN.cpp:2149
This is the interface for a simple mod/ref and alias analysis over globals.
This file defines the little GraphTraits<X> template class that should be specialized by classes that...
Hexagon Common GEP
This defines the Use class.
static bool lookup(const GsymReader &GR, DataExtractor &Data, uint64_t &Offset, uint64_t BaseAddr, uint64_t Addr, SourceLocations &SrcLocs, llvm::Error &Err)
A Lookup helper functions.
Definition: InlineInfo.cpp:108
static bool isZero(Value *V, const DataLayout &DL, DominatorTree *DT, AssumptionCache *AC)
Definition: Lint.cpp:533
#define F(x, y, z)
Definition: MD5.cpp:55
#define I(x, y, z)
Definition: MD5.cpp:58
Branch Probability Basic Block static false std::string getBlockName(const MachineBasicBlock *BB)
Helper to print the name of a MBB.
This file exposes an interface to building/using memory SSA to walk memory instructions using a use/d...
ConstantRange Range(APInt(BitWidth, Low), APInt(BitWidth, High))
uint64_t IntrinsicInst * II
static bool alwaysAvailable(Value *V)
Definition: NewGVN.cpp:1041
static Value * getCopyOf(const Value *V)
Definition: NewGVN.cpp:1011
static bool isCopyOfPHI(const Value *V, const PHINode *PN)
Definition: NewGVN.cpp:1019
static bool isCopyOfAPHI(const Value *V)
Definition: NewGVN.cpp:1023
static bool okayForPHIOfOps(const Instruction *I)
Definition: NewGVN.cpp:2621
static cl::opt< bool > EnableStoreRefinement("enable-store-refinement", cl::init(false), cl::Hidden)
static bool equalsLoadStoreHelper(const T &LHS, const Expression &RHS)
Definition: NewGVN.cpp:928
static cl::opt< bool > EnablePhiOfOps("enable-phi-of-ops", cl::init(true), cl::Hidden)
Currently, the generation "phi of ops" can result in correctness issues.
This file provides the interface for LLVM's Global Value Numbering pass.
#define P(N)
if(PassOpts->AAPipeline)
This file defines the PointerIntPair class.
This file builds on the ADT/GraphTraits.h file to build a generic graph post order iterator.
This file implements the PredicateInfo analysis, which creates an Extended SSA form for operations us...
const SmallVectorImpl< MachineOperand > & Cond
assert(ImpDefSCC.getReg()==AMDGPU::SCC &&ImpDefSCC.isDef())
bool isDead(const MachineInstr &MI, const MachineRegisterInfo &MRI)
This file defines generic set operations that may be used on set's of different types,...
This file defines the SmallPtrSet class.
This file defines the SmallVector class.
This file defines the SparseBitVector class.
This file defines the 'Statistic' class, which is designed to be an easy way to expose various metric...
#define STATISTIC(VARNAME, DESC)
Definition: Statistic.h:166
Value * RHS
Value * LHS
A manager for alias analyses.
bool isMustAlias(const MemoryLocation &LocA, const MemoryLocation &LocB)
A trivial helper function to check to see if the specified pointers are must-alias.
bool doesNotAccessMemory(const CallBase *Call)
Checks if the specified call is known to never read or write memory.
bool onlyReadsMemory(const CallBase *Call)
Checks if the specified call is known to only read from non-volatile memory (or not access memory at ...
A container for analyses that lazily runs them and caches their results.
Definition: PassManager.h:253
PassT::Result & getResult(IRUnitT &IR, ExtraArgTs... ExtraArgs)
Get the result of an analysis pass for a given IR unit.
Definition: PassManager.h:410
Recycle small arrays allocated from a BumpPtrAllocator.
Definition: ArrayRecycler.h:28
void clear(AllocatorType &Allocator)
Release all the tracked allocations to the allocator.
ArrayRef - Represent a constant reference to an array (0 or more elements consecutively in memory),...
Definition: ArrayRef.h:41
size_t size() const
size - Get the array size.
Definition: ArrayRef.h:168
iterator begin() const
Definition: ArrayRef.h:156
A function analysis which provides an AssumptionCache.
A cache of @llvm.assume calls within a function.
std::optional< AttributeList > intersectWith(LLVMContext &C, AttributeList Other) const
Try to intersect this AttributeList with Other.
LLVM Basic Block Representation.
Definition: BasicBlock.h:61
reverse_iterator rbegin()
Definition: BasicBlock.h:464
InstListType::reverse_iterator reverse_iterator
Definition: BasicBlock.h:179
reverse_iterator rend()
Definition: BasicBlock.h:466
LLVMContext & getContext() const
Get the context in which this basic block lives.
Definition: BasicBlock.cpp:168
const Instruction * getTerminator() const LLVM_READONLY
Returns the terminator instruction if the block is well formed or null if the block is not well forme...
Definition: BasicBlock.h:239
BitVector & reset()
Definition: BitVector.h:392
int find_first() const
find_first - Returns the index of the first set bit, -1 if none of the bits are set.
Definition: BitVector.h:300
void resize(unsigned N, bool t=false)
resize - Grow or shrink the bitvector.
Definition: BitVector.h:341
void clear()
clear - Removes all bits from the bitvector.
Definition: BitVector.h:335
BitVector & set()
Definition: BitVector.h:351
bool any() const
any - Returns true if any bit is set.
Definition: BitVector.h:170
iterator_range< const_set_bits_iterator > set_bits() const
Definition: BitVector.h:140
Allocate memory in an ever growing pool, as if by bump-pointer.
Definition: Allocator.h:66
void Reset()
Deallocate all but the current slab and reset the current pointer to the beginning of it,...
Definition: Allocator.h:123
void Deallocate(const void *Ptr, size_t Size, size_t)
Definition: Allocator.h:225
bool isConvergent() const
Determine if the invoke is convergent.
Definition: InstrTypes.h:1935
AttributeList getAttributes() const
Return the attributes for this call.
Definition: InstrTypes.h:1425
This class represents a function call, abstracting a target machine's calling convention.
Predicate
This enumeration lists the possible predicates for CmpInst subclasses.
Definition: InstrTypes.h:673
@ FCMP_OEQ
0 0 0 1 True if ordered and equal
Definition: InstrTypes.h:676
@ ICMP_EQ
equal
Definition: InstrTypes.h:694
Predicate getSwappedPredicate() const
For example, EQ->EQ, SLE->SGE, ULT->UGT, OEQ->OEQ, ULE->UGE, OLT->OGT, etc.
Definition: InstrTypes.h:825
Predicate getInversePredicate() const
For example, EQ -> NE, UGT -> ULE, SLT -> SGE, OEQ -> UNE, UGT -> OLE, OLT -> UGE,...
Definition: InstrTypes.h:787
static bool isImpliedTrueByMatchingCmp(Predicate Pred1, Predicate Pred2)
Determine if Pred1 implies Pred2 is true when two compares have matching operands.
static bool isImpliedFalseByMatchingCmp(Predicate Pred1, Predicate Pred2)
Determine if Pred1 implies Pred2 is false when two compares have matching operands.
This is the shared class of boolean and integer constants.
Definition: Constants.h:83
bool isOne() const
This is just a convenience method to make client code smaller for a common case.
Definition: Constants.h:214
static ConstantInt * getTrue(LLVMContext &Context)
Definition: Constants.cpp:866
bool isZero() const
This is just a convenience method to make client code smaller for a common code.
Definition: Constants.h:208
static ConstantInt * getFalse(LLVMContext &Context)
Definition: Constants.cpp:873
This is an important base class in LLVM.
Definition: Constant.h:42
static Constant * getNullValue(Type *Ty)
Constructor to create a '0' constant of arbitrary type.
Definition: Constants.cpp:373
This class represents an Operation in the Expression.
A parsed version of the target data layout string in and methods for querying it.
Definition: DataLayout.h:63
static CounterState getCounterState(unsigned ID)
Definition: DebugCounter.h:106
static bool isCounterSet(unsigned ID)
Definition: DebugCounter.h:96
static bool shouldExecute(unsigned CounterName)
Definition: DebugCounter.h:87
static void setCounterState(unsigned ID, CounterState State)
Definition: DebugCounter.h:114
ValueT lookup(const_arg_type_t< KeyT > Val) const
lookup - Return the entry for the specified key, or a default constructed value if no such entry exis...
Definition: DenseMap.h:194
iterator find(const_arg_type_t< KeyT > Val)
Definition: DenseMap.h:156
bool erase(const KeyT &Val)
Definition: DenseMap.h:321
unsigned size() const
Definition: DenseMap.h:99
size_type count(const_arg_type_t< KeyT > Val) const
Return 1 if the specified key is in the map, 0 otherwise.
Definition: DenseMap.h:152
iterator end()
Definition: DenseMap.h:84
std::pair< iterator, bool > insert(const std::pair< KeyT, ValueT > &KV)
Definition: DenseMap.h:211
Implements a dense probed hash-table based set.
Definition: DenseSet.h:278
unsigned getDFSNumIn() const
getDFSNumIn/getDFSNumOut - These return the DFS visitation order for nodes in the dominator tree.
unsigned getDFSNumOut() const
Analysis pass which computes a DominatorTree.
Definition: Dominators.h:279
DomTreeNodeBase< NodeT > * getRootNode()
getRootNode - This returns the entry node for the CFG of the function.
void updateDFSNumbers() const
updateDFSNumbers - Assign In and Out numbers to the nodes while walking dominator tree in dfs order.
DomTreeNodeBase< NodeT > * getNode(const NodeT *BB) const
getNode - return the (Post)DominatorTree node for the specified basic block.
bool properlyDominates(const DomTreeNodeBase< NodeT > *A, const DomTreeNodeBase< NodeT > *B) const
properlyDominates - Returns true iff A dominates B and A != B.
Concrete subclass of DominatorTreeBase that is used to compute a normal dominator tree.
Definition: Dominators.h:162
bool dominates(const BasicBlock *BB, const Use &U) const
Return true if the (end of the) basic block BB dominates the use U.
Definition: Dominators.cpp:122
Class representing an expression and its matching format.
bool isPresplitCoroutine() const
Determine if the function is presplit coroutine.
Definition: Function.h:540
bool equals(const Expression &Other) const override
Definition: NewGVN.cpp:948
bool equals(const Expression &Other) const override
Definition: NewGVN.cpp:934
bool equals(const Expression &Other) const override
bool equals(const Expression &Other) const override
Definition: NewGVN.cpp:938
void insertBefore(Instruction *InsertPos)
Insert an unlinked instruction into a basic block immediately before the specified instruction.
Definition: Instruction.cpp:97
bool isCommutative() const LLVM_READONLY
Return true if the instruction is commutative:
bool isAtomic() const LLVM_READONLY
Return true if this instruction has an AtomicOrdering of unordered or higher.
InstListType::iterator eraseFromParent()
This method unlinks 'this' from the containing basic block and deletes it.
Definition: Instruction.cpp:92
const Function * getFunction() const
Return the function this instruction belongs to.
Definition: Instruction.cpp:70
A wrapper class for inspecting calls to intrinsic functions.
Definition: IntrinsicInst.h:48
An instruction for reading from memory.
Definition: Instructions.h:176
Value * getPointerOperand()
Definition: Instructions.h:255
bool isSimple() const
Definition: Instructions.h:247
BasicBlock * getBlock() const
Definition: MemorySSA.h:161
Represents phi nodes for memory accesses.
Definition: MemorySSA.h:478
BasicBlock * getIncomingBlock(unsigned I) const
Return incoming basic block number i.
Definition: MemorySSA.h:541
An analysis that produces MemorySSA for a function.
Definition: MemorySSA.h:928
This is the generic walker interface for walkers of MemorySSA.
Definition: MemorySSA.h:1016
MemoryAccess * getClobberingMemoryAccess(const Instruction *I, BatchAAResults &AA)
Given a memory Mod/Ref/ModRef'ing instruction, calling this will give you the nearest dominating Memo...
Definition: MemorySSA.h:1045
Encapsulates MemorySSA, including all data associated with memory accesses.
Definition: MemorySSA.h:701
MemorySSAWalker * getWalker()
Definition: MemorySSA.cpp:1590
MemoryUseOrDef * getMemoryAccess(const Instruction *I) const
Given a memory Mod/Ref'ing instruction, get the MemorySSA access associated with it.
Definition: MemorySSA.h:719
MemoryAccess * getLiveOnEntryDef() const
Definition: MemorySSA.h:743
const DefsList * getBlockDefs(const BasicBlock *BB) const
Return the list of MemoryDef's and MemoryPhi's for a given basic block.
Definition: MemorySSA.h:767
bool isLiveOnEntryDef(const MemoryAccess *MA) const
Return true if MA represents the live on entry value.
Definition: MemorySSA.h:739
Class that has the common methods + fields of memory uses/defs.
Definition: MemorySSA.h:249
MutableArrayRef - Represent a mutable reference to an array (0 or more elements consecutively in memo...
Definition: ArrayRef.h:310
PreservedAnalyses run(Function &F, AnalysisManager< Function > &AM)
Run the pass over the function.
Definition: NewGVN.cpp:4277
BasicBlock * getIncomingBlock(unsigned i) const
Return incoming basic block number i.
static PHINode * Create(Type *Ty, unsigned NumReservedValues, const Twine &NameStr="", InsertPosition InsertBefore=nullptr)
Constructors - NumReservedValues is a hint for the number of incoming edges that this phi node will h...
PointerIntPair - This class implements a pair of a pointer and small integer.
static PointerType * getUnqual(Type *ElementType)
This constructs a pointer to an object of the specified type in the default address space (address sp...
Definition: DerivedTypes.h:686
static PoisonValue * get(Type *T)
Static factory methods - Return an 'poison' object of the specified type.
Definition: Constants.cpp:1878
Encapsulates PredicateInfo, including all data associated with memory accesses.
A set of analyses that are preserved following a run of a transformation pass.
Definition: Analysis.h:111
static PreservedAnalyses all()
Construct a special preserved set that preserves all passes.
Definition: Analysis.h:117
void preserve()
Mark an analysis as preserved.
Definition: Analysis.h:131
A templated base class for SmallPtrSet which provides the typesafe interface that is common across al...
Definition: SmallPtrSet.h:363
SmallPtrSetIterator< PtrType > const_iterator
Definition: SmallPtrSet.h:374
bool erase(PtrType Ptr)
Remove pointer from the set.
Definition: SmallPtrSet.h:401
size_type count(ConstPtrType Ptr) const
count - Return 1 if the specified pointer is in the set, 0 otherwise.
Definition: SmallPtrSet.h:452
iterator end() const
Definition: SmallPtrSet.h:477
std::pair< iterator, bool > insert(PtrType Ptr)
Inserts Ptr if and only if there is no element in the container equal to Ptr.
Definition: SmallPtrSet.h:384
iterator begin() const
Definition: SmallPtrSet.h:472
bool contains(ConstPtrType Ptr) const
Definition: SmallPtrSet.h:458
SmallPtrSet - This class implements a set which is optimized for holding SmallSize or less elements.
Definition: SmallPtrSet.h:519
bool empty() const
Definition: SmallVector.h:81
This class consists of common code factored out of the SmallVector class to reduce code duplication b...
Definition: SmallVector.h:573
reference emplace_back(ArgTypes &&... Args)
Definition: SmallVector.h:937
void push_back(const T &Elt)
Definition: SmallVector.h:413
This is a 'vector' (really, a variable-sized array), optimized for the case when the array is small.
Definition: SmallVector.h:1196
An instruction for storing to memory.
Definition: Instructions.h:292
Analysis pass providing the TargetLibraryInfo.
Provides information about what library functions are available for the current target.
The instances of the Type class are immutable: once they are created, they are never changed.
Definition: Type.h:45
static IntegerType * getInt8Ty(LLVMContext &C)
static UndefValue * get(Type *T)
Static factory methods - Return an 'undef' object of the specified type.
Definition: Constants.cpp:1859
A Use represents the edge between a Value definition and its users.
Definition: Use.h:43
op_range operands()
Definition: User.h:288
Value * getOperand(unsigned i) const
Definition: User.h:228
unsigned getNumOperands() const
Definition: User.h:250
LLVM Value Representation.
Definition: Value.h:74
Type * getType() const
All values are typed, get the type of this value.
Definition: Value.h:255
void replaceAllUsesWith(Value *V)
Change all uses of this to point to a new Value.
Definition: Value.cpp:534
iterator_range< user_iterator > users()
Definition: Value.h:421
bool use_empty() const
Definition: Value.h:344
LLVMContext & getContext() const
All values hold a context through their type.
Definition: Value.cpp:1075
std::pair< iterator, bool > insert(const ValueT &V)
Definition: DenseSet.h:213
iterator find(const_arg_type_t< ValueT > V)
Definition: DenseSet.h:187
bool erase(const ValueT &V)
Definition: DenseSet.h:97
size_type count(const_arg_type_t< ValueT > V) const
Return 1 if the specified key is in the set, 0 otherwise.
Definition: DenseSet.h:95
An opaque object representing a hash code.
Definition: Hashing.h:75
const ParentTy * getParent() const
Definition: ilist_node.h:32
self_iterator getIterator()
Definition: ilist_node.h:132
A range adaptor for a pair of iterators.
friend const_iterator begin(StringRef path, Style style)
Get begin iterator over path.
Definition: Path.cpp:226
friend const_iterator end(StringRef path)
Get end iterator over path.
Definition: Path.cpp:235
This provides a very simple, boring adaptor for a begin and end iterator into a range type.
#define llvm_unreachable(msg)
Marks that the current location is not supposed to be reachable.
@ C
The default llvm calling convention, compatible with C.
Definition: CallingConv.h:34
Predicate
Predicate - These are "(BI << 5) | BO" for various predicates.
Definition: PPCPredicates.h:26
bool match(Val *V, const Pattern &P)
Definition: PatternMatch.h:49
brc_match< Cond_t, bind_ty< BasicBlock >, bind_ty< BasicBlock > > m_Br(const Cond_t &C, BasicBlock *&T, BasicBlock *&F)
class_match< Value > m_Value()
Match an arbitrary value and ignore it.
Definition: PatternMatch.h:92
int analyzeLoadFromClobberingStore(Type *LoadTy, Value *LoadPtr, StoreInst *DepSI, const DataLayout &DL)
This function determines whether a value for the pointer LoadPtr can be extracted from the store at D...
Definition: VNCoercion.cpp:210
Constant * getConstantValueForLoad(Constant *SrcVal, unsigned Offset, Type *LoadTy, const DataLayout &DL)
Definition: VNCoercion.cpp:347
int analyzeLoadFromClobberingLoad(Type *LoadTy, Value *LoadPtr, LoadInst *DepLI, const DataLayout &DL)
This function determines whether a value for the pointer LoadPtr can be extracted from the load at De...
Definition: VNCoercion.cpp:231
Constant * getConstantMemInstValueForLoad(MemIntrinsic *SrcInst, unsigned Offset, Type *LoadTy, const DataLayout &DL)
Definition: VNCoercion.cpp:406
int analyzeLoadFromClobberingMemInst(Type *LoadTy, Value *LoadPtr, MemIntrinsic *DepMI, const DataLayout &DL)
This function determines whether a value for the pointer LoadPtr can be extracted from the memory int...
Definition: VNCoercion.cpp:245
@ CE
Windows NT (Windows on ARM)
initializer< Ty > init(const Ty &Val)
Definition: CommandLine.h:443
std::vector< ExecutorSymbolDef > LookupResult
NodeAddr< DefNode * > Def
Definition: RDFGraph.h:384
const_iterator begin(StringRef path, Style style=Style::native)
Get begin iterator over path.
Definition: Path.cpp:226
const_iterator end(StringRef path)
Get end iterator over path.
Definition: Path.cpp:235
This is an optimization pass for GlobalISel generic memory operations.
Definition: AddressRanges.h:18
@ Offset
Definition: DWP.cpp:480
bool all_of(R &&range, UnaryPredicate P)
Provide wrappers to std::all_of which take ranges instead of having to pass begin/end explicitly.
Definition: STLExtras.h:1739
Value * simplifyGEPInst(Type *SrcTy, Value *Ptr, ArrayRef< Value * > Indices, GEPNoWrapFlags NW, const SimplifyQuery &Q)
Given operands for a GetElementPtrInst, fold the result or return null.
Constant * getInitialValueOfAllocation(const Value *V, const TargetLibraryInfo *TLI, Type *Ty)
If this is a call to an allocation function that initializes memory to a fixed value,...
auto size(R &&Range, std::enable_if_t< std::is_base_of< std::random_access_iterator_tag, typename std::iterator_traits< decltype(Range.begin())>::iterator_category >::value, void > *=nullptr)
Get the size of a range.
Definition: STLExtras.h:1697
auto successors(const MachineBasicBlock *BB)
SDValue getStoredValue(SDValue Op)
iterator_range< T > make_range(T x, T y)
Convenience function for iterating over sub-ranges.
mapped_iterator< ItTy, FuncTy > map_iterator(ItTy I, FuncTy F)
Definition: STLExtras.h:372
bool set_is_subset(const S1Ty &S1, const S2Ty &S2)
set_is_subset(A, B) - Return true iff A in B
Value * simplifyCastInst(unsigned CastOpc, Value *Op, Type *Ty, const SimplifyQuery &Q)
Given operands for a CastInst, fold the result or return null.
void erase(Container &C, ValueType V)
Wrapper function to remove a value from a container:
Definition: STLExtras.h:2107
bool any_of(R &&range, UnaryPredicate P)
Provide wrappers to std::any_of which take ranges instead of having to pass begin/end explicitly.
Definition: STLExtras.h:1746
bool isInstructionTriviallyDead(Instruction *I, const TargetLibraryInfo *TLI=nullptr)
Return true if the result produced by the instruction is not used, and the instruction will return.
Definition: Local.cpp:406
auto reverse(ContainerTy &&C)
Definition: STLExtras.h:420
void sort(IteratorTy Start, IteratorTy End)
Definition: STLExtras.h:1664
raw_ostream & dbgs()
dbgs() - This returns a reference to a raw_ostream for debugging messages.
Definition: Debug.cpp:163
bool wouldInstructionBeTriviallyDead(const Instruction *I, const TargetLibraryInfo *TLI=nullptr)
Return true if the result produced by the instruction would have no side effects if it was not used.
Definition: Local.cpp:425
void patchReplacementInstruction(Instruction *I, Value *Repl)
Patch the replacement so that it is not more restrictive than the value being replaced.
Definition: Local.cpp:3498
iterator_range< filter_iterator< detail::IterOfRange< RangeT >, PredicateT > > make_filter_range(RangeT &&Range, PredicateT Pred)
Convenience function that takes a range of elements and a predicate, and return a new filter_iterator...
Definition: STLExtras.h:573
Constant * ConstantFoldInstOperands(Instruction *I, ArrayRef< Constant * > Ops, const DataLayout &DL, const TargetLibraryInfo *TLI=nullptr, bool AllowNonDeterministic=true)
ConstantFoldInstOperands - Attempt to constant fold an instruction with the specified operands.
@ Other
Any other memory.
@ First
Helpers to iterate all locations in the MemoryEffectsBase class.
bool salvageKnowledge(Instruction *I, AssumptionCache *AC=nullptr, DominatorTree *DT=nullptr)
Calls BuildAssumeFromInst and if the resulting llvm.assume is valid insert if before I.
Value * simplifyBinOp(unsigned Opcode, Value *LHS, Value *RHS, const SimplifyQuery &Q)
Given operands for a BinaryOperator, fold the result or return null.
DWARFExpression::Operation Op
OutputIt copy(R &&Range, OutputIt Out)
Definition: STLExtras.h:1841
iterator_range< df_iterator< T > > depth_first(const T &G)
bool all_equal(std::initializer_list< T > Values)
Returns true if all Values in the initializer lists are equal or the list.
Definition: STLExtras.h:2087
Value * simplifyCmpInst(CmpPredicate Predicate, Value *LHS, Value *RHS, const SimplifyQuery &Q)
Given operands for a CmpInst, fold the result or return null.
bool isGuaranteedNotToBePoison(const Value *V, AssumptionCache *AC=nullptr, const Instruction *CtxI=nullptr, const DominatorTree *DT=nullptr, unsigned Depth=0)
Returns true if V cannot be poison, but may be undef.
Value * simplifySelectInst(Value *Cond, Value *TrueVal, Value *FalseVal, const SimplifyQuery &Q)
Given operands for a SelectInst, fold the result or return null.
iterator_range< def_chain_iterator< T, true > > optimized_def_chain(T MA)
Definition: MemorySSA.h:1364
Implement std::hash so that hash_code can be used in STL containers.
Definition: BitVector.h:858
void swap(llvm::BitVector &LHS, llvm::BitVector &RHS)
Implement std::swap in terms of BitVector swap.
Definition: BitVector.h:860
PointerIntPair< Value *, 1, bool > Def
Definition: NewGVN.cpp:3570
bool operator<(const ValueDFS &Other) const
Definition: NewGVN.cpp:3573
DOTGraphTraits - Template class that can be specialized to customize how graphs are converted to 'dot...
static unsigned getHashValue(const ExactEqualsExpression &E)
Definition: NewGVN.cpp:469
static unsigned getHashValue(const Expression *E)
Definition: NewGVN.cpp:465
static const Expression * getTombstoneKey()
Definition: NewGVN.cpp:459
static bool isEqual(const Expression *LHS, const Expression *RHS)
Definition: NewGVN.cpp:479
static const Expression * getEmptyKey()
Definition: NewGVN.cpp:453
static bool isEqual(const ExactEqualsExpression &LHS, const Expression *RHS)
Definition: NewGVN.cpp:473
An information struct used to provide DenseMap with the various necessary components for a given valu...
Definition: DenseMapInfo.h:52
ExactEqualsExpression(const Expression &E)
Definition: NewGVN.cpp:443
const Expression & E
Definition: NewGVN.cpp:441
hash_code getComputedHash() const
Definition: NewGVN.cpp:445
bool operator==(const Expression &Other) const
Definition: NewGVN.cpp:447
SimplifyQuery getWithInstruction(const Instruction *I) const
unsigned int LocalNum