@@ -27,8 +27,8 @@ using namespace llvm;
27
27
28
28
namespace {
29
29
30
- class AMDGPUAnnotateUniformValues : public FunctionPass ,
31
- public InstVisitor<AMDGPUAnnotateUniformValues> {
30
+ class AMDGPUAnnotateUniformValues
31
+ : public InstVisitor<AMDGPUAnnotateUniformValues> {
32
32
UniformityInfo *UA;
33
33
MemorySSA *MSSA;
34
34
AliasAnalysis *AA;
@@ -46,37 +46,19 @@ class AMDGPUAnnotateUniformValues : public FunctionPass,
46
46
}
47
47
48
48
public:
49
- static char ID;
50
- AMDGPUAnnotateUniformValues () :
51
- FunctionPass (ID) { }
52
- bool doInitialization (Module &M) override ;
53
- bool runOnFunction (Function &F) override ;
54
- StringRef getPassName () const override {
55
- return " AMDGPU Annotate Uniform Values" ;
56
- }
57
- void getAnalysisUsage (AnalysisUsage &AU) const override {
58
- AU.addRequired <UniformityInfoWrapperPass>();
59
- AU.addRequired <MemorySSAWrapperPass>();
60
- AU.addRequired <AAResultsWrapperPass>();
61
- AU.setPreservesAll ();
62
- }
49
+ AMDGPUAnnotateUniformValues (UniformityInfo &UA, MemorySSA &MSSA,
50
+ AliasAnalysis &AA, const Function &F)
51
+ : UA(&UA), MSSA(&MSSA), AA(&AA),
52
+ isEntryFunc (AMDGPU::isEntryFunctionCC(F.getCallingConv())) {}
63
53
64
54
void visitBranchInst (BranchInst &I);
65
55
void visitLoadInst (LoadInst &I);
56
+
57
+ bool changed () const { return Changed; }
66
58
};
67
59
68
60
} // End anonymous namespace
69
61
70
- INITIALIZE_PASS_BEGIN (AMDGPUAnnotateUniformValues, DEBUG_TYPE,
71
- " Add AMDGPU uniform metadata" , false , false )
72
- INITIALIZE_PASS_DEPENDENCY(UniformityInfoWrapperPass)
73
- INITIALIZE_PASS_DEPENDENCY(MemorySSAWrapperPass)
74
- INITIALIZE_PASS_DEPENDENCY(AAResultsWrapperPass)
75
- INITIALIZE_PASS_END(AMDGPUAnnotateUniformValues, DEBUG_TYPE,
76
- " Add AMDGPU uniform metadata" , false , false )
77
-
78
- char AMDGPUAnnotateUniformValues::ID = 0;
79
-
80
62
void AMDGPUAnnotateUniformValues::visitBranchInst (BranchInst &I) {
81
63
if (UA->isUniform (&I))
82
64
setUniformMetadata (&I);
@@ -100,25 +82,70 @@ void AMDGPUAnnotateUniformValues::visitLoadInst(LoadInst &I) {
100
82
setNoClobberMetadata (&I);
101
83
}
102
84
103
- bool AMDGPUAnnotateUniformValues::doInitialization (Module &M) {
104
- return false ;
85
+ PreservedAnalyses
86
+ AMDGPUAnnotateUniformValuesPass::run (Function &F,
87
+ FunctionAnalysisManager &FAM) {
88
+ UniformityInfo &UI = FAM.getResult <UniformityInfoAnalysis>(F);
89
+ MemorySSA &MSSA = FAM.getResult <MemorySSAAnalysis>(F).getMSSA ();
90
+ AAResults &AA = FAM.getResult <AAManager>(F);
91
+
92
+ AMDGPUAnnotateUniformValues Impl (UI, MSSA, AA, F);
93
+ Impl.visit (F);
94
+
95
+ PreservedAnalyses PA = PreservedAnalyses::none ();
96
+ if (!Impl.changed ())
97
+ return PA;
98
+
99
+ // TODO: Should preserve nearly everything
100
+ PA.preserveSet <CFGAnalyses>();
101
+ return PA;
105
102
}
106
103
107
- bool AMDGPUAnnotateUniformValues::runOnFunction (Function &F) {
104
+ class AMDGPUAnnotateUniformValuesLegacy : public FunctionPass {
105
+ public:
106
+ static char ID;
107
+
108
+ AMDGPUAnnotateUniformValuesLegacy () : FunctionPass(ID) {}
109
+
110
+ bool doInitialization (Module &M) override { return false ; }
111
+
112
+ bool runOnFunction (Function &F) override ;
113
+ StringRef getPassName () const override {
114
+ return " AMDGPU Annotate Uniform Values" ;
115
+ }
116
+
117
+ void getAnalysisUsage (AnalysisUsage &AU) const override {
118
+ AU.addRequired <UniformityInfoWrapperPass>();
119
+ AU.addRequired <MemorySSAWrapperPass>();
120
+ AU.addRequired <AAResultsWrapperPass>();
121
+ AU.setPreservesAll ();
122
+ }
123
+ };
124
+
125
+ bool AMDGPUAnnotateUniformValuesLegacy::runOnFunction (Function &F) {
108
126
if (skipFunction (F))
109
127
return false ;
110
128
111
- UA = &getAnalysis<UniformityInfoWrapperPass>(). getUniformityInfo ();
112
- MSSA = & getAnalysis<MemorySSAWrapperPass >().getMSSA ();
113
- AA = & getAnalysis<AAResultsWrapperPass >().getAAResults ();
114
- isEntryFunc = AMDGPU::isEntryFunctionCC (F. getCallingConv () );
129
+ UniformityInfo &UI =
130
+ getAnalysis<UniformityInfoWrapperPass >().getUniformityInfo ();
131
+ MemorySSA &MSSA = getAnalysis<MemorySSAWrapperPass >().getMSSA ();
132
+ AliasAnalysis &AA = getAnalysis<AAResultsWrapperPass>(). getAAResults ( );
115
133
116
- Changed = false ;
117
- visit (F);
118
- return Changed ;
134
+ AMDGPUAnnotateUniformValues Impl (UI, MSSA, AA, F) ;
135
+ Impl. visit (F);
136
+ return Impl. changed () ;
119
137
}
120
138
121
- FunctionPass *
122
- llvm::createAMDGPUAnnotateUniformValues () {
123
- return new AMDGPUAnnotateUniformValues ();
139
+ INITIALIZE_PASS_BEGIN (AMDGPUAnnotateUniformValuesLegacy, DEBUG_TYPE,
140
+ " Add AMDGPU uniform metadata" , false , false )
141
+ INITIALIZE_PASS_DEPENDENCY(UniformityInfoWrapperPass)
142
+ INITIALIZE_PASS_DEPENDENCY(MemorySSAWrapperPass)
143
+ INITIALIZE_PASS_DEPENDENCY(AAResultsWrapperPass)
144
+ INITIALIZE_PASS_END(AMDGPUAnnotateUniformValuesLegacy, DEBUG_TYPE,
145
+ " Add AMDGPU uniform metadata" , false , false )
146
+
147
+ char AMDGPUAnnotateUniformValuesLegacy::ID = 0;
148
+
149
+ FunctionPass *llvm::createAMDGPUAnnotateUniformValuesLegacy () {
150
+ return new AMDGPUAnnotateUniformValuesLegacy ();
124
151
}
0 commit comments