[llvm] [SPIRV] Add pass SPIRVEmitIntrinsics to new pass manager (PR #188285)

via llvm-commits llvm-commits at lists.llvm.org
Wed Mar 25 04:01:26 PDT 2026


https://github.com/ambergorzynski updated https://github.com/llvm/llvm-project/pull/188285

>From 55002be644a72dea749030b631c99964383a3224 Mon Sep 17 00:00:00 2001
From: agorzyns <amber.gorzynski at amd.com>
Date: Tue, 24 Mar 2026 10:53:28 -0500
Subject: [PATCH 1/8] [SPIRV] Create new pass manager wrapper for
 SPIRVEmitIntrinsics pass

---
 llvm/lib/Target/SPIRV/SPIRVEmitIntrinsics.cpp |  8 +++++
 llvm/lib/Target/SPIRV/SPIRVEmitIntrinsics.h   | 29 +++++++++++++++++++
 2 files changed, 37 insertions(+)
 create mode 100644 llvm/lib/Target/SPIRV/SPIRVEmitIntrinsics.h

diff --git a/llvm/lib/Target/SPIRV/SPIRVEmitIntrinsics.cpp b/llvm/lib/Target/SPIRV/SPIRVEmitIntrinsics.cpp
index 131b56e92b8be..f4b08ef162a9e 100644
--- a/llvm/lib/Target/SPIRV/SPIRVEmitIntrinsics.cpp
+++ b/llvm/lib/Target/SPIRV/SPIRVEmitIntrinsics.cpp
@@ -11,6 +11,7 @@
 //
 //===----------------------------------------------------------------------===//
 
+#include "SPIRVEmitIntrinsics.h"
 #include "SPIRV.h"
 #include "SPIRVBuiltins.h"
 #include "SPIRVSubtarget.h"
@@ -3443,6 +3444,13 @@ bool SPIRVEmitIntrinsics::runOnModule(Module &M) {
   return Changed;
 }
 
+PreservedAnalyses llvm::SPIRVEmitIntrinsicsPass::run(Module &M, ModuleAnalysisManager &AM) {
+  SPIRVEmitIntrinsics Legacy(TM);
+  if (Legacy.runOnModule(M))
+    return PreservedAnalyses::none();
+  return PreservedAnalyses::all();
+}
+
 ModulePass *llvm::createSPIRVEmitIntrinsicsPass(SPIRVTargetMachine *TM) {
   return new SPIRVEmitIntrinsics(TM);
 }
diff --git a/llvm/lib/Target/SPIRV/SPIRVEmitIntrinsics.h b/llvm/lib/Target/SPIRV/SPIRVEmitIntrinsics.h
new file mode 100644
index 0000000000000..963708673f072
--- /dev/null
+++ b/llvm/lib/Target/SPIRV/SPIRVEmitIntrinsics.h
@@ -0,0 +1,29 @@
+//===- SPIRVEmitIntrinsics.h - Emit SPIRV intrinsics *- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_LIB_TARGET_SPIRV_SPIRVEMITINTRINSICS_H_
+#define LLVM_LIB_TARGET_SPIRV_SPIRVEMITINTRINSICS_H_
+
+#include "llvm/IR/PassManager.h"
+
+namespace llvm {
+
+class SPIRVTargetMachine;
+
+class SPIRVEmitIntrinsicsPass
+    : public PassInfoMixin<SPIRVEmitIntrinsicsPass> {
+  SPIRVTargetMachine *TM;
+
+public:
+  SPIRVEmitIntrinsicsPass(SPIRVTargetMachine *TM) : TM(TM) {}
+  PreservedAnalyses run(Module &M, ModuleAnalysisManager &AM);
+};
+
+} // namespace llvm
+
+#endif // LLVM_LIB_TARGET_SPIRV_SPIRVEMITINTRINSICS_H_

>From db66a50547aaa1db8b47e1cf399846f556c3ae7a Mon Sep 17 00:00:00 2001
From: agorzyns <amber.gorzynski at amd.com>
Date: Tue, 24 Mar 2026 10:58:01 -0500
Subject: [PATCH 2/8] [SPIRV] Register spirv-emit-intrinsics pass with NPM

---
 llvm/lib/Target/SPIRV/SPIRVPassRegistry.def  | 1 +
 llvm/lib/Target/SPIRV/SPIRVTargetMachine.cpp | 1 +
 2 files changed, 2 insertions(+)

diff --git a/llvm/lib/Target/SPIRV/SPIRVPassRegistry.def b/llvm/lib/Target/SPIRV/SPIRVPassRegistry.def
index 1e24f636b1d17..29b284333d02b 100644
--- a/llvm/lib/Target/SPIRV/SPIRVPassRegistry.def
+++ b/llvm/lib/Target/SPIRV/SPIRVPassRegistry.def
@@ -19,6 +19,7 @@
 MODULE_PASS("spirv-cbuffer-access", SPIRVCBufferAccess())
 MODULE_PASS("spirv-legalize-zero-size-arrays", SPIRVLegalizeZeroSizeArrays(*static_cast<const SPIRVTargetMachine *>(this)))
 MODULE_PASS("spirv-pushconstant-access", SPIRVPushConstantAccess(*static_cast<const SPIRVTargetMachine *>(this)))
+MODULE_PASS("spirv-emit-intrinsics", SPIRVEmitIntrinsicsPass(this))
 #undef MODULE_PASS
 
 #ifndef FUNCTION_PASS
diff --git a/llvm/lib/Target/SPIRV/SPIRVTargetMachine.cpp b/llvm/lib/Target/SPIRV/SPIRVTargetMachine.cpp
index 1759b34af3e90..5f8886333e710 100644
--- a/llvm/lib/Target/SPIRV/SPIRVTargetMachine.cpp
+++ b/llvm/lib/Target/SPIRV/SPIRVTargetMachine.cpp
@@ -13,6 +13,7 @@
 #include "SPIRVTargetMachine.h"
 #include "SPIRV.h"
 #include "SPIRVCBufferAccess.h"
+#include "SPIRVEmitIntrinsics.h"
 #include "SPIRVGlobalRegistry.h"
 #include "SPIRVLegalizeZeroSizeArrays.h"
 #include "SPIRVLegalizerInfo.h"

>From 15d6e9d32d16f7d47337b1d2f8ab379e052b9e4f Mon Sep 17 00:00:00 2001
From: agorzyns <amber.gorzynski at amd.com>
Date: Tue, 24 Mar 2026 11:09:30 -0500
Subject: [PATCH 3/8] [SPIRV] Name pass consistently with legacy pass manager

---
 llvm/lib/Target/SPIRV/SPIRVPassRegistry.def | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/llvm/lib/Target/SPIRV/SPIRVPassRegistry.def b/llvm/lib/Target/SPIRV/SPIRVPassRegistry.def
index 29b284333d02b..1f81e359b6d30 100644
--- a/llvm/lib/Target/SPIRV/SPIRVPassRegistry.def
+++ b/llvm/lib/Target/SPIRV/SPIRVPassRegistry.def
@@ -19,7 +19,7 @@
 MODULE_PASS("spirv-cbuffer-access", SPIRVCBufferAccess())
 MODULE_PASS("spirv-legalize-zero-size-arrays", SPIRVLegalizeZeroSizeArrays(*static_cast<const SPIRVTargetMachine *>(this)))
 MODULE_PASS("spirv-pushconstant-access", SPIRVPushConstantAccess(*static_cast<const SPIRVTargetMachine *>(this)))
-MODULE_PASS("spirv-emit-intrinsics", SPIRVEmitIntrinsicsPass(this))
+MODULE_PASS("emit-intrinsics", SPIRVEmitIntrinsicsPass(this))
 #undef MODULE_PASS
 
 #ifndef FUNCTION_PASS

>From 427e9c1684a09273daecd8422a231f26976b605f Mon Sep 17 00:00:00 2001
From: agorzyns <amber.gorzynski at amd.com>
Date: Tue, 24 Mar 2026 11:23:47 -0500
Subject: [PATCH 4/8] [SPIRV] Add test to check NPM pass registration for
 emit-intrinsics

---
 .../SPIRV/passes/SPIRVEmitIntrinsics.ll       | 21 +++++++++++++++++++
 1 file changed, 21 insertions(+)
 create mode 100644 llvm/test/CodeGen/SPIRV/passes/SPIRVEmitIntrinsics.ll

diff --git a/llvm/test/CodeGen/SPIRV/passes/SPIRVEmitIntrinsics.ll b/llvm/test/CodeGen/SPIRV/passes/SPIRVEmitIntrinsics.ll
new file mode 100644
index 0000000000000..caa135c3d02ff
--- /dev/null
+++ b/llvm/test/CodeGen/SPIRV/passes/SPIRVEmitIntrinsics.ll
@@ -0,0 +1,21 @@
+; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 6
+; Test NPM registration of emit-intrinsics for SPIR-V (SPIRVPassRegistry.def).
+;
+; RUN: opt -S -passes=emit-intrinsics %s -mtriple=spirv64-unknown-unknown -o - | FileCheck %s
+
+
+define spir_kernel void @k() {
+; CHECK-LABEL: define spir_kernel void @k() {
+; CHECK-NEXT:  [[ENTRY:.*:]]
+; CHECK-NEXT:    [[A:%.*]] = call ptr @llvm.spv.alloca.p0(i32 4)
+; CHECK-NEXT:    call void @llvm.spv.assign.name.p0(ptr [[A]], metadata [[META0:![0-9]+]])
+; CHECK-NEXT:    call void @llvm.spv.assign.ptr.type.p0(ptr [[A]], metadata i32 poison, i32 0)
+; CHECK-NEXT:    ret void
+;
+entry:
+  %a = alloca i32, align 4
+  ret void
+}
+;.
+; CHECK: [[META0]] = !{!"a"}
+;.

>From 2295a01d77313edb627052937648a63bd13582be Mon Sep 17 00:00:00 2001
From: agorzyns <amber.gorzynski at amd.com>
Date: Tue, 24 Mar 2026 12:18:56 -0500
Subject: [PATCH 5/8] [SPIRV] Fix formatting

---
 llvm/lib/Target/SPIRV/SPIRVEmitIntrinsics.cpp         | 5 +++--
 llvm/lib/Target/SPIRV/SPIRVEmitIntrinsics.h           | 5 ++---
 llvm/test/CodeGen/SPIRV/passes/SPIRVEmitIntrinsics.ll | 1 -
 3 files changed, 5 insertions(+), 6 deletions(-)

diff --git a/llvm/lib/Target/SPIRV/SPIRVEmitIntrinsics.cpp b/llvm/lib/Target/SPIRV/SPIRVEmitIntrinsics.cpp
index f4b08ef162a9e..2894ea6960ce5 100644
--- a/llvm/lib/Target/SPIRV/SPIRVEmitIntrinsics.cpp
+++ b/llvm/lib/Target/SPIRV/SPIRVEmitIntrinsics.cpp
@@ -3444,7 +3444,8 @@ bool SPIRVEmitIntrinsics::runOnModule(Module &M) {
   return Changed;
 }
 
-PreservedAnalyses llvm::SPIRVEmitIntrinsicsPass::run(Module &M, ModuleAnalysisManager &AM) {
+PreservedAnalyses 
+llvm::SPIRVEmitIntrinsicsPass::run(Module &M, ModuleAnalysisManager &AM) {
   SPIRVEmitIntrinsics Legacy(TM);
   if (Legacy.runOnModule(M))
     return PreservedAnalyses::none();
@@ -3453,4 +3454,4 @@ PreservedAnalyses llvm::SPIRVEmitIntrinsicsPass::run(Module &M, ModuleAnalysisMa
 
 ModulePass *llvm::createSPIRVEmitIntrinsicsPass(SPIRVTargetMachine *TM) {
   return new SPIRVEmitIntrinsics(TM);
-}
+}
\ No newline at end of file
diff --git a/llvm/lib/Target/SPIRV/SPIRVEmitIntrinsics.h b/llvm/lib/Target/SPIRV/SPIRVEmitIntrinsics.h
index 963708673f072..e3de77d7bd0e4 100644
--- a/llvm/lib/Target/SPIRV/SPIRVEmitIntrinsics.h
+++ b/llvm/lib/Target/SPIRV/SPIRVEmitIntrinsics.h
@@ -15,8 +15,7 @@ namespace llvm {
 
 class SPIRVTargetMachine;
 
-class SPIRVEmitIntrinsicsPass
-    : public PassInfoMixin<SPIRVEmitIntrinsicsPass> {
+class SPIRVEmitIntrinsicsPass : public PassInfoMixin<SPIRVEmitIntrinsicsPass> {
   SPIRVTargetMachine *TM;
 
 public:
@@ -26,4 +25,4 @@ class SPIRVEmitIntrinsicsPass
 
 } // namespace llvm
 
-#endif // LLVM_LIB_TARGET_SPIRV_SPIRVEMITINTRINSICS_H_
+#endif // LLVM_LIB_TARGET_SPIRV_SPIRVEMITINTRINSICS_H_
\ No newline at end of file
diff --git a/llvm/test/CodeGen/SPIRV/passes/SPIRVEmitIntrinsics.ll b/llvm/test/CodeGen/SPIRV/passes/SPIRVEmitIntrinsics.ll
index caa135c3d02ff..0d35672ef900c 100644
--- a/llvm/test/CodeGen/SPIRV/passes/SPIRVEmitIntrinsics.ll
+++ b/llvm/test/CodeGen/SPIRV/passes/SPIRVEmitIntrinsics.ll
@@ -3,7 +3,6 @@
 ;
 ; RUN: opt -S -passes=emit-intrinsics %s -mtriple=spirv64-unknown-unknown -o - | FileCheck %s
 
-
 define spir_kernel void @k() {
 ; CHECK-LABEL: define spir_kernel void @k() {
 ; CHECK-NEXT:  [[ENTRY:.*:]]

>From b37f17e32eccfa2cb4d1e3e8db852e3151eaf9d8 Mon Sep 17 00:00:00 2001
From: agorzyns <amber.gorzynski at amd.com>
Date: Tue, 24 Mar 2026 12:24:27 -0500
Subject: [PATCH 6/8] [SPIRV] Fix formatting

---
 llvm/lib/Target/SPIRV/SPIRVEmitIntrinsics.cpp | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/llvm/lib/Target/SPIRV/SPIRVEmitIntrinsics.cpp b/llvm/lib/Target/SPIRV/SPIRVEmitIntrinsics.cpp
index 2894ea6960ce5..0b10bef059fb6 100644
--- a/llvm/lib/Target/SPIRV/SPIRVEmitIntrinsics.cpp
+++ b/llvm/lib/Target/SPIRV/SPIRVEmitIntrinsics.cpp
@@ -3444,7 +3444,7 @@ bool SPIRVEmitIntrinsics::runOnModule(Module &M) {
   return Changed;
 }
 
-PreservedAnalyses 
+PreservedAnalyses
 llvm::SPIRVEmitIntrinsicsPass::run(Module &M, ModuleAnalysisManager &AM) {
   SPIRVEmitIntrinsics Legacy(TM);
   if (Legacy.runOnModule(M))
@@ -3454,4 +3454,4 @@ llvm::SPIRVEmitIntrinsicsPass::run(Module &M, ModuleAnalysisManager &AM) {
 
 ModulePass *llvm::createSPIRVEmitIntrinsicsPass(SPIRVTargetMachine *TM) {
   return new SPIRVEmitIntrinsics(TM);
-}
\ No newline at end of file
+}

>From b3144bd9eb8f6779da7d57cfe4fdd135b417b74c Mon Sep 17 00:00:00 2001
From: agorzyns <amber.gorzynski at amd.com>
Date: Tue, 24 Mar 2026 12:28:20 -0500
Subject: [PATCH 7/8] [SPIRV] Fix formatting

---
 llvm/lib/Target/SPIRV/SPIRVEmitIntrinsics.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/llvm/lib/Target/SPIRV/SPIRVEmitIntrinsics.h b/llvm/lib/Target/SPIRV/SPIRVEmitIntrinsics.h
index e3de77d7bd0e4..9d587f57f118f 100644
--- a/llvm/lib/Target/SPIRV/SPIRVEmitIntrinsics.h
+++ b/llvm/lib/Target/SPIRV/SPIRVEmitIntrinsics.h
@@ -25,4 +25,4 @@ class SPIRVEmitIntrinsicsPass : public PassInfoMixin<SPIRVEmitIntrinsicsPass> {
 
 } // namespace llvm
 
-#endif // LLVM_LIB_TARGET_SPIRV_SPIRVEMITINTRINSICS_H_
\ No newline at end of file
+#endif // LLVM_LIB_TARGET_SPIRV_SPIRVEMITINTRINSICS_H_

>From 582917baccfea912595b3bc1153bfc51eb320697 Mon Sep 17 00:00:00 2001
From: agorzyns <amber.gorzynski at amd.com>
Date: Wed, 25 Mar 2026 06:00:37 -0500
Subject: [PATCH 8/8] [review] Add vulkan check

---
 llvm/test/CodeGen/SPIRV/passes/SPIRVEmitIntrinsics.ll | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/llvm/test/CodeGen/SPIRV/passes/SPIRVEmitIntrinsics.ll b/llvm/test/CodeGen/SPIRV/passes/SPIRVEmitIntrinsics.ll
index 0d35672ef900c..b9898ae807dc8 100644
--- a/llvm/test/CodeGen/SPIRV/passes/SPIRVEmitIntrinsics.ll
+++ b/llvm/test/CodeGen/SPIRV/passes/SPIRVEmitIntrinsics.ll
@@ -2,9 +2,10 @@
 ; Test NPM registration of emit-intrinsics for SPIR-V (SPIRVPassRegistry.def).
 ;
 ; RUN: opt -S -passes=emit-intrinsics %s -mtriple=spirv64-unknown-unknown -o - | FileCheck %s
+; RUN: opt -S -passes=emit-intrinsics %s -mtriple=spirv64-unknown-vulkan -o - | FileCheck %s
 
-define spir_kernel void @k() {
-; CHECK-LABEL: define spir_kernel void @k() {
+define void @k() {
+; CHECK-LABEL: define void @k() {
 ; CHECK-NEXT:  [[ENTRY:.*:]]
 ; CHECK-NEXT:    [[A:%.*]] = call ptr @llvm.spv.alloca.p0(i32 4)
 ; CHECK-NEXT:    call void @llvm.spv.assign.name.p0(ptr [[A]], metadata [[META0:![0-9]+]])



More information about the llvm-commits mailing list