xref: /llvm-project/llvm/test/CodeGen/SPIRV/pointers/argument-ptr-to-struct.ll (revision 67d3ef74b31e1517d4f679e754cc2b3041c95901)
1*67d3ef74SVyacheslav Levytskyy; RUN: llc -verify-machineinstrs -O0 -mtriple=spirv64-unknown-unknown %s -o - | FileCheck %s
2c071c1d3SMichal Paszkowski; RUN: %if spirv-tools %{ llc -O0 -mtriple=spirv64-unknown-unknown %s -o - -filetype=obj | spirv-val %}
3c071c1d3SMichal Paszkowski
4c071c1d3SMichal Paszkowski; CHECK-DAG: %[[#VOID:]] = OpTypeVoid
5c071c1d3SMichal Paszkowski; CHECK-DAG: %[[#FLOAT:]] = OpTypeFloat 32
6c071c1d3SMichal Paszkowski; CHECK-DAG: %[[#UCHAR:]] = OpTypeInt 8 0
7c071c1d3SMichal Paszkowski; CHECK-DAG: %[[#UINT:]] = OpTypeInt 32 0
8c071c1d3SMichal Paszkowski; CHECK-DAG: %[[#STRUCT_S:]] = OpTypeStruct %[[#FLOAT]] %[[#UCHAR]] %[[#UINT]]
9c071c1d3SMichal Paszkowski; CHECK-DAG: %[[#PTR_STRUCT_S:]] = OpTypePointer Function %[[#STRUCT_S]]
10c071c1d3SMichal Paszkowski; CHECK-DAG: %[[#FUNC_TYPE_K:]] = OpTypeFunction %[[#VOID]] %[[#PTR_STRUCT_S]]
11c071c1d3SMichal Paszkowski; CHECK-DAG: %[[#FUNC_TYPE_H:]] = OpTypeFunction %[[#UINT]] %[[#PTR_STRUCT_S]]
12c071c1d3SMichal Paszkowski
13c071c1d3SMichal Paszkowski; CHECK: %[[#]] = OpFunction %[[#VOID]] None %[[#FUNC_TYPE_K]]
14c071c1d3SMichal Paszkowski; CHECK: %[[#]] = OpFunctionParameter %[[#PTR_STRUCT_S]]
15c071c1d3SMichal Paszkowski
16c071c1d3SMichal Paszkowski; CHECK: %[[#]] = OpFunction %[[#UINT]] None %[[#FUNC_TYPE_H]]
17c071c1d3SMichal Paszkowski; CHECK: %[[#]] = OpFunctionParameter %[[#PTR_STRUCT_S]]
18c071c1d3SMichal Paszkowski
19c071c1d3SMichal Paszkowski%struct.s = type { float, i8, i32 }
20c071c1d3SMichal Paszkowski
21c071c1d3SMichal Paszkowskidefine spir_kernel void @k(ptr noundef byval(%struct.s) align 4 %x) {
22c071c1d3SMichal Paszkowskientry:
23c071c1d3SMichal Paszkowski  %c = getelementptr inbounds %struct.s, ptr %x, i32 0, i32 2
24c071c1d3SMichal Paszkowski  %l = load i32, ptr %c, align 4
25c071c1d3SMichal Paszkowski  %add = add nsw i32 %l, 1
26c071c1d3SMichal Paszkowski  %c1 = getelementptr inbounds %struct.s, ptr %x, i32 0, i32 2
27c071c1d3SMichal Paszkowski  store i32 %add, ptr %c1, align 4
28c071c1d3SMichal Paszkowski  ret void
29c071c1d3SMichal Paszkowski}
30c071c1d3SMichal Paszkowski
31c071c1d3SMichal Paszkowskidefine spir_func i32 @h(ptr noundef byval(%struct.s) align 4 %x) {
32c071c1d3SMichal Paszkowskientry:
33c071c1d3SMichal Paszkowski  %c = getelementptr inbounds %struct.s, ptr %x, i32 0, i32 2
34c071c1d3SMichal Paszkowski  %l = load i32, ptr %c, align 4
35c071c1d3SMichal Paszkowski  %add = add nsw i32 %l, 1
36c071c1d3SMichal Paszkowski  ret i32 %add
37c071c1d3SMichal Paszkowski}
38