This commit adds 2 new instructions in the selector: - OpAccessChain - OpInBoundsAccessChain. The choice between the two relies on the `inbounds` marker. Those instruction are not used for OpenCL, to maintain the same behavior as previously. They are only added when building for logical SPIR-V, as it doesn't support the pointer equivalent. Because logical SPIR-V doesn't support pointer cast either, the assign_ptr_type intrinsic need to be generated so OpAccessChain gets lowered with the correct pointer type, instead of i8*. Fixes #66107 --------- Signed-off-by: Nathan Gauër <brioche@google.com>
21 lines
697 B
LLVM
21 lines
697 B
LLVM
; RUN: llc -O0 -mtriple=spirv-unknown-unknown %s -o - | FileCheck %s
|
|
|
|
; CHECK: [[uint:%[0-9]+]] = OpTypeInt 32 0
|
|
; CHECK: [[uint2:%[0-9]+]] = OpTypeVector [[uint]] 2
|
|
; CHECK: [[uint_1:%[0-9]+]] = OpConstant [[uint]] 1
|
|
; CHECK: [[ptr_uint:%[0-9]+]] = OpTypePointer Function [[uint]]
|
|
; CHECK: [[ptr_uint2:%[0-9]+]] = OpTypePointer Function [[uint2]]
|
|
|
|
define void @main() #1 {
|
|
entry:
|
|
%0 = alloca <2 x i32>, align 4
|
|
; CHECK: [[var:%[0-9]+]] = OpVariable [[ptr_uint2]] Function
|
|
|
|
%1 = getelementptr <2 x i32>, ptr %0, i32 0, i32 1
|
|
; CHECK: {{%[0-9]+}} = OpAccessChain [[ptr_uint]] [[var]] [[uint_1]]
|
|
|
|
ret void
|
|
}
|
|
|
|
attributes #1 = { "hlsl.numthreads"="4,8,16" "hlsl.shader"="compute" }
|