[llvm] [SPIR-V] Add tests for lowering unmangled builtins calls (PR #84319)

Michal Paszkowski via llvm-commits llvm-commits at lists.llvm.org
Thu Mar 7 05:11:39 PST 2024


https://github.com/michalpaszkowski created https://github.com/llvm/llvm-project/pull/84319

This pull request adds initial tests for lowering unmangled SPIR-V builtin function calls. One `; XFAIL: *` test is added to demonstrate the reliance on mangled function names in SPIRVBuiltins.cpp (ultimately the types should be restored from either the TargetExtType or GR).

The pull request also moves and renames relevant builtin calls tests to `/builtins/`.

>From b140785acec9492e3e88d660a2b3c8c51f7a61c4 Mon Sep 17 00:00:00 2001
From: Michal Paszkowski <michal at paszkowski.org>
Date: Thu, 7 Mar 2024 03:27:44 -0800
Subject: [PATCH 1/3] [SPIR-V] Move SPIR-V builtins tests to /builtins/

---
 .../CodeGen/SPIRV/{ => builtins}/FOrdGreaterThanEqual_bool.ll     | 0
 llvm/test/CodeGen/SPIRV/{ => builtins}/SampledImageRetType.ll     | 0
 .../SPIRV/{transcoding => builtins}/SpecConstantComposite.ll      | 0
 .../SPIRV/{SpecConstants => builtins}/bool-spirv-specconstant.ll  | 0
 .../test/CodeGen/SPIRV/{transcoding => builtins}/builtin_calls.ll | 0
 llvm/test/CodeGen/SPIRV/{ => builtins}/builtin_vars-decorate.ll   | 0
 llvm/test/CodeGen/SPIRV/{transcoding => builtins}/builtin_vars.ll | 0
 .../SPIRV/{transcoding => builtins}/builtin_vars_arithmetics.ll   | 0
 .../CodeGen/SPIRV/{transcoding => builtins}/builtin_vars_opt.ll   | 0
 llvm/test/CodeGen/SPIRV/{ => builtins}/relationals.ll             | 0
 llvm/test/CodeGen/SPIRV/{ => builtins}/select.ll                  | 0
 llvm/test/CodeGen/SPIRV/{transcoding => builtins}/spec_const.ll   | 0
 llvm/test/CodeGen/SPIRV/{ => builtins}/spec_const_decoration.ll   | 0
 llvm/test/CodeGen/SPIRV/{ => builtins}/spirv-load-store.ll        | 0
 llvm/test/CodeGen/SPIRV/{transcoding => builtins}/spirv-types.ll  | 0
 15 files changed, 0 insertions(+), 0 deletions(-)
 rename llvm/test/CodeGen/SPIRV/{ => builtins}/FOrdGreaterThanEqual_bool.ll (100%)
 rename llvm/test/CodeGen/SPIRV/{ => builtins}/SampledImageRetType.ll (100%)
 rename llvm/test/CodeGen/SPIRV/{transcoding => builtins}/SpecConstantComposite.ll (100%)
 rename llvm/test/CodeGen/SPIRV/{SpecConstants => builtins}/bool-spirv-specconstant.ll (100%)
 rename llvm/test/CodeGen/SPIRV/{transcoding => builtins}/builtin_calls.ll (100%)
 rename llvm/test/CodeGen/SPIRV/{ => builtins}/builtin_vars-decorate.ll (100%)
 rename llvm/test/CodeGen/SPIRV/{transcoding => builtins}/builtin_vars.ll (100%)
 rename llvm/test/CodeGen/SPIRV/{transcoding => builtins}/builtin_vars_arithmetics.ll (100%)
 rename llvm/test/CodeGen/SPIRV/{transcoding => builtins}/builtin_vars_opt.ll (100%)
 rename llvm/test/CodeGen/SPIRV/{ => builtins}/relationals.ll (100%)
 rename llvm/test/CodeGen/SPIRV/{ => builtins}/select.ll (100%)
 rename llvm/test/CodeGen/SPIRV/{transcoding => builtins}/spec_const.ll (100%)
 rename llvm/test/CodeGen/SPIRV/{ => builtins}/spec_const_decoration.ll (100%)
 rename llvm/test/CodeGen/SPIRV/{ => builtins}/spirv-load-store.ll (100%)
 rename llvm/test/CodeGen/SPIRV/{transcoding => builtins}/spirv-types.ll (100%)

diff --git a/llvm/test/CodeGen/SPIRV/FOrdGreaterThanEqual_bool.ll b/llvm/test/CodeGen/SPIRV/builtins/FOrdGreaterThanEqual_bool.ll
similarity index 100%
rename from llvm/test/CodeGen/SPIRV/FOrdGreaterThanEqual_bool.ll
rename to llvm/test/CodeGen/SPIRV/builtins/FOrdGreaterThanEqual_bool.ll
diff --git a/llvm/test/CodeGen/SPIRV/SampledImageRetType.ll b/llvm/test/CodeGen/SPIRV/builtins/SampledImageRetType.ll
similarity index 100%
rename from llvm/test/CodeGen/SPIRV/SampledImageRetType.ll
rename to llvm/test/CodeGen/SPIRV/builtins/SampledImageRetType.ll
diff --git a/llvm/test/CodeGen/SPIRV/transcoding/SpecConstantComposite.ll b/llvm/test/CodeGen/SPIRV/builtins/SpecConstantComposite.ll
similarity index 100%
rename from llvm/test/CodeGen/SPIRV/transcoding/SpecConstantComposite.ll
rename to llvm/test/CodeGen/SPIRV/builtins/SpecConstantComposite.ll
diff --git a/llvm/test/CodeGen/SPIRV/SpecConstants/bool-spirv-specconstant.ll b/llvm/test/CodeGen/SPIRV/builtins/bool-spirv-specconstant.ll
similarity index 100%
rename from llvm/test/CodeGen/SPIRV/SpecConstants/bool-spirv-specconstant.ll
rename to llvm/test/CodeGen/SPIRV/builtins/bool-spirv-specconstant.ll
diff --git a/llvm/test/CodeGen/SPIRV/transcoding/builtin_calls.ll b/llvm/test/CodeGen/SPIRV/builtins/builtin_calls.ll
similarity index 100%
rename from llvm/test/CodeGen/SPIRV/transcoding/builtin_calls.ll
rename to llvm/test/CodeGen/SPIRV/builtins/builtin_calls.ll
diff --git a/llvm/test/CodeGen/SPIRV/builtin_vars-decorate.ll b/llvm/test/CodeGen/SPIRV/builtins/builtin_vars-decorate.ll
similarity index 100%
rename from llvm/test/CodeGen/SPIRV/builtin_vars-decorate.ll
rename to llvm/test/CodeGen/SPIRV/builtins/builtin_vars-decorate.ll
diff --git a/llvm/test/CodeGen/SPIRV/transcoding/builtin_vars.ll b/llvm/test/CodeGen/SPIRV/builtins/builtin_vars.ll
similarity index 100%
rename from llvm/test/CodeGen/SPIRV/transcoding/builtin_vars.ll
rename to llvm/test/CodeGen/SPIRV/builtins/builtin_vars.ll
diff --git a/llvm/test/CodeGen/SPIRV/transcoding/builtin_vars_arithmetics.ll b/llvm/test/CodeGen/SPIRV/builtins/builtin_vars_arithmetics.ll
similarity index 100%
rename from llvm/test/CodeGen/SPIRV/transcoding/builtin_vars_arithmetics.ll
rename to llvm/test/CodeGen/SPIRV/builtins/builtin_vars_arithmetics.ll
diff --git a/llvm/test/CodeGen/SPIRV/transcoding/builtin_vars_opt.ll b/llvm/test/CodeGen/SPIRV/builtins/builtin_vars_opt.ll
similarity index 100%
rename from llvm/test/CodeGen/SPIRV/transcoding/builtin_vars_opt.ll
rename to llvm/test/CodeGen/SPIRV/builtins/builtin_vars_opt.ll
diff --git a/llvm/test/CodeGen/SPIRV/relationals.ll b/llvm/test/CodeGen/SPIRV/builtins/relationals.ll
similarity index 100%
rename from llvm/test/CodeGen/SPIRV/relationals.ll
rename to llvm/test/CodeGen/SPIRV/builtins/relationals.ll
diff --git a/llvm/test/CodeGen/SPIRV/select.ll b/llvm/test/CodeGen/SPIRV/builtins/select.ll
similarity index 100%
rename from llvm/test/CodeGen/SPIRV/select.ll
rename to llvm/test/CodeGen/SPIRV/builtins/select.ll
diff --git a/llvm/test/CodeGen/SPIRV/transcoding/spec_const.ll b/llvm/test/CodeGen/SPIRV/builtins/spec_const.ll
similarity index 100%
rename from llvm/test/CodeGen/SPIRV/transcoding/spec_const.ll
rename to llvm/test/CodeGen/SPIRV/builtins/spec_const.ll
diff --git a/llvm/test/CodeGen/SPIRV/spec_const_decoration.ll b/llvm/test/CodeGen/SPIRV/builtins/spec_const_decoration.ll
similarity index 100%
rename from llvm/test/CodeGen/SPIRV/spec_const_decoration.ll
rename to llvm/test/CodeGen/SPIRV/builtins/spec_const_decoration.ll
diff --git a/llvm/test/CodeGen/SPIRV/spirv-load-store.ll b/llvm/test/CodeGen/SPIRV/builtins/spirv-load-store.ll
similarity index 100%
rename from llvm/test/CodeGen/SPIRV/spirv-load-store.ll
rename to llvm/test/CodeGen/SPIRV/builtins/spirv-load-store.ll
diff --git a/llvm/test/CodeGen/SPIRV/transcoding/spirv-types.ll b/llvm/test/CodeGen/SPIRV/builtins/spirv-types.ll
similarity index 100%
rename from llvm/test/CodeGen/SPIRV/transcoding/spirv-types.ll
rename to llvm/test/CodeGen/SPIRV/builtins/spirv-types.ll

>From 000b488181064871dcd092c4bed9a615497214e2 Mon Sep 17 00:00:00 2001
From: Michal Paszkowski <michal at paszkowski.org>
Date: Thu, 7 Mar 2024 03:30:37 -0800
Subject: [PATCH 2/3] [SPIR-V] Rename SPIR-V builtin functions tests to match
 the scheme

---
 ...{FOrdGreaterThanEqual_bool.ll => FOrdGreaterThanEqual-bool.ll} | 0
 .../{SampledImageRetType.ll => SampledImage-return-type.ll}       | 0
 .../{spec_const_decoration.ll => SpecConstant-decoration.ll}      | 0
 .../CodeGen/SPIRV/builtins/{spec_const.ll => SpecConstant.ll}     | 0
 .../CodeGen/SPIRV/builtins/{builtin_calls.ll => builtin-calls.ll} | 0
 .../{builtin_vars_arithmetics.ll => builtin-vars-arithmetics.ll}  | 0
 .../{builtin_vars-decorate.ll => builtin-vars-decorate.ll}        | 0
 .../SPIRV/builtins/{builtin_vars_opt.ll => builtin-vars-opt.ll}   | 0
 .../CodeGen/SPIRV/builtins/{builtin_vars.ll => builtin-vars.ll}   | 0
 9 files changed, 0 insertions(+), 0 deletions(-)
 rename llvm/test/CodeGen/SPIRV/builtins/{FOrdGreaterThanEqual_bool.ll => FOrdGreaterThanEqual-bool.ll} (100%)
 rename llvm/test/CodeGen/SPIRV/builtins/{SampledImageRetType.ll => SampledImage-return-type.ll} (100%)
 rename llvm/test/CodeGen/SPIRV/builtins/{spec_const_decoration.ll => SpecConstant-decoration.ll} (100%)
 rename llvm/test/CodeGen/SPIRV/builtins/{spec_const.ll => SpecConstant.ll} (100%)
 rename llvm/test/CodeGen/SPIRV/builtins/{builtin_calls.ll => builtin-calls.ll} (100%)
 rename llvm/test/CodeGen/SPIRV/builtins/{builtin_vars_arithmetics.ll => builtin-vars-arithmetics.ll} (100%)
 rename llvm/test/CodeGen/SPIRV/builtins/{builtin_vars-decorate.ll => builtin-vars-decorate.ll} (100%)
 rename llvm/test/CodeGen/SPIRV/builtins/{builtin_vars_opt.ll => builtin-vars-opt.ll} (100%)
 rename llvm/test/CodeGen/SPIRV/builtins/{builtin_vars.ll => builtin-vars.ll} (100%)

diff --git a/llvm/test/CodeGen/SPIRV/builtins/FOrdGreaterThanEqual_bool.ll b/llvm/test/CodeGen/SPIRV/builtins/FOrdGreaterThanEqual-bool.ll
similarity index 100%
rename from llvm/test/CodeGen/SPIRV/builtins/FOrdGreaterThanEqual_bool.ll
rename to llvm/test/CodeGen/SPIRV/builtins/FOrdGreaterThanEqual-bool.ll
diff --git a/llvm/test/CodeGen/SPIRV/builtins/SampledImageRetType.ll b/llvm/test/CodeGen/SPIRV/builtins/SampledImage-return-type.ll
similarity index 100%
rename from llvm/test/CodeGen/SPIRV/builtins/SampledImageRetType.ll
rename to llvm/test/CodeGen/SPIRV/builtins/SampledImage-return-type.ll
diff --git a/llvm/test/CodeGen/SPIRV/builtins/spec_const_decoration.ll b/llvm/test/CodeGen/SPIRV/builtins/SpecConstant-decoration.ll
similarity index 100%
rename from llvm/test/CodeGen/SPIRV/builtins/spec_const_decoration.ll
rename to llvm/test/CodeGen/SPIRV/builtins/SpecConstant-decoration.ll
diff --git a/llvm/test/CodeGen/SPIRV/builtins/spec_const.ll b/llvm/test/CodeGen/SPIRV/builtins/SpecConstant.ll
similarity index 100%
rename from llvm/test/CodeGen/SPIRV/builtins/spec_const.ll
rename to llvm/test/CodeGen/SPIRV/builtins/SpecConstant.ll
diff --git a/llvm/test/CodeGen/SPIRV/builtins/builtin_calls.ll b/llvm/test/CodeGen/SPIRV/builtins/builtin-calls.ll
similarity index 100%
rename from llvm/test/CodeGen/SPIRV/builtins/builtin_calls.ll
rename to llvm/test/CodeGen/SPIRV/builtins/builtin-calls.ll
diff --git a/llvm/test/CodeGen/SPIRV/builtins/builtin_vars_arithmetics.ll b/llvm/test/CodeGen/SPIRV/builtins/builtin-vars-arithmetics.ll
similarity index 100%
rename from llvm/test/CodeGen/SPIRV/builtins/builtin_vars_arithmetics.ll
rename to llvm/test/CodeGen/SPIRV/builtins/builtin-vars-arithmetics.ll
diff --git a/llvm/test/CodeGen/SPIRV/builtins/builtin_vars-decorate.ll b/llvm/test/CodeGen/SPIRV/builtins/builtin-vars-decorate.ll
similarity index 100%
rename from llvm/test/CodeGen/SPIRV/builtins/builtin_vars-decorate.ll
rename to llvm/test/CodeGen/SPIRV/builtins/builtin-vars-decorate.ll
diff --git a/llvm/test/CodeGen/SPIRV/builtins/builtin_vars_opt.ll b/llvm/test/CodeGen/SPIRV/builtins/builtin-vars-opt.ll
similarity index 100%
rename from llvm/test/CodeGen/SPIRV/builtins/builtin_vars_opt.ll
rename to llvm/test/CodeGen/SPIRV/builtins/builtin-vars-opt.ll
diff --git a/llvm/test/CodeGen/SPIRV/builtins/builtin_vars.ll b/llvm/test/CodeGen/SPIRV/builtins/builtin-vars.ll
similarity index 100%
rename from llvm/test/CodeGen/SPIRV/builtins/builtin_vars.ll
rename to llvm/test/CodeGen/SPIRV/builtins/builtin-vars.ll

>From fa5b3524e6a003642a3e4a079e387ec8b75bcdc7 Mon Sep 17 00:00:00 2001
From: Michal Paszkowski <michal at paszkowski.org>
Date: Thu, 7 Mar 2024 05:07:05 -0800
Subject: [PATCH 3/3] [SPIR-V] Add tests for lowering unmangled builtins calls

---
 .../builtins/FOrdGreaterThanEqual-bool.ll     |  1 +
 .../CodeGen/SPIRV/builtins/builtin-calls.ll   |  1 +
 .../CodeGen/SPIRV/builtins/relationals.ll     |  1 +
 llvm/test/CodeGen/SPIRV/builtins/select.ll    |  1 +
 .../SPIRV/builtins/spirv-load-store.ll        | 10 +++++--
 .../unmangled-SampledImage-return-type.ll     | 29 +++++++++++++++++++
 .../SPIRV/builtins/unmangled-builtin-calls.ll | 17 +++++++++++
 .../SPIRV/builtins/unmangled-select.ll        | 15 ++++++++++
 .../builtins/unmangled-spirv-load-store.ll    | 20 +++++++++++++
 9 files changed, 92 insertions(+), 3 deletions(-)
 create mode 100644 llvm/test/CodeGen/SPIRV/builtins/unmangled-SampledImage-return-type.ll
 create mode 100644 llvm/test/CodeGen/SPIRV/builtins/unmangled-builtin-calls.ll
 create mode 100644 llvm/test/CodeGen/SPIRV/builtins/unmangled-select.ll
 create mode 100644 llvm/test/CodeGen/SPIRV/builtins/unmangled-spirv-load-store.ll

diff --git a/llvm/test/CodeGen/SPIRV/builtins/FOrdGreaterThanEqual-bool.ll b/llvm/test/CodeGen/SPIRV/builtins/FOrdGreaterThanEqual-bool.ll
index 735b35d757e7d8..24491f313490b2 100644
--- a/llvm/test/CodeGen/SPIRV/builtins/FOrdGreaterThanEqual-bool.ll
+++ b/llvm/test/CodeGen/SPIRV/builtins/FOrdGreaterThanEqual-bool.ll
@@ -1,4 +1,5 @@
 ; RUN: llc -O0 -mtriple=spirv64-unknown-unknown %s -o - | FileCheck %s --check-prefix=CHECK-SPIRV
+; RUN: %if spirv-tools %{ llc -O0 -mtriple=spirv64-unknown-unknown %s -o - -filetype=obj | spirv-val %}
 
 ; CHECK-SPIRV:     OpFOrdGreaterThanEqual
 ; CHECK-SPIRV-NOT: OpSelect
diff --git a/llvm/test/CodeGen/SPIRV/builtins/builtin-calls.ll b/llvm/test/CodeGen/SPIRV/builtins/builtin-calls.ll
index 9b1ce76631809d..0a02a8bf56ace5 100644
--- a/llvm/test/CodeGen/SPIRV/builtins/builtin-calls.ll
+++ b/llvm/test/CodeGen/SPIRV/builtins/builtin-calls.ll
@@ -1,4 +1,5 @@
 ; RUN: llc -O0 -mtriple=spirv32-unknown-unknown %s -o - | FileCheck %s --check-prefix=CHECK-SPIRV
+; RUN: %if spirv-tools %{ llc -O0 -mtriple=spirv32-unknown-unknown %s -o - -filetype=obj | spirv-val %}
 
 ; CHECK-SPIRV-DAG: OpDecorate %[[#Id:]] BuiltIn GlobalInvocationId
 ; CHECK-SPIRV-DAG: OpDecorate %[[#Id:]] BuiltIn GlobalLinearId
diff --git a/llvm/test/CodeGen/SPIRV/builtins/relationals.ll b/llvm/test/CodeGen/SPIRV/builtins/relationals.ll
index 1644dc7c03d911..13a9869ec17ed3 100644
--- a/llvm/test/CodeGen/SPIRV/builtins/relationals.ll
+++ b/llvm/test/CodeGen/SPIRV/builtins/relationals.ll
@@ -1,4 +1,5 @@
 ; RUN: llc -O0 -mtriple=spirv32-unknown-unknown %s -o - | FileCheck %s --check-prefix=CHECK-SPIRV
+; RUN: %if spirv-tools %{ llc -O0 -mtriple=spirv64-unknown-unknown %s -o - -filetype=obj | spirv-val %}
 
 declare dso_local spir_func <4 x i8> @_Z13__spirv_IsNanIDv4_aDv4_fET_T0_(<4 x float>)
 declare dso_local spir_func <4 x i8> @_Z13__spirv_IsInfIDv4_aDv4_fET_T0_(<4 x float>)
diff --git a/llvm/test/CodeGen/SPIRV/builtins/select.ll b/llvm/test/CodeGen/SPIRV/builtins/select.ll
index b34e91be1dbcda..6a42b63dcd34a6 100644
--- a/llvm/test/CodeGen/SPIRV/builtins/select.ll
+++ b/llvm/test/CodeGen/SPIRV/builtins/select.ll
@@ -1,4 +1,5 @@
 ; RUN: llc -O0 -mtriple=spirv64-unknown-unknown %s -o - | FileCheck %s --check-prefix=CHECK-SPIRV
+; RUN: %if spirv-tools %{ llc -O0 -mtriple=spirv64-unknown-unknown %s -o - -filetype=obj | spirv-val %}
 
 ; CHECK-SPIRV: OpSelect
 
diff --git a/llvm/test/CodeGen/SPIRV/builtins/spirv-load-store.ll b/llvm/test/CodeGen/SPIRV/builtins/spirv-load-store.ll
index a82bf0ab2e01f6..8b80e0308dd0e1 100644
--- a/llvm/test/CodeGen/SPIRV/builtins/spirv-load-store.ll
+++ b/llvm/test/CodeGen/SPIRV/builtins/spirv-load-store.ll
@@ -1,9 +1,13 @@
 ; RUN: llc -O0 -mtriple=spirv64-unknown-unknown %s -o - | FileCheck %s
 ;; Translate SPIR-V friendly OpLoad and OpStore calls
 
-; CHECK: %[[#CONST:]] = OpConstant %[[#]] 42
-; CHECK: OpStore %[[#PTR:]] %[[#CONST]] Volatile|Aligned 4
-; CHECK: %[[#]] = OpLoad %[[#]] %[[#PTR]]
+; CHECK-DAG: %[[#INT32:]] = OpTypeInt 32 0
+; CHECK-DAG: %[[#CONST:]] = OpConstant %[[#INT32]] 42
+; CHECK-DAG: %[[#PTRINT32:]] = OpTypePointer CrossWorkgroup %[[#INT32]]
+; CHECK: %[[#BITCASTorPARAMETER:]] = {{OpBitcast|OpFunctionParameter}}{{.*}}%[[#PTRINT32]]{{.*}}
+
+; CHECK: OpStore %[[#BITCASTorPARAMETER]] %[[#CONST]] Volatile|Aligned 4
+; CHECK: %[[#]] = OpLoad %[[#]] %[[#BITCASTorPARAMETER]]
 
 define weak_odr dso_local spir_kernel void @foo(i32 addrspace(1)* %var) {
 entry:
diff --git a/llvm/test/CodeGen/SPIRV/builtins/unmangled-SampledImage-return-type.ll b/llvm/test/CodeGen/SPIRV/builtins/unmangled-SampledImage-return-type.ll
new file mode 100644
index 00000000000000..3459598735e65a
--- /dev/null
+++ b/llvm/test/CodeGen/SPIRV/builtins/unmangled-SampledImage-return-type.ll
@@ -0,0 +1,29 @@
+; RUN: llc -O0 -mtriple=spirv64-unknown-unknown %s -o - | FileCheck %s
+
+; XFAIL: *
+
+; CHECK: %[[#image1d_t:]] = OpTypeImage
+; CHECK: %[[#sampler_t:]] = OpTypeSampler
+; CHECK: %[[#sampled_image_t:]] = OpTypeSampledImage
+
+declare dso_local spir_func ptr addrspace(4) @__spirv_SampledImage(target("spirv.Image", void, 0, 0, 0, 0, 0, 0, 0) %0, target("spirv.Sampler") %1) local_unnamed_addr
+
+declare dso_local spir_func <4 x float> @__spirv_ImageSampleExplicitLod(ptr addrspace(4) %0, i32 %1, i32 %2, float %3) local_unnamed_addr
+
+ at __spirv_BuiltInGlobalInvocationId = external dso_local local_unnamed_addr addrspace(2) constant <3 x i64>, align 32
+
+define weak_odr dso_local spir_kernel void @_ZTS17image_kernel_readILi1EE(target("spirv.Image", void, 0, 0, 0, 0, 0, 0, 0), target("spirv.Sampler")) {
+; CHECK: OpFunction
+; CHECK: %[[#image:]] = OpFunctionParameter %[[#image1d_t]]
+; CHECK: %[[#sampler:]] = OpFunctionParameter %[[#sampler_t]]
+  %3 = load <3 x i64>, ptr addrspace(2) @__spirv_BuiltInGlobalInvocationId, align 32
+  %4 = extractelement <3 x i64> %3, i64 0
+  %5 = trunc i64 %4 to i32
+  %6 = call spir_func ptr addrspace(4) @__spirv_SampledImage(target("spirv.Image", void, 0, 0, 0, 0, 0, 0, 0) %0, target("spirv.Sampler") %1)
+  %7 = call spir_func <4 x float> @__spirv_ImageSampleExplicitLod(ptr addrspace(4) %6, i32 %5, i32 2, float 0.000000e+00)
+
+; CHECK: %[[#sampled_image:]] = OpSampledImage %[[#sampled_image_t]] %[[#image]] %[[#sampler]]
+; CHECK: %[[#]] = OpImageSampleExplicitLod %[[#]] %[[#sampled_image]] %[[#]] {{.*}} %[[#]]
+
+  ret void
+}
diff --git a/llvm/test/CodeGen/SPIRV/builtins/unmangled-builtin-calls.ll b/llvm/test/CodeGen/SPIRV/builtins/unmangled-builtin-calls.ll
new file mode 100644
index 00000000000000..4519d52dc8f30e
--- /dev/null
+++ b/llvm/test/CodeGen/SPIRV/builtins/unmangled-builtin-calls.ll
@@ -0,0 +1,17 @@
+; RUN: llc -O0 -mtriple=spirv32-unknown-unknown %s -o - | FileCheck %s --check-prefix=CHECK-SPIRV
+; RUN: %if spirv-tools %{ llc -O0 -mtriple=spirv32-unknown-unknown %s -o - -filetype=obj | spirv-val %}
+
+; CHECK-SPIRV-DAG: OpDecorate %[[#Id:]] BuiltIn GlobalInvocationId
+; CHECK-SPIRV-DAG: OpDecorate %[[#Id:]] BuiltIn GlobalLinearId
+; CHECK-SPIRV:     %[[#Id:]] = OpVariable %[[#]]
+; CHECK-SPIRV:     %[[#Id:]] = OpVariable %[[#]]
+
+define spir_kernel void @f() {
+entry:
+  %0 = call spir_func i32 @__spirv_BuiltInGlobalLinearId()
+  %1 = call spir_func i64 @__spirv_BuiltInGlobalInvocationId(i32 1)
+  ret void
+}
+
+declare spir_func i32 @__spirv_BuiltInGlobalLinearId()
+declare spir_func i64 @__spirv_BuiltInGlobalInvocationId(i32)
diff --git a/llvm/test/CodeGen/SPIRV/builtins/unmangled-select.ll b/llvm/test/CodeGen/SPIRV/builtins/unmangled-select.ll
new file mode 100644
index 00000000000000..e88fa49a8f55f9
--- /dev/null
+++ b/llvm/test/CodeGen/SPIRV/builtins/unmangled-select.ll
@@ -0,0 +1,15 @@
+; RUN: llc -O0 -mtriple=spirv64-unknown-unknown %s -o - | FileCheck %s --check-prefix=CHECK-SPIRV
+; RUN: %if spirv-tools %{ llc -O0 -mtriple=spirv64-unknown-unknown %s -o - -filetype=obj | spirv-val %}
+
+; CHECK-SPIRV: OpSelect
+
+;; LLVM IR was generated with -cl-std=c++ option
+
+define spir_kernel void @test(i32 %op1, i32 %op2) {
+entry:
+  %0 = trunc i8 undef to i1
+  %call = call spir_func i32 @__spirv_Select(i1 zeroext %0, i32 %op1, i32 %op2)
+  ret void
+}
+
+declare spir_func i32 @__spirv_Select(i1 zeroext, i32, i32)
diff --git a/llvm/test/CodeGen/SPIRV/builtins/unmangled-spirv-load-store.ll b/llvm/test/CodeGen/SPIRV/builtins/unmangled-spirv-load-store.ll
new file mode 100644
index 00000000000000..19fc7967a3b63b
--- /dev/null
+++ b/llvm/test/CodeGen/SPIRV/builtins/unmangled-spirv-load-store.ll
@@ -0,0 +1,20 @@
+; RUN: llc -O0 -mtriple=spirv64-unknown-unknown %s -o - | FileCheck %s
+
+; CHECK-DAG: %[[#INT8:]] = OpTypeInt 8 0
+; CHECK-DAG: %[[#INT32:]] = OpTypeInt 32 0
+; CHECK-DAG: %[[#CONST:]] = OpConstant %[[#INT32]] 42
+; CHECK-DAG: %[[#PTRINT8:]] = OpTypePointer CrossWorkgroup %[[#INT8]]
+; CHECK: %[[#BITCASTorPARAMETER:]] = {{OpBitcast|OpFunctionParameter}}{{.*}}%[[#PTRINT8]]{{.*}}
+
+; CHECK: OpStore %[[#BITCASTorPARAMETER]] %[[#CONST]] Volatile|Aligned 4
+; CHECK: %[[#]] = OpLoad %[[#]] %[[#BITCASTorPARAMETER]]
+
+define weak_odr dso_local spir_kernel void @foo(ptr addrspace(1) %var) {
+entry:
+  tail call spir_func void @__spirv_Store(ptr addrspace(1) %var, i32 42, i32 3, i32 4)
+  %value = tail call spir_func double @__spirv_Load(ptr addrspace(1) %var)
+  ret void
+}
+
+declare dso_local spir_func double @__spirv_Load(ptr addrspace(1)) local_unnamed_addr
+declare dso_local spir_func void @__spirv_Store(ptr addrspace(1), i32, i32, i32) local_unnamed_addr



More information about the llvm-commits mailing list