xref: /llvm-project/llvm/test/CodeGen/SPIRV/extensions/SPV_INTEL_function_pointers/fun-ptr-addrcast.ll (revision 83c1d003118a2cb8136fe49e2ec43958c93d9d6b)
1; The goal of this test case is to check that cases covered by pointers/PtrCast-in-OpSpecConstantOp.ll and
2; pointers/PtrCast-null-in-OpSpecConstantOp.ll (that is OpSpecConstantOp with ptr-cast operation) correctly
3; work also for function pointers.
4
5; RUN: llc -verify-machineinstrs -O0 -mtriple=spirv32-unknown-unknown %s -o - --spirv-ext=+SPV_INTEL_function_pointers | FileCheck %s
6; TODO: %if spirv-tools %{ llc -O0 -mtriple=spirv64-unknown-unknown %s -o - -filetype=obj | spirv-val %}
7
8; CHECK-COUNT-3: %[[#]] = OpSpecConstantOp %[[#]] 121 %[[#]]
9; CHECK-COUNT-3: OpPtrCastToGeneric
10
11@G1 = addrspace(1) constant { [3 x ptr addrspace(4)] } { [3 x ptr addrspace(4)] [ptr addrspace(4) null, ptr addrspace(4) addrspacecast (ptr @foo to ptr addrspace(4)), ptr addrspace(4) addrspacecast (ptr @bar to ptr addrspace(4))] }
12@G2 = addrspace(1) constant { [3 x ptr addrspace(4)] } { [3 x ptr addrspace(4)] [ptr addrspace(4) addrspacecast (ptr null to ptr addrspace(4)), ptr addrspace(4) addrspacecast (ptr @bar to ptr addrspace(4)), ptr addrspace(4) addrspacecast (ptr @foo to ptr addrspace(4))] }
13
14define void @foo(ptr addrspace(4) %p) {
15entry:
16  %r1 = addrspacecast ptr @foo to ptr addrspace(4)
17  %r2 = addrspacecast ptr null to ptr addrspace(4)
18  ret void
19}
20
21define void @bar(ptr addrspace(4) %p) {
22entry:
23  %r1 = addrspacecast ptr @bar to ptr addrspace(4)
24  ret void
25}
26