84 lines · plain
1; RUN: llc -verify-machineinstrs -O0 -mtriple=spirv64-unknown-unknown %s -o - | FileCheck %s --check-prefixes=CL2; RUN: %if spirv-tools %{ llc -O0 -mtriple=spirv64-unknown-unknown %s -o - -filetype=obj | spirv-val %}3 4; RUN: llc -verify-machineinstrs -O0 -mtriple=spirv32-unknown-unknown %s -o - | FileCheck %s --check-prefixes=CL5; RUN: %if spirv-tools %{ llc -O0 -mtriple=spirv32-unknown-unknown %s -o - -filetype=obj | spirv-val %}6 7; RUN: llc -verify-machineinstrs -O0 -mtriple=spirv-unknown-vulkan1.3-compute %s -o - | FileCheck %s --check-prefixes=VK8; FIXME(135165) Alignment capability emitted for Vulkan.9; FIXME: %if spirv-tools %{ llc -O0 -mtriple=spirv-unknown-vulkan1.3-compute %s -o - -filetype=obj | spirv-val %}10 11; CL-DAG: %[[#Char:]] = OpTypeInt 8 012; CL-DAG: %[[#PtrChar:]] = OpTypePointer Function %[[#Char]]13 14%tprange = type { %tparray }15%tparray = type { [2 x i64] }16 17; CL: OpFunction18; CL: %[[#FooVar:]] = OpVariable19; CL-NEXT: %[[#Casted1:]] = OpBitcast %[[#PtrChar]] %[[#FooVar]]20; CL-NEXT: OpLifetimeStart %[[#Casted1]] 1621; CL: OpInBoundsPtrAccessChain22; CL: %[[#Casted2:]] = OpBitcast %[[#PtrChar]] %[[#FooVar]]23; CL-NEXT: OpLifetimeStop %[[#Casted2]] 1624 25; VK: OpFunction26; VK: %[[#FooVar:]] = OpVariable27; VK-NEXT: OpInBoundsAccessChain28; VK-NEXT: OpStore29; VK-NEXT: OpReturn30define spir_func void @foo(ptr noundef byval(%tprange) align 8 %_arg_UserRange) {31 %RoundedRangeKernel = alloca %tprange, align 832 call void @llvm.lifetime.start.p0(ptr nonnull %RoundedRangeKernel)33 %KernelFunc = getelementptr inbounds i8, ptr %RoundedRangeKernel, i64 834 store i64 zeroinitializer, ptr %KernelFunc, align 835 call void @llvm.lifetime.end.p0(ptr nonnull %RoundedRangeKernel)36 ret void37}38 39; CL: OpFunction40; CL: %[[#BarVar:]] = OpVariable41; CL-NEXT: %[[#Casted1:]] = OpBitcast %[[#PtrChar]] %[[#BarVar]]42; CL-NEXT: OpLifetimeStart %[[#Casted1]] 1643; CL: OpInBoundsPtrAccessChain44; CL: %[[#Casted2:]] = OpBitcast %[[#PtrChar]] %[[#BarVar]]45; CL-NEXT: OpLifetimeStop %[[#Casted2]] 1646 47; VK: OpFunction48; VK: %[[#BarVar:]] = OpVariable49; VK-NEXT: OpInBoundsAccessChain50; VK-NEXT: OpStore51; VK-NEXT: OpReturn52define spir_func void @bar(ptr noundef byval(%tprange) align 8 %_arg_UserRange) {53 %RoundedRangeKernel = alloca %tprange, align 854 call void @llvm.lifetime.start.p0(ptr nonnull %RoundedRangeKernel)55 %KernelFunc = getelementptr inbounds i8, ptr %RoundedRangeKernel, i64 856 store i64 zeroinitializer, ptr %KernelFunc, align 857 call void @llvm.lifetime.end.p0(ptr nonnull %RoundedRangeKernel)58 ret void59}60 61; CL: OpFunction62; CL: %[[#TestVar:]] = OpVariable63; CL: OpLifetimeStart %[[#TestVar]] 164; CL: OpInBoundsPtrAccessChain65; CL: OpLifetimeStop %[[#TestVar]] 166 67; VK: OpFunction68; VK: %[[#Test:]] = OpVariable69; VK-NEXT: OpInBoundsAccessChain70; VK-NEXT: OpStore71; VK-NEXT: OpReturn72define spir_func void @test(ptr noundef align 8 %_arg) {73 %var = alloca i8, align 874 call void @llvm.lifetime.start.p0(ptr nonnull %var)75 %KernelFunc = getelementptr inbounds i8, ptr %var, i64 176 store i8 0, ptr %KernelFunc, align 877 call void @llvm.lifetime.end.p0(ptr nonnull %var)78 ret void79}80 81declare void @llvm.lifetime.start.p0(ptr nocapture)82declare void @llvm.memcpy.p0.p0.i64(ptr noalias nocapture writeonly, ptr noalias nocapture readonly, i64, i1 immarg)83declare void @llvm.lifetime.end.p0(ptr nocapture)84