Skip to content

Commit b853988

Browse files
jwanggit86Jun Wang
andauthored
[AMDGPU] Port AMDGPURewriteUndefForPHI to new pass manager (#66008)
This patch ports the AMDGPURewriteUndefForPHI pass to the new pass manager. With this, the pass is supported under both the legacy and the new pass managers. --------- Co-authored-by: Jun Wang <[email protected]>
1 parent fa2edb6 commit b853988

File tree

4 files changed

+43
-14
lines changed

4 files changed

+43
-14
lines changed

llvm/lib/Target/AMDGPU/AMDGPU.h

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -287,9 +287,19 @@ extern char &AMDGPURemoveIncompatibleFunctionsID;
287287
void initializeAMDGPULateCodeGenPreparePass(PassRegistry &);
288288
extern char &AMDGPULateCodeGenPrepareID;
289289

290-
FunctionPass *createAMDGPURewriteUndefForPHIPass();
291-
void initializeAMDGPURewriteUndefForPHIPass(PassRegistry &);
292-
extern char &AMDGPURewriteUndefForPHIPassID;
290+
FunctionPass *createAMDGPURewriteUndefForPHILegacyPass();
291+
void initializeAMDGPURewriteUndefForPHILegacyPass(PassRegistry &);
292+
extern char &AMDGPURewriteUndefForPHILegacyPassID;
293+
294+
class AMDGPURewriteUndefForPHIPass
295+
: public PassInfoMixin<AMDGPURewriteUndefForPHIPass> {
296+
private:
297+
TargetMachine &TM;
298+
299+
public:
300+
AMDGPURewriteUndefForPHIPass(TargetMachine &TM) : TM(TM){};
301+
PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM);
302+
};
293303

294304
void initializeSIAnnotateControlFlowPass(PassRegistry&);
295305
extern char &SIAnnotateControlFlowPassID;

llvm/lib/Target/AMDGPU/AMDGPURewriteUndefForPHI.cpp

Lines changed: 23 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -69,11 +69,11 @@ using namespace llvm;
6969

7070
namespace {
7171

72-
class AMDGPURewriteUndefForPHI : public FunctionPass {
72+
class AMDGPURewriteUndefForPHILegacy : public FunctionPass {
7373
public:
7474
static char ID;
75-
AMDGPURewriteUndefForPHI() : FunctionPass(ID) {
76-
initializeAMDGPURewriteUndefForPHIPass(*PassRegistry::getPassRegistry());
75+
AMDGPURewriteUndefForPHILegacy() : FunctionPass(ID) {
76+
initializeAMDGPURewriteUndefForPHILegacyPass(*PassRegistry::getPassRegistry());
7777
}
7878
bool runOnFunction(Function &F) override;
7979
StringRef getPassName() const override {
@@ -91,13 +91,13 @@ class AMDGPURewriteUndefForPHI : public FunctionPass {
9191
};
9292

9393
} // end anonymous namespace
94-
char AMDGPURewriteUndefForPHI::ID = 0;
94+
char AMDGPURewriteUndefForPHILegacy::ID = 0;
9595

96-
INITIALIZE_PASS_BEGIN(AMDGPURewriteUndefForPHI, DEBUG_TYPE,
96+
INITIALIZE_PASS_BEGIN(AMDGPURewriteUndefForPHILegacy, DEBUG_TYPE,
9797
"Rewrite undef for PHI", false, false)
9898
INITIALIZE_PASS_DEPENDENCY(UniformityInfoWrapperPass)
9999
INITIALIZE_PASS_DEPENDENCY(DominatorTreeWrapperPass)
100-
INITIALIZE_PASS_END(AMDGPURewriteUndefForPHI, DEBUG_TYPE,
100+
INITIALIZE_PASS_END(AMDGPURewriteUndefForPHILegacy, DEBUG_TYPE,
101101
"Rewrite undef for PHI", false, false)
102102

103103
bool rewritePHIs(Function &F, UniformityInfo &UA, DominatorTree *DT) {
@@ -170,13 +170,27 @@ bool rewritePHIs(Function &F, UniformityInfo &UA, DominatorTree *DT) {
170170
return Changed;
171171
}
172172

173-
bool AMDGPURewriteUndefForPHI::runOnFunction(Function &F) {
173+
bool AMDGPURewriteUndefForPHILegacy::runOnFunction(Function &F) {
174174
UniformityInfo &UA =
175175
getAnalysis<UniformityInfoWrapperPass>().getUniformityInfo();
176176
DominatorTree *DT = &getAnalysis<DominatorTreeWrapperPass>().getDomTree();
177177
return rewritePHIs(F, UA, DT);
178178
}
179179

180-
FunctionPass *llvm::createAMDGPURewriteUndefForPHIPass() {
181-
return new AMDGPURewriteUndefForPHI();
180+
PreservedAnalyses
181+
AMDGPURewriteUndefForPHIPass::run(Function &F, FunctionAnalysisManager &AM) {
182+
UniformityInfo &UA = AM.getResult<UniformityInfoAnalysis>(F);
183+
DominatorTree *DT = &AM.getResult<DominatorTreeAnalysis>(F);
184+
bool Changed = rewritePHIs(F, UA, DT);
185+
if (Changed) {
186+
PreservedAnalyses PA;
187+
PA.preserveSet<CFGAnalyses>();
188+
return PA;
189+
}
190+
191+
return PreservedAnalyses::all();
192+
}
193+
194+
FunctionPass *llvm::createAMDGPURewriteUndefForPHILegacyPass() {
195+
return new AMDGPURewriteUndefForPHILegacy();
182196
}

llvm/lib/Target/AMDGPU/AMDGPUTargetMachine.cpp

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -390,7 +390,7 @@ extern "C" LLVM_EXTERNAL_VISIBILITY void LLVMInitializeAMDGPUTarget() {
390390
initializeAMDGPURemoveIncompatibleFunctionsPass(*PR);
391391
initializeAMDGPULowerModuleLDSLegacyPass(*PR);
392392
initializeAMDGPURewriteOutArgumentsPass(*PR);
393-
initializeAMDGPURewriteUndefForPHIPass(*PR);
393+
initializeAMDGPURewriteUndefForPHILegacyPass(*PR);
394394
initializeAMDGPUUnifyMetadataPass(*PR);
395395
initializeSIAnnotateControlFlowPass(*PR);
396396
initializeAMDGPUInsertDelayAluPass(*PR);
@@ -663,6 +663,10 @@ void AMDGPUTargetMachine::registerPassBuilderCallbacks(PassBuilder &PB) {
663663
PM.addPass(AMDGPULowerKernelArgumentsPass(*this));
664664
return true;
665665
}
666+
if (PassName == "amdgpu-rewrite-undef-for-phi") {
667+
PM.addPass(AMDGPURewriteUndefForPHIPass(*this));
668+
return true;
669+
}
666670
return false;
667671
});
668672

@@ -1150,7 +1154,7 @@ bool GCNPassConfig::addPreISel() {
11501154
// TODO: Move this right after structurizeCFG to avoid extra divergence
11511155
// analysis. This depends on stopping SIAnnotateControlFlow from making
11521156
// control flow modifications.
1153-
addPass(createAMDGPURewriteUndefForPHIPass());
1157+
addPass(createAMDGPURewriteUndefForPHILegacyPass());
11541158
}
11551159
addPass(createLCSSAPass());
11561160

llvm/test/CodeGen/AMDGPU/rewrite-undef-for-phi.ll

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
22
; RUN: opt -mtriple=amdgcn-- -S -amdgpu-rewrite-undef-for-phi %s | FileCheck -check-prefix=OPT %s
3+
; RUN: opt -mtriple=amdgcn-- -S -passes=amdgpu-rewrite-undef-for-phi %s | FileCheck -check-prefix=OPT %s
34

45
define amdgpu_ps float @basic(float inreg %c, i32 %x) #0 {
56
; OPT-LABEL: @basic(

0 commit comments

Comments
 (0)