Skip to content

Commit 25b920a

Browse files
committed
AMDGPU/NewPM: Port AMDGPUAnnotateUniformValues to new pass manager
1 parent 034501e commit 25b920a

File tree

5 files changed

+81
-45
lines changed

5 files changed

+81
-45
lines changed

llvm/lib/Target/AMDGPU/AMDGPU.h

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -293,7 +293,14 @@ class AMDGPUAttributorPass : public PassInfoMixin<AMDGPUAttributorPass> {
293293
PreservedAnalyses run(Module &M, ModuleAnalysisManager &AM);
294294
};
295295

296-
FunctionPass *createAMDGPUAnnotateUniformValues();
296+
class AMDGPUAnnotateUniformValuesPass
297+
: public PassInfoMixin<AMDGPUAnnotateUniformValuesPass> {
298+
public:
299+
AMDGPUAnnotateUniformValuesPass() {}
300+
PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM);
301+
};
302+
303+
FunctionPass *createAMDGPUAnnotateUniformValuesLegacy();
297304

298305
ModulePass *createAMDGPUPrintfRuntimeBinding();
299306
void initializeAMDGPUPrintfRuntimeBindingPass(PassRegistry&);
@@ -321,8 +328,8 @@ extern char &SIOptimizeExecMaskingPreRAID;
321328
void initializeSIOptimizeVGPRLiveRangePass(PassRegistry &);
322329
extern char &SIOptimizeVGPRLiveRangeID;
323330

324-
void initializeAMDGPUAnnotateUniformValuesPass(PassRegistry&);
325-
extern char &AMDGPUAnnotateUniformValuesPassID;
331+
void initializeAMDGPUAnnotateUniformValuesLegacyPass(PassRegistry &);
332+
extern char &AMDGPUAnnotateUniformValuesLegacyPassID;
326333

327334
void initializeAMDGPUCodeGenPreparePass(PassRegistry&);
328335
extern char &AMDGPUCodeGenPrepareID;

llvm/lib/Target/AMDGPU/AMDGPUAnnotateUniformValues.cpp

Lines changed: 66 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,8 @@ using namespace llvm;
2727

2828
namespace {
2929

30-
class AMDGPUAnnotateUniformValues : public FunctionPass,
31-
public InstVisitor<AMDGPUAnnotateUniformValues> {
30+
class AMDGPUAnnotateUniformValues
31+
: public InstVisitor<AMDGPUAnnotateUniformValues> {
3232
UniformityInfo *UA;
3333
MemorySSA *MSSA;
3434
AliasAnalysis *AA;
@@ -46,37 +46,19 @@ class AMDGPUAnnotateUniformValues : public FunctionPass,
4646
}
4747

4848
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())) {}
6353

6454
void visitBranchInst(BranchInst &I);
6555
void visitLoadInst(LoadInst &I);
56+
57+
bool changed() const { return Changed; }
6658
};
6759

6860
} // End anonymous namespace
6961

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-
8062
void AMDGPUAnnotateUniformValues::visitBranchInst(BranchInst &I) {
8163
if (UA->isUniform(&I))
8264
setUniformMetadata(&I);
@@ -100,25 +82,70 @@ void AMDGPUAnnotateUniformValues::visitLoadInst(LoadInst &I) {
10082
setNoClobberMetadata(&I);
10183
}
10284

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;
105102
}
106103

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) {
108126
if (skipFunction(F))
109127
return false;
110128

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();
115133

116-
Changed = false;
117-
visit(F);
118-
return Changed;
134+
AMDGPUAnnotateUniformValues Impl(UI, MSSA, AA, F);
135+
Impl.visit(F);
136+
return Impl.changed();
119137
}
120138

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();
124151
}

llvm/lib/Target/AMDGPU/AMDGPUPassRegistry.def

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ MODULE_PASS("amdgpu-unify-metadata", AMDGPUUnifyMetadataPass())
2929
#ifndef FUNCTION_PASS
3030
#define FUNCTION_PASS(NAME, CREATE_PASS)
3131
#endif
32+
FUNCTION_PASS("amdgpu-annotate-uniform", AMDGPUAnnotateUniformValuesPass())
3233
FUNCTION_PASS("amdgpu-codegenprepare", AMDGPUCodeGenPreparePass(*this))
3334
FUNCTION_PASS("amdgpu-image-intrinsic-opt",
3435
AMDGPUImageIntrinsicOptimizerPass(*this))

llvm/lib/Target/AMDGPU/AMDGPUTargetMachine.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -417,7 +417,7 @@ extern "C" LLVM_EXTERNAL_VISIBILITY void LLVMInitializeAMDGPUTarget() {
417417
initializeAMDGPUAlwaysInlinePass(*PR);
418418
initializeAMDGPUAttributorLegacyPass(*PR);
419419
initializeAMDGPUAnnotateKernelFeaturesPass(*PR);
420-
initializeAMDGPUAnnotateUniformValuesPass(*PR);
420+
initializeAMDGPUAnnotateUniformValuesLegacyPass(*PR);
421421
initializeAMDGPUArgumentUsageInfoPass(*PR);
422422
initializeAMDGPUAtomicOptimizerPass(*PR);
423423
initializeAMDGPULowerKernelArgumentsPass(*PR);
@@ -1218,7 +1218,7 @@ bool GCNPassConfig::addPreISel() {
12181218
}
12191219
addPass(createStructurizeCFGPass(false)); // true -> SkipUniformRegions
12201220
}
1221-
addPass(createAMDGPUAnnotateUniformValues());
1221+
addPass(createAMDGPUAnnotateUniformValuesLegacy());
12221222
if (!LateCFGStructurize && !DisableStructurizer) {
12231223
addPass(createSIAnnotateControlFlowLegacyPass());
12241224
// TODO: Move this right after structurizeCFG to avoid extra divergence

llvm/test/CodeGen/AMDGPU/annotate-noclobber.ll

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
; RUN: opt -S --amdgpu-annotate-uniform < %s | FileCheck -check-prefix=OPT %s
1+
; RUN: opt -S -mtriple=amdgcn-amd-amdhsa --amdgpu-annotate-uniform < %s | FileCheck -check-prefix=OPT %s
2+
; RUN: opt -S -mtriple=amdgcn-amd-amdhsa -passes=amdgpu-annotate-uniform < %s | FileCheck -check-prefix=OPT %s
23
target datalayout = "A5"
34

45

0 commit comments

Comments
 (0)