xref: /llvm-project/llvm/test/CodeGen/SPIRV/pointers/type-deduce-by-call-complex.ll (revision 67d3ef74b31e1517d4f679e754cc2b3041c95901)
1; RUN: llc -verify-machineinstrs -O0 -mtriple=spirv32-unknown-unknown %s -o - | FileCheck %s --check-prefix=CHECK-SPIRV
2; RUN: %if spirv-tools %{ llc -O0 -mtriple=spirv32-unknown-unknown %s -o - -filetype=obj | spirv-val %}
3
4; CHECK-SPIRV-DAG: %[[Long:.*]] = OpTypeInt 32 0
5; CHECK-SPIRV-DAG: %[[Void:.*]] = OpTypeVoid
6; CHECK-SPIRV-DAG: %[[Struct:.*]] = OpTypeStruct %[[Long]]
7; CHECK-SPIRV-DAG: %[[StructPtr:.*]] = OpTypePointer Generic %[[Struct]]
8; CHECK-SPIRV-DAG: %[[Function:.*]] = OpTypeFunction %[[Void]] %[[StructPtr]]
9; CHECK-SPIRV-DAG: %[[Const:.*]] = OpConstantNull %[[Struct]]
10; CHECK-SPIRV-DAG: %[[CrossStructPtr:.*]] = OpTypePointer CrossWorkgroup %[[Struct]]
11; CHECK-SPIRV-DAG: %[[Var:.*]] = OpVariable %[[CrossStructPtr]] CrossWorkgroup %[[Const]]
12; CHECK-SPIRV: %[[Foo:.*]] = OpFunction %[[Void]] None %[[Function]]
13; CHECK-SPIRV-NEXT: OpFunctionParameter %[[StructPtr]]
14; CHECK-SPIRV: %[[Casted:.*]] = OpPtrCastToGeneric %[[StructPtr]] %[[Var]]
15; CHECK-SPIRV-NEXT: OpFunctionCall %[[Void]] %[[Foo]] %[[Casted]]
16
17%struct.global_ctor_dtor = type { i32 }
18@g1 = addrspace(1) global %struct.global_ctor_dtor zeroinitializer
19
20define linkonce_odr spir_func void @foo(ptr addrspace(4) %this) {
21entry:
22  ret void
23}
24
25define internal spir_func void @bar() {
26entry:
27  call spir_func void @foo(ptr addrspace(4) addrspacecast (ptr addrspace(1) @g1 to ptr addrspace(4)))
28  ret void
29}
30