Skip to content

[NVPTX] Add NewPM boilerplate to NVPTXImageOptimizer - #215133

Open
AlexMaclean wants to merge 1 commit into
llvm:mainfrom
AlexMaclean:dev/amaclean/ptx-npm-image-optimizer
Open

[NVPTX] Add NewPM boilerplate to NVPTXImageOptimizer#215133
AlexMaclean wants to merge 1 commit into
llvm:mainfrom
AlexMaclean:dev/amaclean/ptx-npm-image-optimizer

Conversation

@AlexMaclean

Copy link
Copy Markdown
Member

No description provided.

@llvmorg-github-actions

Copy link
Copy Markdown

@llvm/pr-subscribers-backend-nvptx

Author: Alex MacLean (AlexMaclean)

Changes

Full diff: https://github.com/llvm/llvm-project/pull/215133.diff

4 Files Affected:

  • (modified) llvm/lib/Target/NVPTX/NVPTX.h (+7-1)
  • (modified) llvm/lib/Target/NVPTX/NVPTXImageOptimizer.cpp (+33-21)
  • (modified) llvm/lib/Target/NVPTX/NVPTXPassRegistry.def (+1)
  • (modified) llvm/lib/Target/NVPTX/NVPTXTargetMachine.cpp (+1-1)
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 boomanaiden154 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

Comment thread llvm/lib/Target/NVPTX/NVPTX.h Outdated
class NVPTXImageOptimizerPass
: public OptionalPassInfoMixin<NVPTXImageOptimizerPass> {
public:
PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM);

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

s/AM/FAM to be consistent with other targets, although this is a pretty small nit.

}

PreservedAnalyses NVPTXImageOptimizerPass::run(Function &F,
FunctionAnalysisManager &) {

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

s/&/&FAM to match the declaration.

@AlexMaclean
AlexMaclean force-pushed the dev/amaclean/ptx-npm-image-optimizer branch from 69694af to 6914161 Compare August 10, 2026 03:31
@AlexMaclean
AlexMaclean force-pushed the dev/amaclean/ptx-npm-image-optimizer branch from 6914161 to d10bd2e Compare August 10, 2026 03:47
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants