LLVM: lib/Target/AMDGPU/AMDGPUAnnotateUniformValues.cpp Source File (original) (raw)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
23
24#define DEBUG_TYPE "amdgpu-annotate-uniform"
25
26using namespace llvm;
27
28namespace {
29
30class AMDGPUAnnotateUniformValues
31 : public InstVisitor {
35 bool isEntryFunc;
37
39 I->setMetadata("amdgpu.uniform", MDNode::get(I->getContext(), {}));
41 }
42
44 I->setMetadata("amdgpu.noclobber", MDNode::get(I->getContext(), {}));
46 }
47
48public:
51 : UA(&UA), MSSA(&MSSA), AA(&AA),
53
56
57 bool changed() const { return Changed; }
58};
59
60}
61
62void AMDGPUAnnotateUniformValues::visitBranchInst(BranchInst &I) {
64 setUniformMetadata(&I);
65}
66
67void AMDGPUAnnotateUniformValues::visitLoadInst(LoadInst &I) {
68 Value *Ptr = I.getPointerOperand();
70 return;
72 if (PtrI)
73 setUniformMetadata(PtrI);
74
75
76
77
78 if (!isEntryFunc)
79 return;
82 setNoClobberMetadata(&I);
83}
84
85PreservedAnalyses
91
92 AMDGPUAnnotateUniformValues Impl(UI, MSSA, AA, F);
93 Impl.visit(F);
94
95 if (!Impl.changed())
97
99
101 return PA;
102}
103
105public:
107
109
111
114 return "AMDGPU Annotate Uniform Values";
115 }
116
123};
124
127 return false;
128
133
134 AMDGPUAnnotateUniformValues Impl(UI, MSSA, AA, F);
135 Impl.visit(F);
136 return Impl.changed();
137}
138
140 "Add AMDGPU uniform metadata", false, false)
146
148
static bool runOnFunction(Function &F, bool PostInlining)
This file exposes an interface to building/using memory SSA to walk memory instructions using a use/d...
FunctionAnalysisManager FAM
#define INITIALIZE_PASS_DEPENDENCY(depName)
#define INITIALIZE_PASS_END(passName, arg, name, cfg, analysis)
#define INITIALIZE_PASS_BEGIN(passName, arg, name, cfg, analysis)
LLVM IR instance of the generic uniformity analysis.
void getAnalysisUsage(AnalysisUsage &AU) const override
getAnalysisUsage - This function should be overriden by passes that need analysis information to do t...
Definition AMDGPUAnnotateUniformValues.cpp:117
bool runOnFunction(Function &F) override
runOnFunction - Virtual method overriden by subclasses to do the per-function processing of the pass.
Definition AMDGPUAnnotateUniformValues.cpp:125
StringRef getPassName() const override
getPassName - Return a nice clean name for a pass.
Definition AMDGPUAnnotateUniformValues.cpp:113
static char ID
Definition AMDGPUAnnotateUniformValues.cpp:106
bool doInitialization(Module &M) override
doInitialization - Virtual method overridden by subclasses to do any necessary initialization before ...
Definition AMDGPUAnnotateUniformValues.cpp:110
AMDGPUAnnotateUniformValuesLegacy()
Definition AMDGPUAnnotateUniformValues.cpp:108
A manager for alias analyses.
A wrapper pass to provide the legacy pass manager access to a suitably prepared AAResults object.
PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM)
Definition AMDGPUAnnotateUniformValues.cpp:86
Represent the analysis usage information of a pass.
AnalysisUsage & addRequired()
void setPreservesAll()
Set by analyses that do not transform their input at all.
Conditional or Unconditional Branch instruction.
Represents analyses that only rely on functions' control flow.
FunctionPass class - This class is used to implement most global optimizations.
bool skipFunction(const Function &F) const
Optional passes call this function to check whether the pass should be skipped.
bool isUniform(ConstValueRefT V) const
Whether V is uniform/non-divergent.
Base class for instruction visitors.
An instruction for reading from memory.
static MDTuple * get(LLVMContext &Context, ArrayRef< Metadata * > MDs)
An analysis that produces MemorySSA for a function.
Legacy analysis pass which computes MemorySSA.
Encapsulates MemorySSA, including all data associated with memory accesses.
A Module instance is used to store all the information related to an LLVM module.
AnalysisType & getAnalysis() const
getAnalysis() - This function is used by subclasses to get to the analysis information ...
A set of analyses that are preserved following a run of a transformation pass.
static PreservedAnalyses none()
Convenience factory function for the empty preserved set.
static PreservedAnalyses all()
Construct a special preserved set that preserves all passes.
PreservedAnalyses & preserveSet()
Mark an analysis set as preserved.
StringRef - Represent a constant reference to a string, i.e.
Analysis pass which computes UniformityInfo.
Legacy analysis pass which computes a CycleInfo.
Abstract Attribute helper functions.
@ GLOBAL_ADDRESS
Address space for global memory (RAT0, VTX0).
LLVM_READNONE constexpr bool isEntryFunctionCC(CallingConv::ID CC)
bool isClobberedInFunction(const LoadInst *Load, MemorySSA *MSSA, AAResults *AA)
Check is a Load is clobbered in its function.
unsigned ID
LLVM IR allows to use arbitrary numbers as calling convention identifiers.
friend class Instruction
Iterator for Instructions in a `BasicBlock.
This is an optimization pass for GlobalISel generic memory operations.
GenericUniformityInfo< SSAContext > UniformityInfo
FunctionAddr VTableAddr Value
decltype(auto) dyn_cast(const From &Val)
dyn_cast - Return the argument parameter cast to the specified type.
AnalysisManager< Function > FunctionAnalysisManager
Convenience typedef for the Function analysis manager.
FunctionPass * createAMDGPUAnnotateUniformValuesLegacy()
Definition AMDGPUAnnotateUniformValues.cpp:149
AAResults AliasAnalysis
Temporary typedef for legacy code that uses a generic AliasAnalysis pointer or reference.