33 lines · plain
1; The goal of this test case is to check that cases covered by pointers/PtrCast-in-OpSpecConstantOp.ll and2; pointers/PtrCast-null-in-OpSpecConstantOp.ll (that is OpSpecConstantOp with ptr-cast operation) correctly3; 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 %s6; TODO: %if spirv-tools %{ llc -O0 -mtriple=spirv64-unknown-unknown %s -o - -filetype=obj | spirv-val %}7 8; CHECK-COUNT-3: %[[#]] = OpSpecConstantOp %[[#]] PtrCastToGeneric %[[#]]9; CHECK-COUNT-3: OpPtrCastToGeneric10 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 14@G_r1_foo = global ptr addrspace(4) null15@G_r2_foo = global ptr addrspace(4) null16@G_r1_bar = global ptr addrspace(4) null17 18define void @foo(ptr addrspace(4) %p) {19entry:20 %r1 = addrspacecast ptr @foo to ptr addrspace(4)21 store ptr addrspace(4) %r1, ptr @G_r1_foo22 %r2 = addrspacecast ptr null to ptr addrspace(4)23 store ptr addrspace(4) %r2, ptr @G_r2_foo24 ret void25}26 27define void @bar(ptr addrspace(4) %p) {28entry:29 %r1 = addrspacecast ptr @bar to ptr addrspace(4)30 store ptr addrspace(4) %r1, ptr @G_r1_bar31 ret void32}33