diff options
| author | Konrad Krawiec <konrad@krawiec.cc> | 2024-08-27 11:26:26 +0300 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-08-27 01:26:26 -0700 |
| commit | 73834f45d8049ca15261284c392211bf5f8e5313 (patch) | |
| tree | 1b9beecfed7ea2729a689bf7ca312605722b8552 | |
| parent | cb9267f055156daabdbab87f4c1ca9064b0e7d7d (diff) | |
| download | llvm-73834f45d8049ca15261284c392211bf5f8e5313.zip llvm-73834f45d8049ca15261284c392211bf5f8e5313.tar.gz llvm-73834f45d8049ca15261284c392211bf5f8e5313.tar.bz2 | |
[SPIR-V] Fix vload_half builtin argument count (#105585)
OpenCL's vload_half builtin expects two arguments, but the current
TableGen definition expects three.
This change fixes the mismatch and adds a test to check this.
| -rw-r--r-- | llvm/lib/Target/SPIRV/SPIRVBuiltins.td | 2 | ||||
| -rw-r--r-- | llvm/test/CodeGen/SPIRV/opencl/vload_halfn.ll | 15 |
2 files changed, 16 insertions, 1 deletions
diff --git a/llvm/lib/Target/SPIRV/SPIRVBuiltins.td b/llvm/lib/Target/SPIRV/SPIRVBuiltins.td index 5c057a7..dd97263 100644 --- a/llvm/lib/Target/SPIRV/SPIRVBuiltins.td +++ b/llvm/lib/Target/SPIRV/SPIRVBuiltins.td @@ -1500,7 +1500,7 @@ foreach i = ["", "2", "3", "4", "8", "16"] in { defm : DemangledVectorLoadStoreBuiltin<"vload_half", 2, 2, 173>; defm : DemangledVectorLoadStoreBuiltin<"vstore_half", 3, 3, 175>; } else { - defm : DemangledVectorLoadStoreBuiltin<!strconcat("vload_half", i), 3, 3, 174>; + defm : DemangledVectorLoadStoreBuiltin<!strconcat("vload_half", i), 2, 2, 174>; defm : DemangledVectorLoadStoreBuiltin<!strconcat("vstore_half", i), 3, 3, 177>; } defm : DemangledVectorLoadStoreBuiltin<!strconcat("vload", i), 2, 2, 171>; diff --git a/llvm/test/CodeGen/SPIRV/opencl/vload_halfn.ll b/llvm/test/CodeGen/SPIRV/opencl/vload_halfn.ll new file mode 100644 index 0000000..abfae74 --- /dev/null +++ b/llvm/test/CodeGen/SPIRV/opencl/vload_halfn.ll @@ -0,0 +1,15 @@ +; RUN: llc -O0 -mtriple=spirv64-unknown-unknown %s -o - | FileCheck %s +; RUN: %if spirv-tools %{ llc -O0 -mtriple=spirv64-unknown-unknown %s -o - -filetype=obj | spirv-val %} + +; CHECK: %[[#IMPORT:]] = OpExtInstImport "OpenCL.std" + +; CHECK: %[[#FLOAT:]] = OpTypeFloat 32 +; CHECK: %[[#V2FLOAT:]] = OpTypeVector %[[#FLOAT]] 2 + +define void @test(i64 %a, ptr addrspace(1) %b) { +; CHECK: %[[#]] = OpExtInst %[[#V2FLOAT:]] %[[#IMPORT]] vload_halfn %[[#]] %[[#]] 2 + %c = call spir_func <2 x float> @_Z11vload_half2mPU3AS1KDh(i64 %a, ptr addrspace(1) %b) + ret void +} + +declare <2 x float> @_Z11vload_half2mPU3AS1KDh(i64, ptr addrspace(1)) |
