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