brintos

brintos / llvm-project-archived public Read only

0
0
Text · 9.4 KiB · 68f3351 Raw
173 lines · plain
1; RUN: llc -O0 -mtriple=spirv64-unknown-unknown %s -o - | FileCheck %s --check-prefixes=CHECK-SPIRV2; RUN: %if spirv-tools %{ llc -O0 -mtriple=spirv64-unknown-unknown %s -o - -filetype=obj | spirv-val %}3 4; CHECK-SPIRV-DAG: %[[#Char:]] = OpTypeInt 8 05; CHECK-SPIRV-DAG: %[[#LocalCharPtr:]] = OpTypePointer Workgroup %[[#Char]]6; CHECK-SPIRV-DAG: %[[#GenericCharPtr:]] = OpTypePointer Generic %[[#Char]]7 8; CHECK-SPIRV-DAG: %[[#Int:]] = OpTypeInt 32 09; CHECK-SPIRV-DAG: %[[#GlobalIntPtr:]] = OpTypePointer CrossWorkgroup %[[#Int]]10; CHECK-SPIRV-DAG: %[[#PrivateIntPtr:]] = OpTypePointer Function %[[#Int]]11; CHECK-SPIRV-DAG: %[[#GenericIntPtr:]] = OpTypePointer Generic %[[#Int]]12 13%id = type { %arr }14%arr = type { [1 x i64] }15 16@__spirv_BuiltInGlobalInvocationId = external local_unnamed_addr addrspace(1) constant <3 x i64>17 18; Mangling19 20; CHECK-SPIRV:      OpFunction21; CHECK-SPIRV:      OpPtrCastToGeneric %[[#GenericIntPtr]]22; CHECK-SPIRV-NEXT: OpPtrCastToGeneric %[[#GenericCharPtr]]23; CHECK-SPIRV-NEXT: OpPtrCastToGeneric %[[#GenericIntPtr]]24; CHECK-SPIRV-NEXT: OpGenericCastToPtr %[[#GlobalIntPtr]]25; CHECK-SPIRV-NEXT: OpGenericCastToPtr %[[#LocalCharPtr]]26; CHECK-SPIRV-NEXT: OpGenericCastToPtr %[[#PrivateIntPtr]]27; CHECK-SPIRV-NEXT: OpGenericCastToPtrExplicit %[[#GlobalIntPtr]] %{{.*}} CrossWorkgroup28; CHECK-SPIRV-NEXT: OpGenericCastToPtrExplicit %[[#LocalCharPtr]] %{{.*}} Workgroup29; CHECK-SPIRV-NEXT: OpGenericCastToPtrExplicit %[[#PrivateIntPtr]] %{{.*}} Function30; CHECK-SPIRV:      OpFunctionEnd31 32define spir_kernel void @test1(ptr addrspace(1) %_arg_GlobalA, ptr byval(%id) %_arg_GlobalId, ptr addrspace(3) %_arg_LocalA) {33entry:34  %var = alloca i3235  %p0 = load i64, ptr %_arg_GlobalId36  %add = getelementptr inbounds i32, ptr addrspace(1) %_arg_GlobalA, i64 %p037  %p2 = load i64, ptr addrspace(1) @__spirv_BuiltInGlobalInvocationId38  %idx = getelementptr inbounds i32, ptr addrspace(1) %add, i64 %p239  %var1 = addrspacecast ptr addrspace(1) %idx to ptr addrspace(4)40  %var2 = addrspacecast ptr addrspace(3) %_arg_LocalA to ptr addrspace(4)41  %var3 = addrspacecast ptr %var to ptr addrspace(4)42  %G = call spir_func ptr addrspace(1) @_Z33__spirv_GenericCastToPtr_ToGlobalPvi(ptr addrspace(4) %var1, i32 5)43  %L = call spir_func ptr addrspace(3) @_Z32__spirv_GenericCastToPtr_ToLocalPvi(ptr addrspace(4) %var2, i32 4)44  %P = call spir_func ptr @_Z34__spirv_GenericCastToPtr_ToPrivatePvi(ptr addrspace(4) %var3, i32 7)45  %GE = call spir_func ptr addrspace(1) @_Z41__spirv_GenericCastToPtrExplicit_ToGlobalPvi(ptr addrspace(4) %var1, i32 5)46  %LE = call spir_func ptr addrspace(3) @_Z40__spirv_GenericCastToPtrExplicit_ToLocalPvi(ptr addrspace(4) %var2, i32 4)47  %PE = call spir_func ptr @_Z42__spirv_GenericCastToPtrExplicit_ToPrivatePvi(ptr addrspace(4) %var3, i32 7)48  store i32 0, ptr addrspace(1) %G, align 449  store i8 0, ptr addrspace(3) %L, align 150  store i32 0, ptr %P, align 451  store i32 0, ptr addrspace(1) %GE, align 452  store i8 0, ptr addrspace(3) %LE, align 153  store i32 0, ptr %PE, align 454  ret void55}56 57; CHECK-SPIRV:      OpFunction58; CHECK-SPIRV:      OpPtrCastToGeneric %[[#GenericIntPtr]]59; CHECK-SPIRV-NEXT: OpPtrCastToGeneric %[[#GenericCharPtr]]60; CHECK-SPIRV-NEXT: OpPtrCastToGeneric %[[#GenericIntPtr]]61; CHECK-SPIRV-NEXT: OpGenericCastToPtrExplicit %[[#GlobalIntPtr]] %{{.*}} CrossWorkgroup62; CHECK-SPIRV-NEXT: OpGenericCastToPtrExplicit %[[#LocalCharPtr]] %{{.*}} Workgroup63; CHECK-SPIRV-NEXT: OpGenericCastToPtrExplicit %[[#PrivateIntPtr]] %{{.*}} Function64; CHECK-SPIRV:      OpFunctionEnd65 66define spir_kernel void @test2(ptr addrspace(1) %_arg_GlobalA, ptr byval(%id) %_arg_GlobalId, ptr addrspace(3) %_arg_LocalA) {67entry:68  %var = alloca i3269  %p0 = load i64, ptr %_arg_GlobalId70  %add = getelementptr inbounds i32, ptr addrspace(1) %_arg_GlobalA, i64 %p071  %p2 = load i64, ptr addrspace(1) @__spirv_BuiltInGlobalInvocationId72  %idx = getelementptr inbounds i32, ptr addrspace(1) %add, i64 %p273  %var1 = addrspacecast ptr addrspace(1) %idx to ptr addrspace(4)74  %var2 = addrspacecast ptr addrspace(3) %_arg_LocalA to ptr addrspace(4)75  %var3 = addrspacecast ptr %var to ptr addrspace(4)76  %G = call spir_func ptr addrspace(1) @_Z9to_globalPv(ptr addrspace(4) %var1)77  %L = call spir_func ptr addrspace(3) @_Z8to_localPv(ptr addrspace(4) %var2)78  %P = call spir_func ptr @_Z10to_privatePv(ptr addrspace(4) %var3)79  store i32 0, ptr addrspace(1) %G, align 480  store i8 0, ptr addrspace(3) %L, align 181  store i32 0, ptr %P, align 482  ret void83}84 85declare spir_func ptr addrspace(1) @_Z33__spirv_GenericCastToPtr_ToGlobalPvi(ptr addrspace(4), i32)86declare spir_func ptr addrspace(3) @_Z32__spirv_GenericCastToPtr_ToLocalPvi(ptr addrspace(4), i32)87declare spir_func ptr @_Z34__spirv_GenericCastToPtr_ToPrivatePvi(ptr addrspace(4), i32)88declare spir_func ptr addrspace(1) @_Z41__spirv_GenericCastToPtrExplicit_ToGlobalPvi(ptr addrspace(4), i32)89declare spir_func ptr addrspace(3) @_Z40__spirv_GenericCastToPtrExplicit_ToLocalPvi(ptr addrspace(4), i32)90declare spir_func ptr @_Z42__spirv_GenericCastToPtrExplicit_ToPrivatePvi(ptr addrspace(4), i32)91 92declare spir_func ptr addrspace(1) @_Z9to_globalPv(ptr addrspace(4))93declare spir_func ptr addrspace(3) @_Z8to_localPv(ptr addrspace(4))94declare spir_func ptr @_Z10to_privatePv(ptr addrspace(4))95 96; No mangling97 98; CHECK-SPIRV:      OpFunction99; CHECK-SPIRV:      OpPtrCastToGeneric %[[#GenericIntPtr]]100; CHECK-SPIRV-NEXT: OpPtrCastToGeneric %[[#GenericCharPtr]]101; CHECK-SPIRV-NEXT: OpPtrCastToGeneric %[[#GenericIntPtr]]102; CHECK-SPIRV-NEXT: OpGenericCastToPtr %[[#GlobalIntPtr]]103; CHECK-SPIRV-NEXT: OpGenericCastToPtr %[[#LocalCharPtr]]104; CHECK-SPIRV-NEXT: OpGenericCastToPtr %[[#PrivateIntPtr]]105; CHECK-SPIRV-NEXT: OpGenericCastToPtrExplicit %[[#GlobalIntPtr]] %{{.*}} CrossWorkgroup106; CHECK-SPIRV-NEXT: OpGenericCastToPtrExplicit %[[#LocalCharPtr]] %{{.*}} Workgroup107; CHECK-SPIRV-NEXT: OpGenericCastToPtrExplicit %[[#PrivateIntPtr]] %{{.*}} Function108; CHECK-SPIRV:      OpFunctionEnd109 110define spir_kernel void @test3(ptr addrspace(1) %_arg_GlobalA, ptr byval(%id) %_arg_GlobalId, ptr addrspace(3) %_arg_LocalA) {111entry:112  %var = alloca i32113  %p0 = load i64, ptr %_arg_GlobalId114  %add = getelementptr inbounds i32, ptr addrspace(1) %_arg_GlobalA, i64 %p0115  %p2 = load i64, ptr addrspace(1) @__spirv_BuiltInGlobalInvocationId116  %idx = getelementptr inbounds i32, ptr addrspace(1) %add, i64 %p2117  %var1 = addrspacecast ptr addrspace(1) %idx to ptr addrspace(4)118  %var2 = addrspacecast ptr addrspace(3) %_arg_LocalA to ptr addrspace(4)119  %var3 = addrspacecast ptr %var to ptr addrspace(4)120  %G = call spir_func ptr addrspace(1) @__spirv_GenericCastToPtr_ToGlobal(ptr addrspace(4) %var1, i32 5)121  %L = call spir_func ptr addrspace(3) @__spirv_GenericCastToPtr_ToLocal(ptr addrspace(4) %var2, i32 4)122  %P = call spir_func ptr @__spirv_GenericCastToPtr_ToPrivate(ptr addrspace(4) %var3, i32 7)123  %GE = call spir_func ptr addrspace(1) @__spirv_GenericCastToPtrExplicit_ToGlobal(ptr addrspace(4) %var1, i32 5)124  %LE = call spir_func ptr addrspace(3) @__spirv_GenericCastToPtrExplicit_ToLocal(ptr addrspace(4) %var2, i32 4)125  %PE = call spir_func ptr @__spirv_GenericCastToPtrExplicit_ToPrivate(ptr addrspace(4) %var3, i32 7)126  store i32 0, ptr addrspace(1) %G, align 4127  store i8 0, ptr addrspace(3) %L, align 1128  store i32 0, ptr %P, align 4129  store i32 0, ptr addrspace(1) %GE, align 4130  store i8 0, ptr addrspace(3) %LE, align 1131  store i32 0, ptr %PE, align 4132  ret void133}134 135; CHECK-SPIRV:      OpFunction136; CHECK-SPIRV:      OpPtrCastToGeneric %[[#GenericIntPtr]]137; CHECK-SPIRV-NEXT: OpPtrCastToGeneric %[[#GenericCharPtr]]138; CHECK-SPIRV-NEXT: OpPtrCastToGeneric %[[#GenericIntPtr]]139; CHECK-SPIRV-NEXT: OpGenericCastToPtrExplicit %[[#GlobalIntPtr]] %{{.*}} CrossWorkgroup140; CHECK-SPIRV-NEXT: OpGenericCastToPtrExplicit %[[#LocalCharPtr]] %{{.*}} Workgroup141; CHECK-SPIRV-NEXT: OpGenericCastToPtrExplicit %[[#PrivateIntPtr]] %{{.*}} Function142; CHECK-SPIRV:      OpFunctionEnd143 144define spir_kernel void @test4(ptr addrspace(1) %_arg_GlobalA, ptr byval(%id) %_arg_GlobalId, ptr addrspace(3) %_arg_LocalA) {145entry:146  %var = alloca i32147  %p0 = load i64, ptr %_arg_GlobalId148  %add = getelementptr inbounds i32, ptr addrspace(1) %_arg_GlobalA, i64 %p0149  %p2 = load i64, ptr addrspace(1) @__spirv_BuiltInGlobalInvocationId150  %idx = getelementptr inbounds i32, ptr addrspace(1) %add, i64 %p2151  %var1 = addrspacecast ptr addrspace(1) %idx to ptr addrspace(4)152  %var2 = addrspacecast ptr addrspace(3) %_arg_LocalA to ptr addrspace(4)153  %var3 = addrspacecast ptr %var to ptr addrspace(4)154  %G = call spir_func ptr addrspace(1) @to_global(ptr addrspace(4) %var1)155  %L = call spir_func ptr addrspace(3) @to_local(ptr addrspace(4) %var2)156  %P = call spir_func ptr @to_private(ptr addrspace(4) %var3)157  store i32 0, ptr addrspace(1) %G, align 4158  store i8 0, ptr addrspace(3) %L, align 1159  store i32 0, ptr %P, align 4160  ret void161}162 163declare spir_func ptr addrspace(1) @__spirv_GenericCastToPtr_ToGlobal(ptr addrspace(4), i32)164declare spir_func ptr addrspace(3) @__spirv_GenericCastToPtr_ToLocal(ptr addrspace(4), i32)165declare spir_func ptr @__spirv_GenericCastToPtr_ToPrivate(ptr addrspace(4), i32)166declare spir_func ptr addrspace(1) @__spirv_GenericCastToPtrExplicit_ToGlobal(ptr addrspace(4), i32)167declare spir_func ptr addrspace(3) @__spirv_GenericCastToPtrExplicit_ToLocal(ptr addrspace(4), i32)168declare spir_func ptr @__spirv_GenericCastToPtrExplicit_ToPrivate(ptr addrspace(4), i32)169 170declare spir_func ptr addrspace(1) @to_global(ptr addrspace(4))171declare spir_func ptr addrspace(3) @to_local(ptr addrspace(4))172declare spir_func ptr @to_private(ptr addrspace(4))173