[llvm] 4abe3f1 - [SPIRV] Fix bug in emitting GLSL ext inst names

Natalie Chouinard via llvm-commits llvm-commits at lists.llvm.org
Tue Sep 19 06:45:16 PDT 2023


Author: Natalie Chouinard
Date: 2023-09-19T13:44:13Z
New Revision: 4abe3f18e2f021eee24b2b2c5cc366226fee0c60

URL: https://github.com/llvm/llvm-project/commit/4abe3f18e2f021eee24b2b2c5cc366226fee0c60
DIFF: https://github.com/llvm/llvm-project/commit/4abe3f18e2f021eee24b2b2c5cc366226fee0c60.diff

LOG: [SPIRV] Fix bug in emitting GLSL ext inst names

Lookup extended instruction numbers in the given instruction set so that
correct names are now emitted for GLSL.std.450 instructions as well as
OpenCL.std.

Add a single test to verify correct abs intrinsic names are emitted when
targetting logical SPIR-V.

Depends on D156424

Differential Revision: https://reviews.llvm.org/D159227

Added: 
    llvm/test/CodeGen/SPIRV/hlsl-intrinsics/abs.ll

Modified: 
    llvm/lib/Target/SPIRV/MCTargetDesc/SPIRVBaseInfo.cpp

Removed: 
    


################################################################################
diff  --git a/llvm/lib/Target/SPIRV/MCTargetDesc/SPIRVBaseInfo.cpp b/llvm/lib/Target/SPIRV/MCTargetDesc/SPIRVBaseInfo.cpp
index 020cfa6ee20fa90..1af7b7a5d7845f2 100644
--- a/llvm/lib/Target/SPIRV/MCTargetDesc/SPIRVBaseInfo.cpp
+++ b/llvm/lib/Target/SPIRV/MCTargetDesc/SPIRVBaseInfo.cpp
@@ -217,8 +217,7 @@ getExtInstSetFromString(std::string SetName) {
 std::string getExtInstName(SPIRV::InstructionSet::InstructionSet Set,
                            uint32_t InstructionNumber) {
   const SPIRV::ExtendedBuiltin *Lookup =
-      SPIRV::lookupExtendedBuiltinBySetAndNumber(
-          SPIRV::InstructionSet::OpenCL_std, InstructionNumber);
+      SPIRV::lookupExtendedBuiltinBySetAndNumber(Set, InstructionNumber);
 
   if (!Lookup)
     return "UNKNOWN_EXT_INST";

diff  --git a/llvm/test/CodeGen/SPIRV/hlsl-intrinsics/abs.ll b/llvm/test/CodeGen/SPIRV/hlsl-intrinsics/abs.ll
new file mode 100644
index 000000000000000..7031129de21ac6b
--- /dev/null
+++ b/llvm/test/CodeGen/SPIRV/hlsl-intrinsics/abs.ll
@@ -0,0 +1,27 @@
+; RUN: llc -O0 -mtriple=spirv-unknown-linux %s -o - | FileCheck %s
+
+; CHECK: OpExtInstImport "GLSL.std.450"
+
+define void @main() #1 {
+entry:
+  %i = alloca i32, align 4
+  %absi = alloca i32, align 4
+  %f = alloca float, align 4
+  %absf = alloca float, align 4
+  %0 = load i32, ptr %i, align 4
+
+; CHECK: %[[#]] = OpExtInst %[[#]] %[[#]] SAbs %[[#]]
+  %elt.abs = call i32 @llvm.abs.i32(i32 %0, i1 false)
+
+  store i32 %elt.abs, ptr %absi, align 4
+  %1 = load float, ptr %f, align 4
+
+; CHECK: %[[#]] = OpExtInst %[[#]] %[[#]] FAbs %[[#]]
+  %elt.abs1 = call float @llvm.fabs.f32(float %1)
+
+  store float %elt.abs1, ptr %absf, align 4
+  ret void
+}
+
+declare i32 @llvm.abs.i32(i32, i1 immarg) #2
+declare float @llvm.fabs.f32(float) #2


        


More information about the llvm-commits mailing list