[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