[NVPTX] Add NewPM boilerplate to NVPTXImageOptimizer - #215133
Open
AlexMaclean wants to merge 1 commit into
Open
Conversation
|
@llvm/pr-subscribers-backend-nvptx Author: Alex MacLean (AlexMaclean) ChangesFull diff: https://github.com/llvm/llvm-project/pull/215133.diff 4 Files Affected:
diff --git a/llvm/lib/Target/NVPTX/NVPTX.h b/llvm/lib/Target/NVPTX/NVPTX.h
index 365ac038b79cc..291ce33e49e36 100644
--- a/llvm/lib/Target/NVPTX/NVPTX.h
+++ b/llvm/lib/Target/NVPTX/NVPTX.h
@@ -48,7 +48,7 @@ FunctionPass *createNVVMIntrRangePass();
ModulePass *createNVVMReflectPass(unsigned int SmVersion);
MachineFunctionPass *createNVPTXPrologEpilogPass();
MachineFunctionPass *createNVPTXReplaceImageHandlesPass();
-FunctionPass *createNVPTXImageOptimizerPass();
+FunctionPass *createNVPTXImageOptimizerLegacyPass();
ModulePass *createNVPTXLowerArgsPass();
ModulePass *createNVPTXPromoteParamAlignPass();
FunctionPass *createNVPTXLowerAllocaPass();
@@ -136,6 +136,12 @@ struct NVPTXTagInvariantLoadsPass
PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM);
};
+class NVPTXImageOptimizerPass
+ : public OptionalPassInfoMixin<NVPTXImageOptimizerPass> {
+public:
+ PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM);
+};
+
namespace NVPTX {
enum DrvInterface {
NVCL,
diff --git a/llvm/lib/Target/NVPTX/NVPTXImageOptimizer.cpp b/llvm/lib/Target/NVPTX/NVPTXImageOptimizer.cpp
index 12648a91a7bee..d1475a6954ec8 100644
--- a/llvm/lib/Target/NVPTX/NVPTXImageOptimizer.cpp
+++ b/llvm/lib/Target/NVPTX/NVPTXImageOptimizer.cpp
@@ -25,34 +25,20 @@
using namespace llvm;
namespace {
-class NVPTXImageOptimizer : public FunctionPass {
-private:
- static char ID;
- SmallVector<Instruction*, 4> InstrToDelete;
+class NVPTXImageOptimizer {
+ SmallVector<Instruction *, 4> InstrToDelete;
public:
- NVPTXImageOptimizer();
-
- bool runOnFunction(Function &F) override;
-
- StringRef getPassName() const override { return "NVPTX Image Optimizer"; }
+ bool run(Function &F);
private:
bool replaceIsTypeP(Instruction &I, PTXOpaqueType Expected);
Value *cleanupValue(Value *V);
void replaceWith(Instruction *From, ConstantInt *To);
};
-}
-
-char NVPTXImageOptimizer::ID = 0;
-
-NVPTXImageOptimizer::NVPTXImageOptimizer()
- : FunctionPass(ID) {}
-
-bool NVPTXImageOptimizer::runOnFunction(Function &F) {
- if (skipFunction(F))
- return false;
+} // namespace
+bool NVPTXImageOptimizer::run(Function &F) {
bool Changed = false;
InstrToDelete.clear();
@@ -118,6 +104,32 @@ Value *NVPTXImageOptimizer::cleanupValue(Value *V) {
return V;
}
-FunctionPass *llvm::createNVPTXImageOptimizerPass() {
- return new NVPTXImageOptimizer();
+namespace {
+class NVPTXImageOptimizerLegacyPass : public FunctionPass {
+public:
+ static char ID;
+ NVPTXImageOptimizerLegacyPass() : FunctionPass(ID) {}
+
+ bool runOnFunction(Function &F) override {
+ if (skipFunction(F))
+ return false;
+ return NVPTXImageOptimizer().run(F);
+ }
+
+ StringRef getPassName() const override { return "NVPTX Image Optimizer"; }
+};
+} // namespace
+
+char NVPTXImageOptimizerLegacyPass::ID = 0;
+
+FunctionPass *llvm::createNVPTXImageOptimizerLegacyPass() {
+ return new NVPTXImageOptimizerLegacyPass();
+}
+
+PreservedAnalyses NVPTXImageOptimizerPass::run(Function &F,
+ FunctionAnalysisManager &) {
+ // The transform replaces conditional branches with unconditional ones, so
+ // the CFG is not preserved.
+ return NVPTXImageOptimizer().run(F) ? PreservedAnalyses::none()
+ : PreservedAnalyses::all();
}
diff --git a/llvm/lib/Target/NVPTX/NVPTXPassRegistry.def b/llvm/lib/Target/NVPTX/NVPTXPassRegistry.def
index 7fd6265cda106..382008a23c3f4 100644
--- a/llvm/lib/Target/NVPTX/NVPTXPassRegistry.def
+++ b/llvm/lib/Target/NVPTX/NVPTXPassRegistry.def
@@ -40,6 +40,7 @@ FUNCTION_ALIAS_ANALYSIS("nvptx-aa", NVPTXAA())
#endif
FUNCTION_PASS("nvvm-intr-range", NVVMIntrRangePass())
FUNCTION_PASS("nvptx-copy-byval-args", NVPTXCopyByValArgsPass())
+FUNCTION_PASS("nvptx-image-optimizer", NVPTXImageOptimizerPass())
FUNCTION_PASS("nvptx-mark-kernel-ptrs-global", NVPTXMarkKernelPtrsGlobalPass())
FUNCTION_PASS("nvptx-tag-invariant-loads", NVPTXTagInvariantLoadsPass())
FUNCTION_PASS("nvptx-ir-peephole", NVPTXIRPeepholePass())
diff --git a/llvm/lib/Target/NVPTX/NVPTXTargetMachine.cpp b/llvm/lib/Target/NVPTX/NVPTXTargetMachine.cpp
index 3c548bc581686..97ca10fb29cbb 100644
--- a/llvm/lib/Target/NVPTX/NVPTXTargetMachine.cpp
+++ b/llvm/lib/Target/NVPTX/NVPTXTargetMachine.cpp
@@ -331,7 +331,7 @@ void NVPTXPassConfig::addIRPasses() {
addPass(createNVVMReflectPass(ST.getSmVersion()));
if (getOptLevel() != CodeGenOptLevel::None)
- addPass(createNVPTXImageOptimizerPass());
+ addPass(createNVPTXImageOptimizerLegacyPass());
addPass(createNVPTXAssignValidGlobalNamesPass());
addPass(createGenericToNVVMLegacyPass());
|
boomanaiden154
approved these changes
Aug 10, 2026
| class NVPTXImageOptimizerPass | ||
| : public OptionalPassInfoMixin<NVPTXImageOptimizerPass> { | ||
| public: | ||
| PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM); |
Contributor
There was a problem hiding this comment.
s/AM/FAM to be consistent with other targets, although this is a pretty small nit.
| } | ||
|
|
||
| PreservedAnalyses NVPTXImageOptimizerPass::run(Function &F, | ||
| FunctionAnalysisManager &) { |
Contributor
There was a problem hiding this comment.
s/&/&FAM to match the declaration.
AlexMaclean
force-pushed
the
dev/amaclean/ptx-npm-image-optimizer
branch
from
August 10, 2026 03:31
69694af to
6914161
Compare
AlexMaclean
force-pushed
the
dev/amaclean/ptx-npm-image-optimizer
branch
from
August 10, 2026 03:47
6914161 to
d10bd2e
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
No description provided.