Files
llvm-project/llvm/test/CodeGen/SPIRV/pointers/getelementptr-vector-index.ll
Arseniy Obolenskiy e8f97d4e3b [SPIR-V] Fix llvm.spv.gep return type for vector-indexed GEPs (#185931)
The `int_spv_gep` intrinsic was defined with `llvm_anyptr_ty` which
forced it to return a scalar pointer. Change the return type to
`llvm_any_ty` to allow the intrinsic to match the actual result type of
the original GEP, whether scalar or vector
2026-03-16 15:31:14 +01:00

24 lines
1.2 KiB
LLVM

; RUN: llc -verify-machineinstrs -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-DAG: %[[#INT32:]] = OpTypeInt 32 0
; CHECK-DAG: %[[#PTR_INT32:]] = OpTypePointer CrossWorkgroup %[[#INT32]]
; CHECK-DAG: %[[#INT8:]] = OpTypeInt 8 0
; CHECK-DAG: %[[#PTR_INT8:]] = OpTypePointer CrossWorkgroup %[[#INT8]]
; CHECK-DAG: %[[#INT64:]] = OpTypeInt 64 0
; CHECK-DAG: %[[#CONST_0:]] = OpConstantNull %[[#INT64]]
; CHECK-LABEL: Begin function test_vector_gep_with_load
; CHECK: %[[#BC1:]] = OpBitcast %[[#PTR_INT8]] %[[#]]
; CHECK: %[[#GEP:]] = OpPtrAccessChain %[[#PTR_INT8]] %[[#BC1]] %[[#CONST_0]]
; CHECK: %[[#BC2:]] = OpBitcast %[[#PTR_INT32]] %[[#GEP]]
; CHECK: %[[#VAL:]] = OpLoad %[[#INT32]] %[[#BC2]]
; CHECK: OpStore %[[#]] %[[#VAL]]
; CHECK: OpFunctionEnd
define spir_kernel void @test_vector_gep_with_load(ptr addrspace(1) %p, ptr addrspace(1) %out) {
%gep = getelementptr i32, ptr addrspace(1) %p, <1 x i64> zeroinitializer
%elem = extractelement <1 x ptr addrspace(1)> %gep, i32 0
%val = load i32, ptr addrspace(1) %elem
store i32 %val, ptr addrspace(1) %out
ret void
}