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