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