1; This is an excerpt from the SYCL end-to-end test suite, cleaned out from 2; unrelevant details, that reproduced cases of invalid SPIR-V generation due 3; to wrong types, deduced from the input LLVM IR. Namely, this test case covers 4; cases of type mismatch when null pointer constant is used in different 5; contexts and so with different pointee types, and intertwined 6; load/store/function call LLVM IR input with bitcasts inserted between 7; instruction uses. 8 9; The only pass criterion is that spirv-val considers output valid. 10 11; RUN: %if spirv-tools %{ llc -O0 -mtriple=spirv64v1.5-unknown-unknown %s -o - -filetype=obj | spirv-val --target-env spv1.5 %} 12 13%"nd_item" = type { i8 } 14%struct.AssertHappened = type { i32, [257 x i8], [257 x i8], [129 x i8], i32, i64, i64, i64, i64, i64, i64 } 15%"range" = type { %"detail::array" } 16%"detail::array" = type { [1 x i64] } 17%class.anon = type { %"accessor", %"accessor", %"accessor", %"accessor", %"accessor", %"accessor", %"accessor", %"accessor", %"accessor", %"accessor", %"accessor", %"accessor", %"accessor" } 18%"accessor" = type { %"detail::AccessorImplDevice", %union.anon } 19%"detail::AccessorImplDevice" = type { %"range", %"range", %"range" } 20%union.anon = type { ptr addrspace(1) } 21%class.anon.6 = type { ptr addrspace(4), ptr addrspace(4), ptr addrspace(4), ptr addrspace(4) } 22%"group" = type { %"range", %"range", %"range", %"range" } 23%"item" = type { %"detail::AccessorImplDevice" } 24%"item.22" = type { %"sd_ItemBase.23" } 25%"sd_ItemBase.23" = type { %"range", %"range" } 26%"tangle_group" = type { %"ss_sub_group_mask" } 27%"ss_sub_group_mask" = type { i64, i64 } 28%class.anon.8 = type { %"accessor", %"accessor", [8 x i8], %"accessor", %"accessor", %"accessor", %"accessor", %"accessor", %"accessor", %"accessor", %"accessor", %"accessor", %"accessor", %"accessor" } 29%"vec.16" = type { %"struct.std::array.20" } 30%"struct.std::array.20" = type { [4 x i32] } 31%class.anon.15 = type { ptr addrspace(4), ptr addrspace(4), ptr addrspace(4) } 32%class.anon.7 = type { ptr addrspace(4), ptr addrspace(4) } 33 34@.str = private unnamed_addr addrspace(1) constant [21 x i8] c"bits_num <= max_bits\00", align 1 35@.str.1 = private unnamed_addr addrspace(1) constant [17 x i8] c"subgroupmask.hpp\00", align 1 36@__PRETTY_FUNCTION1 = private unnamed_addr addrspace(1) constant [32 x i8] c"subgroup_mask(BitsType, size_t)\00", align 1 37@.str.2 = private unnamed_addr addrspace(1) constant [15 x i8] c"bn <= max_bits\00", align 1 38@__PRETTY_FUNCTION2 = private unnamed_addr addrspace(1) constant [52 x i8] c"BitsType subgroup_mask::valuable_bits(size_t) const\00", align 1 39@__spirv_BuiltInSubgroupMaxSize = external dso_local addrspace(1) constant i32, align 4 40@__spirv_BuiltInSubgroupLocalInvocationId = external dso_local addrspace(1) constant i32, align 4 41@_ZSt6ignore = linkonce_odr dso_local addrspace(1) constant %"nd_item" undef, align 1 42@__spirv_BuiltInNumWorkgroups = external dso_local addrspace(1) constant <3 x i64>, align 32 43@__spirv_BuiltInGlobalOffset = external dso_local addrspace(1) constant <3 x i64>, align 32 44@__spirv_BuiltInGlobalInvocationId = external dso_local addrspace(1) constant <3 x i64>, align 32 45@__spirv_BuiltInGlobalSize = external dso_local addrspace(1) constant <3 x i64>, align 32 46@__spirv_BuiltInLocalInvocationId = external dso_local addrspace(1) constant <3 x i64>, align 32 47@SPIR_AssertHappenedMem = linkonce_odr dso_local addrspace(1) global %struct.AssertHappened zeroinitializer 48@__spirv_BuiltInWorkgroupId = external dso_local addrspace(1) constant <3 x i64>, align 32 49@__spirv_BuiltInWorkgroupSize = external dso_local addrspace(1) constant <3 x i64>, align 32 50 51 52define weak_odr dso_local spir_kernel void @TestKernel(ptr addrspace(1) %_arg_TmpAcc, ptr byval(%"range") %_arg_TmpAcc1, ptr byval(%"range") %_arg_TmpAcc2, ptr byval(%"range") %_arg_TmpAcc3, ptr addrspace(1) align 1 %_arg_BarrierAcc, ptr byval(%"range") %_arg_BarrierAcc4, ptr byval(%"range") %_arg_BarrierAcc5, ptr byval(%"range") %_arg_BarrierAcc6, ptr addrspace(1) align 1 %_arg_BroadcastAcc, ptr byval(%"range") %_arg_BroadcastAcc7, ptr byval(%"range") %_arg_BroadcastAcc8, ptr byval(%"range") %_arg_BroadcastAcc9, ptr addrspace(1) align 1 %_arg_AnyAcc, ptr byval(%"range") %_arg_AnyAcc10, ptr byval(%"range") %_arg_AnyAcc11, ptr byval(%"range") %_arg_AnyAcc12, ptr addrspace(1) align 1 %_arg_AllAcc, ptr byval(%"range") %_arg_AllAcc13, ptr byval(%"range") %_arg_AllAcc14, ptr byval(%"range") %_arg_AllAcc15, ptr addrspace(1) align 1 %_arg_NoneAcc, ptr byval(%"range") %_arg_NoneAcc16, ptr byval(%"range") %_arg_NoneAcc17, ptr byval(%"range") %_arg_NoneAcc18, ptr addrspace(1) align 1 %_arg_ReduceAcc, ptr byval(%"range") %_arg_ReduceAcc19, ptr byval(%"range") %_arg_ReduceAcc20, ptr byval(%"range") %_arg_ReduceAcc21, ptr addrspace(1) align 1 %_arg_ExScanAcc, ptr byval(%"range") %_arg_ExScanAcc22, ptr byval(%"range") %_arg_ExScanAcc23, ptr byval(%"range") %_arg_ExScanAcc24, ptr addrspace(1) align 1 %_arg_IncScanAcc, ptr byval(%"range") %_arg_IncScanAcc25, ptr byval(%"range") %_arg_IncScanAcc26, ptr byval(%"range") %_arg_IncScanAcc27, ptr addrspace(1) align 1 %_arg_ShiftLeftAcc, ptr byval(%"range") %_arg_ShiftLeftAcc28, ptr byval(%"range") %_arg_ShiftLeftAcc29, ptr byval(%"range") %_arg_ShiftLeftAcc30, ptr addrspace(1) align 1 %_arg_ShiftRightAcc, ptr byval(%"range") %_arg_ShiftRightAcc31, ptr byval(%"range") %_arg_ShiftRightAcc32, ptr byval(%"range") %_arg_ShiftRightAcc33, ptr addrspace(1) align 1 %_arg_SelectAcc, ptr byval(%"range") %_arg_SelectAcc34, ptr byval(%"range") %_arg_SelectAcc35, ptr byval(%"range") %_arg_SelectAcc36, ptr addrspace(1) align 1 %_arg_PermuteXorAcc, ptr byval(%"range") %_arg_PermuteXorAcc37, ptr byval(%"range") %_arg_PermuteXorAcc38, ptr byval(%"range") %_arg_PermuteXorAcc39) { 53entry: 54 %_arg_TmpAcc.addr = alloca ptr addrspace(1) 55 %_arg_BarrierAcc.addr = alloca ptr addrspace(1) 56 %_arg_BroadcastAcc.addr = alloca ptr addrspace(1) 57 %_arg_AnyAcc.addr = alloca ptr addrspace(1) 58 %_arg_AllAcc.addr = alloca ptr addrspace(1) 59 %_arg_NoneAcc.addr = alloca ptr addrspace(1) 60 %_arg_ReduceAcc.addr = alloca ptr addrspace(1) 61 %_arg_ExScanAcc.addr = alloca ptr addrspace(1) 62 %_arg_IncScanAcc.addr = alloca ptr addrspace(1) 63 %_arg_ShiftLeftAcc.addr = alloca ptr addrspace(1) 64 %_arg_ShiftRightAcc.addr = alloca ptr addrspace(1) 65 %_arg_SelectAcc.addr = alloca ptr addrspace(1) 66 %_arg_PermuteXorAcc.addr = alloca ptr addrspace(1) 67 %Kernel = alloca %class.anon 68 %agg.tmp = alloca %"range" 69 %agg.tmp41 = alloca %"range" 70 %agg.tmp42 = alloca %"range" 71 %agg.tmp44 = alloca %"range" 72 %agg.tmp45 = alloca %"range" 73 %agg.tmp46 = alloca %"range" 74 %agg.tmp48 = alloca %"range" 75 %agg.tmp49 = alloca %"range" 76 %agg.tmp50 = alloca %"range" 77 %agg.tmp52 = alloca %"range" 78 %agg.tmp53 = alloca %"range" 79 %agg.tmp54 = alloca %"range" 80 %agg.tmp56 = alloca %"range" 81 %agg.tmp57 = alloca %"range" 82 %agg.tmp58 = alloca %"range" 83 %agg.tmp60 = alloca %"range" 84 %agg.tmp61 = alloca %"range" 85 %agg.tmp62 = alloca %"range" 86 %agg.tmp64 = alloca %"range" 87 %agg.tmp65 = alloca %"range" 88 %agg.tmp66 = alloca %"range" 89 %agg.tmp68 = alloca %"range" 90 %agg.tmp69 = alloca %"range" 91 %agg.tmp70 = alloca %"range" 92 %agg.tmp72 = alloca %"range" 93 %agg.tmp73 = alloca %"range" 94 %agg.tmp74 = alloca %"range" 95 %agg.tmp76 = alloca %"range" 96 %agg.tmp77 = alloca %"range" 97 %agg.tmp78 = alloca %"range" 98 %agg.tmp80 = alloca %"range" 99 %agg.tmp81 = alloca %"range" 100 %agg.tmp82 = alloca %"range" 101 %agg.tmp84 = alloca %"range" 102 %agg.tmp85 = alloca %"range" 103 %agg.tmp86 = alloca %"range" 104 %agg.tmp88 = alloca %"range" 105 %agg.tmp89 = alloca %"range" 106 %agg.tmp90 = alloca %"range" 107 %agg.tmp91 = alloca %"nd_item", align 1 108 %Kernel.ascast = addrspacecast ptr %Kernel to ptr addrspace(4) 109 %agg.tmp91.ascast = addrspacecast ptr %agg.tmp91 to ptr addrspace(4) 110 store ptr addrspace(1) %_arg_TmpAcc, ptr %_arg_TmpAcc.addr 111 store ptr addrspace(1) %_arg_BarrierAcc, ptr %_arg_BarrierAcc.addr 112 store ptr addrspace(1) %_arg_BroadcastAcc, ptr %_arg_BroadcastAcc.addr 113 store ptr addrspace(1) %_arg_AnyAcc, ptr %_arg_AnyAcc.addr 114 store ptr addrspace(1) %_arg_AllAcc, ptr %_arg_AllAcc.addr 115 store ptr addrspace(1) %_arg_NoneAcc, ptr %_arg_NoneAcc.addr 116 store ptr addrspace(1) %_arg_ReduceAcc, ptr %_arg_ReduceAcc.addr 117 store ptr addrspace(1) %_arg_ExScanAcc, ptr %_arg_ExScanAcc.addr 118 store ptr addrspace(1) %_arg_IncScanAcc, ptr %_arg_IncScanAcc.addr 119 store ptr addrspace(1) %_arg_ShiftLeftAcc, ptr %_arg_ShiftLeftAcc.addr 120 store ptr addrspace(1) %_arg_ShiftRightAcc, ptr %_arg_ShiftRightAcc.addr 121 store ptr addrspace(1) %_arg_SelectAcc, ptr %_arg_SelectAcc.addr 122 store ptr addrspace(1) %_arg_PermuteXorAcc, ptr %_arg_PermuteXorAcc.addr 123 %TmpAcc1 = bitcast ptr addrspace(4) %Kernel.ascast to ptr addrspace(4) 124 call spir_func void @Foo1(ptr addrspace(4) %TmpAcc1) 125 %BarrierAcc = getelementptr inbounds nuw %class.anon, ptr addrspace(4) %Kernel.ascast, i32 0, i32 1 126 call spir_func void @Foo2(ptr addrspace(4) %BarrierAcc) 127 %BroadcastAcc = getelementptr inbounds nuw %class.anon, ptr addrspace(4) %Kernel.ascast, i32 0, i32 2 128 call spir_func void @Foo2(ptr addrspace(4) %BroadcastAcc) 129 %AnyAcc = getelementptr inbounds nuw %class.anon, ptr addrspace(4) %Kernel.ascast, i32 0, i32 3 130 call spir_func void @Foo2(ptr addrspace(4) %AnyAcc) 131 %AllAcc = getelementptr inbounds nuw %class.anon, ptr addrspace(4) %Kernel.ascast, i32 0, i32 4 132 call spir_func void @Foo2(ptr addrspace(4) %AllAcc) 133 %NoneAcc = getelementptr inbounds nuw %class.anon, ptr addrspace(4) %Kernel.ascast, i32 0, i32 5 134 call spir_func void @Foo2(ptr addrspace(4) %NoneAcc) 135 %ReduceAcc = getelementptr inbounds nuw %class.anon, ptr addrspace(4) %Kernel.ascast, i32 0, i32 6 136 call spir_func void @Foo2(ptr addrspace(4) %ReduceAcc) 137 %ExScanAcc = getelementptr inbounds nuw %class.anon, ptr addrspace(4) %Kernel.ascast, i32 0, i32 7 138 call spir_func void @Foo2(ptr addrspace(4) %ExScanAcc) 139 %IncScanAcc = getelementptr inbounds nuw %class.anon, ptr addrspace(4) %Kernel.ascast, i32 0, i32 8 140 call spir_func void @Foo2(ptr addrspace(4) %IncScanAcc) 141 %ShiftLeftAcc = getelementptr inbounds nuw %class.anon, ptr addrspace(4) %Kernel.ascast, i32 0, i32 9 142 call spir_func void @Foo2(ptr addrspace(4) %ShiftLeftAcc) 143 %ShiftRightAcc = getelementptr inbounds nuw %class.anon, ptr addrspace(4) %Kernel.ascast, i32 0, i32 10 144 call spir_func void @Foo2(ptr addrspace(4) %ShiftRightAcc) 145 %SelectAcc = getelementptr inbounds nuw %class.anon, ptr addrspace(4) %Kernel.ascast, i32 0, i32 11 146 call spir_func void @Foo2(ptr addrspace(4) %SelectAcc) 147 %PermuteXorAcc = getelementptr inbounds nuw %class.anon, ptr addrspace(4) %Kernel.ascast, i32 0, i32 12 148 call spir_func void @Foo2(ptr addrspace(4) %PermuteXorAcc) 149 %TmpAcc402 = bitcast ptr addrspace(4) %Kernel.ascast to ptr addrspace(4) 150 %0 = load ptr addrspace(1), ptr %_arg_TmpAcc.addr 151 call spir_func void @Foo3(ptr addrspace(4) %TmpAcc402, ptr addrspace(1) %0, ptr byval(%"range") %agg.tmp, ptr byval(%"range") %agg.tmp41, ptr byval(%"range") %agg.tmp42) 152 %BarrierAcc43 = getelementptr inbounds nuw %class.anon, ptr addrspace(4) %Kernel.ascast, i32 0, i32 1 153 %1 = load ptr addrspace(1), ptr %_arg_BarrierAcc.addr 154 call spir_func void @Foo4(ptr addrspace(4) %BarrierAcc43, ptr addrspace(1) %1, ptr byval(%"range") %agg.tmp44, ptr byval(%"range") %agg.tmp45, ptr byval(%"range") %agg.tmp46) 155 %BroadcastAcc47 = getelementptr inbounds nuw %class.anon, ptr addrspace(4) %Kernel.ascast, i32 0, i32 2 156 %2 = load ptr addrspace(1), ptr %_arg_BroadcastAcc.addr 157 call spir_func void @Foo4(ptr addrspace(4) %BroadcastAcc47, ptr addrspace(1) %2, ptr byval(%"range") %agg.tmp48, ptr byval(%"range") %agg.tmp49, ptr byval(%"range") %agg.tmp50) 158 %AnyAcc51 = getelementptr inbounds nuw %class.anon, ptr addrspace(4) %Kernel.ascast, i32 0, i32 3 159 %3 = load ptr addrspace(1), ptr %_arg_AnyAcc.addr 160 call spir_func void @Foo4(ptr addrspace(4) %AnyAcc51, ptr addrspace(1) %3, ptr byval(%"range") %agg.tmp52, ptr byval(%"range") %agg.tmp53, ptr byval(%"range") %agg.tmp54) 161 %AllAcc55 = getelementptr inbounds nuw %class.anon, ptr addrspace(4) %Kernel.ascast, i32 0, i32 4 162 %4 = load ptr addrspace(1), ptr %_arg_AllAcc.addr 163 call spir_func void @Foo4(ptr addrspace(4) %AllAcc55, ptr addrspace(1) %4, ptr byval(%"range") %agg.tmp56, ptr byval(%"range") %agg.tmp57, ptr byval(%"range") %agg.tmp58) 164 %NoneAcc59 = getelementptr inbounds nuw %class.anon, ptr addrspace(4) %Kernel.ascast, i32 0, i32 5 165 %5 = load ptr addrspace(1), ptr %_arg_NoneAcc.addr 166 call spir_func void @Foo4(ptr addrspace(4) %NoneAcc59, ptr addrspace(1) %5, ptr byval(%"range") %agg.tmp60, ptr byval(%"range") %agg.tmp61, ptr byval(%"range") %agg.tmp62) 167 %ReduceAcc63 = getelementptr inbounds nuw %class.anon, ptr addrspace(4) %Kernel.ascast, i32 0, i32 6 168 %6 = load ptr addrspace(1), ptr %_arg_ReduceAcc.addr 169 call spir_func void @Foo4(ptr addrspace(4) %ReduceAcc63, ptr addrspace(1) %6, ptr byval(%"range") %agg.tmp64, ptr byval(%"range") %agg.tmp65, ptr byval(%"range") %agg.tmp66) 170 %ExScanAcc67 = getelementptr inbounds nuw %class.anon, ptr addrspace(4) %Kernel.ascast, i32 0, i32 7 171 %7 = load ptr addrspace(1), ptr %_arg_ExScanAcc.addr 172 call spir_func void @Foo4(ptr addrspace(4) %ExScanAcc67, ptr addrspace(1) %7, ptr byval(%"range") %agg.tmp68, ptr byval(%"range") %agg.tmp69, ptr byval(%"range") %agg.tmp70) 173 %IncScanAcc71 = getelementptr inbounds nuw %class.anon, ptr addrspace(4) %Kernel.ascast, i32 0, i32 8 174 %8 = load ptr addrspace(1), ptr %_arg_IncScanAcc.addr 175 call spir_func void @Foo4(ptr addrspace(4) %IncScanAcc71, ptr addrspace(1) %8, ptr byval(%"range") %agg.tmp72, ptr byval(%"range") %agg.tmp73, ptr byval(%"range") %agg.tmp74) 176 %ShiftLeftAcc75 = getelementptr inbounds nuw %class.anon, ptr addrspace(4) %Kernel.ascast, i32 0, i32 9 177 %9 = load ptr addrspace(1), ptr %_arg_ShiftLeftAcc.addr 178 call spir_func void @Foo4(ptr addrspace(4) %ShiftLeftAcc75, ptr addrspace(1) %9, ptr byval(%"range") %agg.tmp76, ptr byval(%"range") %agg.tmp77, ptr byval(%"range") %agg.tmp78) 179 %ShiftRightAcc79 = getelementptr inbounds nuw %class.anon, ptr addrspace(4) %Kernel.ascast, i32 0, i32 10 180 %10 = load ptr addrspace(1), ptr %_arg_ShiftRightAcc.addr 181 call spir_func void @Foo4(ptr addrspace(4) %ShiftRightAcc79, ptr addrspace(1) %10, ptr byval(%"range") %agg.tmp80, ptr byval(%"range") %agg.tmp81, ptr byval(%"range") %agg.tmp82) 182 %SelectAcc83 = getelementptr inbounds nuw %class.anon, ptr addrspace(4) %Kernel.ascast, i32 0, i32 11 183 %11 = load ptr addrspace(1), ptr %_arg_SelectAcc.addr 184 call spir_func void @Foo4(ptr addrspace(4) %SelectAcc83, ptr addrspace(1) %11, ptr byval(%"range") %agg.tmp84, ptr byval(%"range") %agg.tmp85, ptr byval(%"range") %agg.tmp86) 185 %PermuteXorAcc87 = getelementptr inbounds nuw %class.anon, ptr addrspace(4) %Kernel.ascast, i32 0, i32 12 186 %12 = load ptr addrspace(1), ptr %_arg_PermuteXorAcc.addr 187 call spir_func void @Foo4(ptr addrspace(4) %PermuteXorAcc87, ptr addrspace(1) %12, ptr byval(%"range") %agg.tmp88, ptr byval(%"range") %agg.tmp89, ptr byval(%"range") %agg.tmp90) 188 %call = call spir_func ptr addrspace(4) @Foo5() 189 call spir_func void @Foo6(ptr addrspace(4) dead_on_unwind writable sret(%"nd_item") align 1 %agg.tmp91.ascast, ptr addrspace(4) %call) 190 call spir_func void @Foo22(ptr addrspace(4) %Kernel.ascast, ptr byval(%"nd_item") align 1 %agg.tmp91) 191 ret void 192} 193 194define internal spir_func void @Foo1(ptr addrspace(4) %this) { 195entry: 196 %this.addr = alloca ptr addrspace(4) 197 %agg.tmp = alloca %"range" 198 %agg.tmp2 = alloca %"range" 199 %agg.tmp3 = alloca %"range" 200 %agg.tmp.ascast = addrspacecast ptr %agg.tmp to ptr addrspace(4) 201 %agg.tmp2.ascast = addrspacecast ptr %agg.tmp2 to ptr addrspace(4) 202 %agg.tmp3.ascast = addrspacecast ptr %agg.tmp3 to ptr addrspace(4) 203 store ptr addrspace(4) %this, ptr %this.addr 204 %this1 = load ptr addrspace(4), ptr %this.addr 205 %impl1 = bitcast ptr addrspace(4) %this1 to ptr addrspace(4) 206 call void @llvm.memset.p0.i64(ptr %agg.tmp, i8 0, i64 8, i1 false) 207 call spir_func void @Foo11(ptr addrspace(4) %agg.tmp.ascast) 208 call spir_func void @Foo12(ptr addrspace(4) dead_on_unwind writable sret(%"range") %agg.tmp2.ascast) 209 call spir_func void @Foo12(ptr addrspace(4) dead_on_unwind writable sret(%"range") %agg.tmp3.ascast) 210 call spir_func void @Foo10(ptr addrspace(4) %impl1, ptr byval(%"range") %agg.tmp, ptr byval(%"range") %agg.tmp2, ptr byval(%"range") %agg.tmp3) 211 ret void 212} 213 214 215define internal spir_func void @Foo2(ptr addrspace(4) %this) { 216entry: 217 %this.addr = alloca ptr addrspace(4) 218 %agg.tmp = alloca %"range" 219 %agg.tmp2 = alloca %"range" 220 %agg.tmp3 = alloca %"range" 221 %agg.tmp.ascast = addrspacecast ptr %agg.tmp to ptr addrspace(4) 222 %agg.tmp2.ascast = addrspacecast ptr %agg.tmp2 to ptr addrspace(4) 223 %agg.tmp3.ascast = addrspacecast ptr %agg.tmp3 to ptr addrspace(4) 224 store ptr addrspace(4) %this, ptr %this.addr 225 %this1 = load ptr addrspace(4), ptr %this.addr 226 %impl1 = bitcast ptr addrspace(4) %this1 to ptr addrspace(4) 227 call void @llvm.memset.p0.i64(ptr %agg.tmp, i8 0, i64 8, i1 false) 228 call spir_func void @Foo11(ptr addrspace(4) %agg.tmp.ascast) 229 call spir_func void @Foo12(ptr addrspace(4) dead_on_unwind writable sret(%"range") %agg.tmp2.ascast) 230 call spir_func void @Foo12(ptr addrspace(4) dead_on_unwind writable sret(%"range") %agg.tmp3.ascast) 231 call spir_func void @Foo10(ptr addrspace(4) %impl1, ptr byval(%"range") %agg.tmp, ptr byval(%"range") %agg.tmp2, ptr byval(%"range") %agg.tmp3) 232 ret void 233} 234 235 236 237 238define internal spir_func void @Foo3(ptr addrspace(4) %this, ptr addrspace(1) %Ptr, ptr byval(%"range") %AccessRange, ptr byval(%"range") %MemRange, ptr byval(%"range") %Offset) { 239entry: 240 %this.addr = alloca ptr addrspace(4) 241 %Ptr.addr = alloca ptr addrspace(1) 242 %ref.tmp = alloca %class.anon.6 243 %ref.tmp.ascast = addrspacecast ptr %ref.tmp to ptr addrspace(4) 244 store ptr addrspace(4) %this, ptr %this.addr 245 store ptr addrspace(1) %Ptr, ptr %Ptr.addr 246 %AccessRange.ascast = addrspacecast ptr %AccessRange to ptr addrspace(4) 247 %MemRange.ascast = addrspacecast ptr %MemRange to ptr addrspace(4) 248 %Offset.ascast = addrspacecast ptr %Offset to ptr addrspace(4) 249 %this1 = load ptr addrspace(4), ptr %this.addr 250 %0 = load ptr addrspace(1), ptr %Ptr.addr 251 %1 = getelementptr inbounds nuw %"accessor", ptr addrspace(4) %this1, i32 0, i32 1 252 store ptr addrspace(1) %0, ptr addrspace(4) %1 253 %2 = bitcast ptr %ref.tmp to ptr 254 store ptr addrspace(4) %this1, ptr %2 255 %Offset2 = getelementptr inbounds %class.anon.6, ptr %ref.tmp, i32 0, i32 1 256 store ptr addrspace(4) %Offset.ascast, ptr %Offset2 257 %AccessRange3 = getelementptr inbounds %class.anon.6, ptr %ref.tmp, i32 0, i32 2 258 store ptr addrspace(4) %AccessRange.ascast, ptr %AccessRange3 259 %MemRange4 = getelementptr inbounds %class.anon.6, ptr %ref.tmp, i32 0, i32 3 260 store ptr addrspace(4) %MemRange.ascast, ptr %MemRange4 261 call spir_func void @Foo13(ptr addrspace(4) %ref.tmp.ascast) 262 %call = call spir_func i64 @Foo21(ptr addrspace(4) %this1) 263 %3 = getelementptr inbounds nuw %"accessor", ptr addrspace(4) %this1, i32 0, i32 1 264 %4 = load ptr addrspace(1), ptr addrspace(4) %3 265 %add.ptr = getelementptr inbounds nuw i64, ptr addrspace(1) %4, i64 %call 266 store ptr addrspace(1) %add.ptr, ptr addrspace(4) %3 267 ret void 268} 269 270 271define internal spir_func void @Foo4(ptr addrspace(4) %this, ptr addrspace(1) %Ptr, ptr byval(%"range") %AccessRange, ptr byval(%"range") %MemRange, ptr byval(%"range") %Offset) { 272entry: 273 %this.addr = alloca ptr addrspace(4) 274 %Ptr.addr = alloca ptr addrspace(1) 275 %ref.tmp = alloca %class.anon.6 276 %ref.tmp.ascast = addrspacecast ptr %ref.tmp to ptr addrspace(4) 277 store ptr addrspace(4) %this, ptr %this.addr 278 store ptr addrspace(1) %Ptr, ptr %Ptr.addr 279 %AccessRange.ascast = addrspacecast ptr %AccessRange to ptr addrspace(4) 280 %MemRange.ascast = addrspacecast ptr %MemRange to ptr addrspace(4) 281 %Offset.ascast = addrspacecast ptr %Offset to ptr addrspace(4) 282 %this1 = load ptr addrspace(4), ptr %this.addr 283 %0 = load ptr addrspace(1), ptr %Ptr.addr 284 %1 = getelementptr inbounds nuw %"accessor", ptr addrspace(4) %this1, i32 0, i32 1 285 store ptr addrspace(1) %0, ptr addrspace(4) %1 286 %2 = bitcast ptr %ref.tmp to ptr 287 store ptr addrspace(4) %this1, ptr %2 288 %Offset2 = getelementptr inbounds %class.anon.6, ptr %ref.tmp, i32 0, i32 1 289 store ptr addrspace(4) %Offset.ascast, ptr %Offset2 290 %AccessRange3 = getelementptr inbounds %class.anon.6, ptr %ref.tmp, i32 0, i32 2 291 store ptr addrspace(4) %AccessRange.ascast, ptr %AccessRange3 292 %MemRange4 = getelementptr inbounds %class.anon.6, ptr %ref.tmp, i32 0, i32 3 293 store ptr addrspace(4) %MemRange.ascast, ptr %MemRange4 294 call spir_func void @Foo30(ptr addrspace(4) %ref.tmp.ascast) 295 %call = call spir_func i64 @Foo32(ptr addrspace(4) %this1) 296 %3 = getelementptr inbounds nuw %"accessor", ptr addrspace(4) %this1, i32 0, i32 1 297 %4 = load ptr addrspace(1), ptr addrspace(4) %3 298 %add.ptr = getelementptr inbounds nuw i8, ptr addrspace(1) %4, i64 %call 299 store ptr addrspace(1) %add.ptr, ptr addrspace(4) %3 300 ret void 301} 302 303 304define internal spir_func ptr addrspace(4) @Foo5() { 305entry: 306 %retval = alloca ptr addrspace(4) 307 %retval.ascast = addrspacecast ptr %retval to ptr addrspace(4) 308 ret ptr addrspace(4) null 309} 310 311 312define internal spir_func void @Foo6(ptr addrspace(4) dead_on_unwind noalias writable sret(%"nd_item") align 1 %agg.result, ptr addrspace(4) %0) { 313entry: 314 %.addr = alloca ptr addrspace(4) 315 %GlobalSize = alloca %"range" 316 %LocalSize = alloca %"range" 317 %GroupRange = alloca %"range" 318 %GroupId = alloca %"range" 319 %GlobalId = alloca %"range" 320 %LocalId = alloca %"range" 321 %GlobalOffset = alloca %"range" 322 %Group = alloca %"group" 323 %GlobalItem = alloca %"item" 324 %LocalItem = alloca %"item.22" 325 %cleanup.dest.slot = alloca i32, align 4 326 %GlobalSize.ascast = addrspacecast ptr %GlobalSize to ptr addrspace(4) 327 %LocalSize.ascast = addrspacecast ptr %LocalSize to ptr addrspace(4) 328 %GroupRange.ascast = addrspacecast ptr %GroupRange to ptr addrspace(4) 329 %GroupId.ascast = addrspacecast ptr %GroupId to ptr addrspace(4) 330 %GlobalId.ascast = addrspacecast ptr %GlobalId to ptr addrspace(4) 331 %LocalId.ascast = addrspacecast ptr %LocalId to ptr addrspace(4) 332 %GlobalOffset.ascast = addrspacecast ptr %GlobalOffset to ptr addrspace(4) 333 %Group.ascast = addrspacecast ptr %Group to ptr addrspace(4) 334 %GlobalItem.ascast = addrspacecast ptr %GlobalItem to ptr addrspace(4) 335 %LocalItem.ascast = addrspacecast ptr %LocalItem to ptr addrspace(4) 336 store ptr addrspace(4) %0, ptr %.addr 337 call spir_func void @Foo7(ptr addrspace(4) dead_on_unwind writable sret(%"range") %GlobalSize.ascast) 338 call spir_func void @Init1(ptr addrspace(4) dead_on_unwind writable sret(%"range") %LocalSize.ascast) 339 call spir_func void @Init2(ptr addrspace(4) dead_on_unwind writable sret(%"range") %GroupRange.ascast) 340 call spir_func void @Init3(ptr addrspace(4) dead_on_unwind writable sret(%"range") %GroupId.ascast) 341 call spir_func void @Init6(ptr addrspace(4) dead_on_unwind writable sret(%"range") %GlobalId.ascast) 342 call spir_func void @Init4(ptr addrspace(4) dead_on_unwind writable sret(%"range") %LocalId.ascast) 343 call spir_func void @Init5(ptr addrspace(4) dead_on_unwind writable sret(%"range") %GlobalOffset.ascast) 344 call spir_func void @Foo23(ptr addrspace(4) dead_on_unwind writable sret(%"group") %Group.ascast, ptr addrspace(4) %GlobalSize.ascast, ptr addrspace(4) %LocalSize.ascast, ptr addrspace(4) %GroupRange.ascast, ptr addrspace(4) %GroupId.ascast) 345 call spir_func void @Foo24(ptr addrspace(4) dead_on_unwind writable sret(%"item") %GlobalItem.ascast, ptr addrspace(4) %GlobalSize.ascast, ptr addrspace(4) %GlobalId.ascast, ptr addrspace(4) %GlobalOffset.ascast) 346 call spir_func void @Foo25(ptr addrspace(4) dead_on_unwind writable sret(%"item.22") %LocalItem.ascast, ptr addrspace(4) %LocalSize.ascast, ptr addrspace(4) %LocalId.ascast) 347 call spir_func void @Foo26(ptr addrspace(4) dead_on_unwind writable sret(%"nd_item") align 1 %agg.result, ptr addrspace(4) %GlobalItem.ascast, ptr addrspace(4) %LocalItem.ascast, ptr addrspace(4) %Group.ascast) 348 ret void 349} 350 351 352define internal spir_func void @Foo22(ptr addrspace(4) %this, ptr byval(%"nd_item") align 1 %item) { 353entry: 354 %this.addr.i76 = alloca ptr addrspace(4) 355 %WI.addr.i = alloca i64 356 %TangleLeader.addr.i = alloca i64 357 %TangleSize.addr.i = alloca i64 358 %agg.tmp.i = alloca %"range" 359 %agg.tmp2.i = alloca %"tangle_group" 360 %Visible.i = alloca i64 361 %Other.i = alloca i64 362 %agg.tmp5.i = alloca %"range" 363 %agg.tmp8.i = alloca %"range" 364 %OriginalLID.i = alloca i32, align 4 365 %LID.i = alloca i32, align 4 366 %BroadcastResult.i = alloca i32, align 4 367 %agg.tmp12.i = alloca %"tangle_group" 368 %agg.tmp15.i = alloca %"range" 369 %AnyResult.i = alloca i8, align 1 370 %agg.tmp18.i = alloca %"tangle_group" 371 %agg.tmp24.i = alloca %"range" 372 %AllResult.i = alloca i8, align 1 373 %agg.tmp27.i = alloca %"tangle_group" 374 %agg.tmp35.i = alloca %"range" 375 %NoneResult.i = alloca i8, align 1 376 %agg.tmp38.i = alloca %"tangle_group" 377 %agg.tmp46.i = alloca %"range" 378 %ReduceResult.i = alloca i32, align 4 379 %agg.tmp49.i = alloca %"tangle_group" 380 %agg.tmp50.i = alloca %"nd_item", align 1 381 %agg.tmp54.i = alloca %"range" 382 %ExScanResult.i = alloca i32, align 4 383 %agg.tmp57.i = alloca %"tangle_group" 384 %agg.tmp58.i = alloca %"nd_item", align 1 385 %agg.tmp61.i = alloca %"range" 386 %IncScanResult.i = alloca i32, align 4 387 %agg.tmp64.i = alloca %"tangle_group" 388 %agg.tmp65.i = alloca %"nd_item", align 1 389 %agg.tmp69.i = alloca %"range" 390 %ShiftLeftResult.i = alloca i32, align 4 391 %agg.tmp72.i = alloca %"tangle_group" 392 %agg.tmp79.i = alloca %"range" 393 %ShiftRightResult.i = alloca i32, align 4 394 %agg.tmp82.i = alloca %"tangle_group" 395 %agg.tmp88.i = alloca %"range" 396 %SelectResult.i = alloca i32, align 4 397 %agg.tmp91.i = alloca %"tangle_group" 398 %agg.tmp92.i = alloca %"range" 399 %ref.tmp.i = alloca %"range" 400 %ref.tmp93.i = alloca %"range" 401 %ref.tmp94.i = alloca i32, align 4 402 %agg.tmp100.i = alloca %"range" 403 %PermuteXorResult.i = alloca i32, align 4 404 %agg.tmp103.i = alloca %"tangle_group" 405 %agg.tmp106.i = alloca %"range" 406 %agg.tmp18.ascast.ascast75 = alloca %"nd_item" 407 %agg.tmp17.ascast.ascast74 = alloca %"tangle_group" 408 %retval.i66 = alloca i64 409 %this.addr.i67 = alloca ptr addrspace(4) 410 %Result.i68 = alloca i64 411 %retval.i58 = alloca i64 412 %this.addr.i59 = alloca ptr addrspace(4) 413 %Result.i60 = alloca i64 414 %retval.i50 = alloca i64 415 %this.addr.i51 = alloca ptr addrspace(4) 416 %Result.i52 = alloca i64 417 %retval.i42 = alloca i64 418 %this.addr.i43 = alloca ptr addrspace(4) 419 %Result.i44 = alloca i64 420 %retval.i = alloca i64 421 %this.addr.i = alloca ptr addrspace(4) 422 %Result.i = alloca i64 423 %this.addr = alloca ptr addrspace(4) 424 %WI = alloca %"range" 425 %SG = alloca %"nd_item", align 1 426 %BranchBody = alloca %class.anon.8 427 %ref.tmp = alloca %"range" 428 %ref.tmp15 = alloca i32, align 4 429 %Tangle = alloca %"tangle_group" 430 %agg.tmp = alloca %"nd_item", align 1 431 %TangleLeader = alloca i64 432 %TangleSize = alloca i64 433 %IsMember = alloca %"nd_item", align 1 434 %agg.tmp17 = alloca %"tangle_group" 435 %agg.tmp18 = alloca %"nd_item", align 1 436 %ref.tmp19 = alloca %"range" 437 %ref.tmp20 = alloca i32, align 4 438 %Tangle24 = alloca %"tangle_group" 439 %agg.tmp25 = alloca %"nd_item", align 1 440 %TangleLeader26 = alloca i64 441 %TangleSize27 = alloca i64 442 %IsMember28 = alloca %"nd_item", align 1 443 %agg.tmp30 = alloca %"tangle_group" 444 %agg.tmp31 = alloca %"nd_item", align 1 445 %Tangle33 = alloca %"tangle_group" 446 %agg.tmp34 = alloca %"nd_item", align 1 447 %TangleLeader35 = alloca i64 448 %TangleSize36 = alloca i64 449 %IsMember37 = alloca %"nd_item", align 1 450 %agg.tmp39 = alloca %"tangle_group" 451 %agg.tmp40 = alloca %"nd_item", align 1 452 %WI.ascast = addrspacecast ptr %WI to ptr addrspace(4) 453 %SG.ascast = addrspacecast ptr %SG to ptr addrspace(4) 454 %BranchBody.ascast = addrspacecast ptr %BranchBody to ptr addrspace(4) 455 %ref.tmp.ascast = addrspacecast ptr %ref.tmp to ptr addrspace(4) 456 %ref.tmp15.ascast = addrspacecast ptr %ref.tmp15 to ptr addrspace(4) 457 %Tangle.ascast = addrspacecast ptr %Tangle to ptr addrspace(4) 458 %IsMember.ascast = addrspacecast ptr %IsMember to ptr addrspace(4) 459 %ref.tmp19.ascast = addrspacecast ptr %ref.tmp19 to ptr addrspace(4) 460 %ref.tmp20.ascast = addrspacecast ptr %ref.tmp20 to ptr addrspace(4) 461 %Tangle24.ascast = addrspacecast ptr %Tangle24 to ptr addrspace(4) 462 %IsMember28.ascast = addrspacecast ptr %IsMember28 to ptr addrspace(4) 463 %Tangle33.ascast = addrspacecast ptr %Tangle33 to ptr addrspace(4) 464 %IsMember37.ascast = addrspacecast ptr %IsMember37 to ptr addrspace(4) 465 store ptr addrspace(4) %this, ptr %this.addr 466 %item.ascast = addrspacecast ptr %item to ptr addrspace(4) 467 %this1 = load ptr addrspace(4), ptr %this.addr 468 call spir_func void @Foo40(ptr addrspace(4) dead_on_unwind writable sret(%"range") %WI.ascast, ptr addrspace(4) align 1 %item.ascast) 469 call spir_func void @Foo41(ptr addrspace(4) dead_on_unwind writable sret(%"nd_item") align 1 %SG.ascast, ptr addrspace(4) align 1 %item.ascast) 470 %TmpAcc1 = bitcast ptr %BranchBody to ptr 471 %TmpAcc22 = bitcast ptr addrspace(4) %this1 to ptr addrspace(4) 472 %BarrierAcc = getelementptr inbounds %class.anon.8, ptr %BranchBody, i32 0, i32 1 473 %BarrierAcc3 = getelementptr inbounds nuw %class.anon, ptr addrspace(4) %this1, i32 0, i32 1 474 %0 = getelementptr inbounds i8, ptr addrspace(4) %BranchBody.ascast, i64 64 475 %BroadcastAcc = getelementptr inbounds %class.anon.8, ptr %BranchBody, i32 0, i32 3 476 %BroadcastAcc4 = getelementptr inbounds nuw %class.anon, ptr addrspace(4) %this1, i32 0, i32 2 477 %AnyAcc = getelementptr inbounds %class.anon.8, ptr %BranchBody, i32 0, i32 4 478 %AnyAcc5 = getelementptr inbounds nuw %class.anon, ptr addrspace(4) %this1, i32 0, i32 3 479 %AllAcc = getelementptr inbounds %class.anon.8, ptr %BranchBody, i32 0, i32 5 480 %AllAcc6 = getelementptr inbounds nuw %class.anon, ptr addrspace(4) %this1, i32 0, i32 4 481 %NoneAcc = getelementptr inbounds %class.anon.8, ptr %BranchBody, i32 0, i32 6 482 %NoneAcc7 = getelementptr inbounds nuw %class.anon, ptr addrspace(4) %this1, i32 0, i32 5 483 %ReduceAcc = getelementptr inbounds %class.anon.8, ptr %BranchBody, i32 0, i32 7 484 %ReduceAcc8 = getelementptr inbounds nuw %class.anon, ptr addrspace(4) %this1, i32 0, i32 6 485 %ExScanAcc = getelementptr inbounds %class.anon.8, ptr %BranchBody, i32 0, i32 8 486 %ExScanAcc9 = getelementptr inbounds nuw %class.anon, ptr addrspace(4) %this1, i32 0, i32 7 487 %IncScanAcc = getelementptr inbounds %class.anon.8, ptr %BranchBody, i32 0, i32 9 488 %IncScanAcc10 = getelementptr inbounds nuw %class.anon, ptr addrspace(4) %this1, i32 0, i32 8 489 %ShiftLeftAcc = getelementptr inbounds %class.anon.8, ptr %BranchBody, i32 0, i32 10 490 %ShiftLeftAcc11 = getelementptr inbounds nuw %class.anon, ptr addrspace(4) %this1, i32 0, i32 9 491 %ShiftRightAcc = getelementptr inbounds %class.anon.8, ptr %BranchBody, i32 0, i32 11 492 %ShiftRightAcc12 = getelementptr inbounds nuw %class.anon, ptr addrspace(4) %this1, i32 0, i32 10 493 %SelectAcc = getelementptr inbounds %class.anon.8, ptr %BranchBody, i32 0, i32 12 494 %SelectAcc13 = getelementptr inbounds nuw %class.anon, ptr addrspace(4) %this1, i32 0, i32 11 495 %PermuteXorAcc = getelementptr inbounds %class.anon.8, ptr %BranchBody, i32 0, i32 13 496 %PermuteXorAcc14 = getelementptr inbounds nuw %class.anon, ptr addrspace(4) %this1, i32 0, i32 12 497 store i32 4, ptr %ref.tmp15, align 4 498 call spir_func void @Foo42(ptr addrspace(4) dead_on_unwind writable sret(%"range") %ref.tmp.ascast, ptr addrspace(4) %WI.ascast, ptr addrspace(4) align 4 %ref.tmp15.ascast) 499 %retval.ascast.i69 = addrspacecast ptr %retval.i66 to ptr addrspace(4) 500 store ptr addrspace(4) %ref.tmp.ascast, ptr %this.addr.i67 501 %this1.i72 = load ptr addrspace(4), ptr %this.addr.i67 502 %1 = load i64, ptr addrspace(4) %this1.i72 503 store i64 %1, ptr %Result.i68 504 %2 = load i64, ptr %Result.i68 505 %tobool = icmp ne i64 %2, 0 506 br i1 %tobool, label %if.then, label %if.else 507 508if.else: ; preds = %entry 509 store i32 24, ptr %ref.tmp20, align 4 510 call spir_func void @Foo42(ptr addrspace(4) dead_on_unwind writable sret(%"range") %ref.tmp19.ascast, ptr addrspace(4) %WI.ascast, ptr addrspace(4) align 4 %ref.tmp20.ascast) 511 %retval.ascast.i53 = addrspacecast ptr %retval.i50 to ptr addrspace(4) 512 store ptr addrspace(4) %ref.tmp19.ascast, ptr %this.addr.i51 513 %this1.i56 = load ptr addrspace(4), ptr %this.addr.i51 514 %3 = load i64, ptr addrspace(4) %this1.i56 515 store i64 %3, ptr %Result.i52 516 %4 = load i64, ptr %Result.i52 517 %tobool22 = icmp ne i64 %4, 0 518 br i1 %tobool22, label %if.then23, label %if.else32 519 520if.else32: ; preds = %if.else 521 call spir_func void @Foo43(ptr addrspace(4) dead_on_unwind writable sret(%"tangle_group") %Tangle33.ascast, ptr byval(%"nd_item") align 1 %agg.tmp34) 522 store i64 24, ptr %TangleLeader35 523 store i64 8, ptr %TangleSize36 524 %retval.ascast.i = addrspacecast ptr %retval.i to ptr addrspace(4) 525 store ptr addrspace(4) %WI.ascast, ptr %this.addr.i 526 %this1.i = load ptr addrspace(4), ptr %this.addr.i 527 %5 = load i64, ptr addrspace(4) %this1.i 528 store i64 %5, ptr %Result.i 529 %6 = load i64, ptr %Result.i 530 %7 = load i64, ptr %TangleLeader35 531 %8 = load i64, ptr %TangleSize36 532 call spir_func void @Foo69(ptr addrspace(4) %BranchBody.ascast, i64 %6, ptr byval(%"tangle_group") %agg.tmp39, i64 %7, i64 %8, ptr byval(%"nd_item") align 1 %agg.tmp40) 533 br label %if.end41 534 535if.then23: ; preds = %if.else 536 call spir_func void @Foo43(ptr addrspace(4) dead_on_unwind writable sret(%"tangle_group") %Tangle24.ascast, ptr byval(%"nd_item") align 1 %agg.tmp25) 537 store i64 4, ptr %TangleLeader26 538 store i64 20, ptr %TangleSize27 539 %retval.ascast.i45 = addrspacecast ptr %retval.i42 to ptr addrspace(4) 540 store ptr addrspace(4) %WI.ascast, ptr %this.addr.i43 541 %this1.i48 = load ptr addrspace(4), ptr %this.addr.i43 542 %9 = load i64, ptr addrspace(4) %this1.i48 543 store i64 %9, ptr %Result.i44 544 %10 = load i64, ptr %Result.i44 545 %11 = load i64, ptr %TangleLeader26 546 %12 = load i64, ptr %TangleSize27 547 call spir_func void @Foo68(ptr addrspace(4) %BranchBody.ascast, i64 %10, ptr byval(%"tangle_group") %agg.tmp30, i64 %11, i64 %12, ptr byval(%"nd_item") align 1 %agg.tmp31) 548 br label %if.end41 549 550if.then: ; preds = %entry 551 call spir_func void @Foo43(ptr addrspace(4) dead_on_unwind writable sret(%"tangle_group") %Tangle.ascast, ptr byval(%"nd_item") align 1 %agg.tmp) 552 store i64 0, ptr %TangleLeader 553 store i64 4, ptr %TangleSize 554 %retval.ascast.i61 = addrspacecast ptr %retval.i58 to ptr addrspace(4) 555 store ptr addrspace(4) %WI.ascast, ptr %this.addr.i59 556 %this1.i64 = load ptr addrspace(4), ptr %this.addr.i59 557 %13 = load i64, ptr addrspace(4) %this1.i64 558 store i64 %13, ptr %Result.i60 559 %14 = load i64, ptr %Result.i60 560 %15 = load i64, ptr %TangleLeader 561 %16 = load i64, ptr %TangleSize 562 %TangleSize.addr.ascast.i = addrspacecast ptr %TangleSize.addr.i to ptr addrspace(4) 563 %agg.tmp.ascast.i = addrspacecast ptr %agg.tmp.i to ptr addrspace(4) 564 %agg.tmp5.ascast.i = addrspacecast ptr %agg.tmp5.i to ptr addrspace(4) 565 %agg.tmp8.ascast.i = addrspacecast ptr %agg.tmp8.i to ptr addrspace(4) 566 %agg.tmp15.ascast.i = addrspacecast ptr %agg.tmp15.i to ptr addrspace(4) 567 %agg.tmp24.ascast.i = addrspacecast ptr %agg.tmp24.i to ptr addrspace(4) 568 %agg.tmp35.ascast.i = addrspacecast ptr %agg.tmp35.i to ptr addrspace(4) 569 %agg.tmp46.ascast.i = addrspacecast ptr %agg.tmp46.i to ptr addrspace(4) 570 %agg.tmp50.ascast.i = addrspacecast ptr %agg.tmp50.i to ptr addrspace(4) 571 %agg.tmp54.ascast.i = addrspacecast ptr %agg.tmp54.i to ptr addrspace(4) 572 %agg.tmp58.ascast.i = addrspacecast ptr %agg.tmp58.i to ptr addrspace(4) 573 %agg.tmp61.ascast.i = addrspacecast ptr %agg.tmp61.i to ptr addrspace(4) 574 %agg.tmp65.ascast.i = addrspacecast ptr %agg.tmp65.i to ptr addrspace(4) 575 %agg.tmp69.ascast.i = addrspacecast ptr %agg.tmp69.i to ptr addrspace(4) 576 %agg.tmp79.ascast.i = addrspacecast ptr %agg.tmp79.i to ptr addrspace(4) 577 %agg.tmp88.ascast.i = addrspacecast ptr %agg.tmp88.i to ptr addrspace(4) 578 %agg.tmp92.ascast.i = addrspacecast ptr %agg.tmp92.i to ptr addrspace(4) 579 %ref.tmp.ascast.i = addrspacecast ptr %ref.tmp.i to ptr addrspace(4) 580 %ref.tmp93.ascast.i = addrspacecast ptr %ref.tmp93.i to ptr addrspace(4) 581 %ref.tmp94.ascast.i = addrspacecast ptr %ref.tmp94.i to ptr addrspace(4) 582 %agg.tmp100.ascast.i = addrspacecast ptr %agg.tmp100.i to ptr addrspace(4) 583 %agg.tmp106.ascast.i = addrspacecast ptr %agg.tmp106.i to ptr addrspace(4) 584 store ptr addrspace(4) %BranchBody.ascast, ptr %this.addr.i76 585 store i64 %14, ptr %WI.addr.i 586 %Tangle.ascast.i = addrspacecast ptr %agg.tmp17.ascast.ascast74 to ptr addrspace(4) 587 store i64 %15, ptr %TangleLeader.addr.i 588 store i64 %16, ptr %TangleSize.addr.i 589 %IsMember.ascast.i = addrspacecast ptr %agg.tmp18.ascast.ascast75 to ptr addrspace(4) 590 %this1.i78 = load ptr addrspace(4), ptr %this.addr.i76 591 %17 = load i64, ptr %WI.addr.i 592 call spir_func void @Foo46(ptr addrspace(4) %agg.tmp.ascast.i, i64 %17) 593 %call.i = call spir_func ptr addrspace(4) @Foo70(ptr addrspace(4) %this1.i78, ptr byval(%"range") %agg.tmp.i) 594 store i64 1, ptr addrspace(4) %call.i 595 call spir_func void @Foo75(ptr byval(%"tangle_group") %agg.tmp2.i, i32 1) 596 store i64 0, ptr %Visible.i 597 store i64 0, ptr %Other.i 598 br label %for.cond.i 599 600for.cond.i: ; preds = %if.end.i, %if.then 601 %18 = load i64, ptr %Other.i 602 %cmp.i79 = icmp ult i64 %18, 32 603 br i1 %cmp.i79, label %for.body.i, label %for.cond.cleanup.i 604 605for.cond.cleanup.i: ; preds = %for.cond.i 606 %19 = load i64, ptr %Visible.i 607 %20 = load i64, ptr %TangleSize.addr.i 608 %cmp7.i = icmp eq i64 %19, %20 609 %BarrierAcc.i = getelementptr inbounds nuw %class.anon.8, ptr addrspace(4) %this1.i78, i32 0, i32 1 610 %21 = load i64, ptr %WI.addr.i 611 call spir_func void @Foo46(ptr addrspace(4) %agg.tmp8.ascast.i, i64 %21) 612 %call9.i = call spir_func align 1 ptr addrspace(4) @Foo54(ptr addrspace(4) %BarrierAcc.i, ptr byval(%"range") %agg.tmp8.i) 613 %storedv.i = zext i1 %cmp7.i to i8 614 store i8 %storedv.i, ptr addrspace(4) %call9.i, align 1 615 %22 = getelementptr inbounds i8, ptr addrspace(4) %this1.i78, i64 64 616 %call10.i = call spir_func i32 @Foo76(ptr addrspace(4) align 1 %22) 617 store i32 %call10.i, ptr %OriginalLID.i, align 4 618 %call11.i = call spir_func i32 @Foo90(ptr addrspace(4) %Tangle.ascast.i) 619 store i32 %call11.i, ptr %LID.i, align 4 620 %23 = load i32, ptr %OriginalLID.i, align 4 621 %call13.i = call spir_func i32 @Foo91(ptr byval(%"tangle_group") %agg.tmp12.i, i32 %23, i32 0) 622 store i32 %call13.i, ptr %BroadcastResult.i, align 4 623 %24 = load i32, ptr %BroadcastResult.i, align 4 624 %conv.i = zext i32 %24 to i64 625 %25 = load i64, ptr %TangleLeader.addr.i 626 %cmp14.i = icmp eq i64 %conv.i, %25 627 %BroadcastAcc.i = getelementptr inbounds nuw %class.anon.8, ptr addrspace(4) %this1.i78, i32 0, i32 3 628 %26 = load i64, ptr %WI.addr.i 629 call spir_func void @Foo46(ptr addrspace(4) %agg.tmp15.ascast.i, i64 %26) 630 %call16.i = call spir_func align 1 ptr addrspace(4) @Foo54(ptr addrspace(4) %BroadcastAcc.i, ptr byval(%"range") %agg.tmp15.i) 631 %storedv17.i = zext i1 %cmp14.i to i8 632 store i8 %storedv17.i, ptr addrspace(4) %call16.i, align 1 633 %27 = load i32, ptr %LID.i, align 4 634 %cmp19.i = icmp eq i32 %27, 0 635 %call20.i = call spir_func zeroext i1 @Foo92(ptr byval(%"tangle_group") %agg.tmp18.i, i1 zeroext %cmp19.i) 636 %storedv21.i = zext i1 %call20.i to i8 637 store i8 %storedv21.i, ptr %AnyResult.i, align 1 638 %28 = load i8, ptr %AnyResult.i, align 1 639 %loadedv.i = trunc i8 %28 to i1 640 %conv22.i = zext i1 %loadedv.i to i32 641 %AnyAcc.i = getelementptr inbounds nuw %class.anon.8, ptr addrspace(4) %this1.i78, i32 0, i32 4 642 %29 = load i64, ptr %WI.addr.i 643 call spir_func void @Foo46(ptr addrspace(4) %agg.tmp24.ascast.i, i64 %29) 644 %call25.i = call spir_func align 1 ptr addrspace(4) @Foo54(ptr addrspace(4) %AnyAcc.i, ptr byval(%"range") %agg.tmp24.i) 645 %storedv26.i = zext i1 %loadedv.i to i8 646 store i8 %storedv26.i, ptr addrspace(4) %call25.i, align 1 647 %30 = load i32, ptr %LID.i, align 4 648 %conv28.i = zext i32 %30 to i64 649 %31 = load i64, ptr %TangleSize.addr.i 650 %cmp29.i = icmp ult i64 %conv28.i, %31 651 %call30.i = call spir_func zeroext i1 @Foo67(ptr byval(%"tangle_group") %agg.tmp27.i, i1 zeroext %cmp29.i) 652 %storedv31.i = zext i1 %call30.i to i8 653 store i8 %storedv31.i, ptr %AllResult.i, align 1 654 %32 = load i8, ptr %AllResult.i, align 1 655 %loadedv32.i = trunc i8 %32 to i1 656 %conv33.i = zext i1 %loadedv32.i to i32 657 %AllAcc.i = getelementptr inbounds nuw %class.anon.8, ptr addrspace(4) %this1.i78, i32 0, i32 5 658 %33 = load i64, ptr %WI.addr.i 659 call spir_func void @Foo46(ptr addrspace(4) %agg.tmp35.ascast.i, i64 %33) 660 %call36.i = call spir_func align 1 ptr addrspace(4) @Foo54(ptr addrspace(4) %AllAcc.i, ptr byval(%"range") %agg.tmp35.i) 661 %storedv37.i = zext i1 %loadedv32.i to i8 662 store i8 %storedv37.i, ptr addrspace(4) %call36.i, align 1 663 %34 = load i32, ptr %LID.i, align 4 664 %conv39.i = zext i32 %34 to i64 665 %35 = load i64, ptr %TangleSize.addr.i 666 %cmp40.i = icmp uge i64 %conv39.i, %35 667 %call41.i = call spir_func zeroext i1 @Foo65(ptr byval(%"tangle_group") %agg.tmp38.i, i1 zeroext %cmp40.i) 668 %storedv42.i = zext i1 %call41.i to i8 669 store i8 %storedv42.i, ptr %NoneResult.i, align 1 670 %36 = load i8, ptr %NoneResult.i, align 1 671 %loadedv43.i = trunc i8 %36 to i1 672 %conv44.i = zext i1 %loadedv43.i to i32 673 %NoneAcc.i = getelementptr inbounds nuw %class.anon.8, ptr addrspace(4) %this1.i78, i32 0, i32 6 674 %37 = load i64, ptr %WI.addr.i 675 call spir_func void @Foo46(ptr addrspace(4) %agg.tmp46.ascast.i, i64 %37) 676 %call47.i = call spir_func align 1 ptr addrspace(4) @Foo54(ptr addrspace(4) %NoneAcc.i, ptr byval(%"range") %agg.tmp46.i) 677 %storedv48.i = zext i1 %loadedv43.i to i8 678 store i8 %storedv48.i, ptr addrspace(4) %call47.i, align 1 679 %call51.i = call spir_func i32 @Foo64(ptr byval(%"tangle_group") %agg.tmp49.i, i32 1, ptr byval(%"nd_item") align 1 %agg.tmp50.i) 680 store i32 %call51.i, ptr %ReduceResult.i, align 4 681 %38 = load i32, ptr %ReduceResult.i, align 4 682 %conv52.i = zext i32 %38 to i64 683 %39 = load i64, ptr %TangleSize.addr.i 684 %cmp53.i = icmp eq i64 %conv52.i, %39 685 %ReduceAcc.i = getelementptr inbounds nuw %class.anon.8, ptr addrspace(4) %this1.i78, i32 0, i32 7 686 %40 = load i64, ptr %WI.addr.i 687 call spir_func void @Foo46(ptr addrspace(4) %agg.tmp54.ascast.i, i64 %40) 688 %call55.i = call spir_func align 1 ptr addrspace(4) @Foo54(ptr addrspace(4) %ReduceAcc.i, ptr byval(%"range") %agg.tmp54.i) 689 %storedv56.i = zext i1 %cmp53.i to i8 690 store i8 %storedv56.i, ptr addrspace(4) %call55.i, align 1 691 %call59.i = call spir_func i32 @Foo63(ptr byval(%"tangle_group") %agg.tmp57.i, i32 1, ptr byval(%"nd_item") align 1 %agg.tmp58.i) 692 store i32 %call59.i, ptr %ExScanResult.i, align 4 693 %41 = load i32, ptr %ExScanResult.i, align 4 694 %42 = load i32, ptr %LID.i, align 4 695 %cmp60.i = icmp eq i32 %41, %42 696 %ExScanAcc.i = getelementptr inbounds nuw %class.anon.8, ptr addrspace(4) %this1.i78, i32 0, i32 8 697 %43 = load i64, ptr %WI.addr.i 698 call spir_func void @Foo46(ptr addrspace(4) %agg.tmp61.ascast.i, i64 %43) 699 %call62.i = call spir_func align 1 ptr addrspace(4) @Foo54(ptr addrspace(4) %ExScanAcc.i, ptr byval(%"range") %agg.tmp61.i) 700 %storedv63.i = zext i1 %cmp60.i to i8 701 store i8 %storedv63.i, ptr addrspace(4) %call62.i, align 1 702 %call66.i = call spir_func i32 @Foo62(ptr byval(%"tangle_group") %agg.tmp64.i, i32 1, ptr byval(%"nd_item") align 1 %agg.tmp65.i) 703 store i32 %call66.i, ptr %IncScanResult.i, align 4 704 %44 = load i32, ptr %IncScanResult.i, align 4 705 %45 = load i32, ptr %LID.i, align 4 706 %add67.i = add i32 %45, 1 707 %cmp68.i = icmp eq i32 %44, %add67.i 708 %IncScanAcc.i = getelementptr inbounds nuw %class.anon.8, ptr addrspace(4) %this1.i78, i32 0, i32 9 709 %46 = load i64, ptr %WI.addr.i 710 call spir_func void @Foo46(ptr addrspace(4) %agg.tmp69.ascast.i, i64 %46) 711 %call70.i = call spir_func align 1 ptr addrspace(4) @Foo54(ptr addrspace(4) %IncScanAcc.i, ptr byval(%"range") %agg.tmp69.i) 712 %storedv71.i = zext i1 %cmp68.i to i8 713 store i8 %storedv71.i, ptr addrspace(4) %call70.i, align 1 714 %47 = load i32, ptr %LID.i, align 4 715 %call73.i = call spir_func i32 @Foo73(ptr byval(%"tangle_group") %agg.tmp72.i, i32 %47, i32 2) 716 store i32 %call73.i, ptr %ShiftLeftResult.i, align 4 717 %48 = load i32, ptr %LID.i, align 4 718 %add74.i = add i32 %48, 2 719 %conv75.i = zext i32 %add74.i to i64 720 %49 = load i64, ptr %TangleSize.addr.i 721 %cmp76.i = icmp uge i64 %conv75.i, %49 722 br i1 %cmp76.i, label %lor.end.i, label %lor.rhs.i 723 724lor.rhs.i: ; preds = %for.cond.cleanup.i 725 %50 = load i32, ptr %ShiftLeftResult.i, align 4 726 %51 = load i32, ptr %LID.i, align 4 727 %add77.i = add i32 %51, 2 728 %cmp78.i = icmp eq i32 %50, %add77.i 729 br label %lor.end.i 730 731lor.end.i: ; preds = %lor.rhs.i, %for.cond.cleanup.i 732 %52 = phi i1 [ true, %for.cond.cleanup.i ], [ %cmp78.i, %lor.rhs.i ] 733 %ShiftLeftAcc.i = getelementptr inbounds nuw %class.anon.8, ptr addrspace(4) %this1.i78, i32 0, i32 10 734 %53 = load i64, ptr %WI.addr.i 735 call spir_func void @Foo46(ptr addrspace(4) %agg.tmp79.ascast.i, i64 %53) 736 %call80.i = call spir_func align 1 ptr addrspace(4) @Foo54(ptr addrspace(4) %ShiftLeftAcc.i, ptr byval(%"range") %agg.tmp79.i) 737 %storedv81.i = zext i1 %52 to i8 738 store i8 %storedv81.i, ptr addrspace(4) %call80.i, align 1 739 %54 = load i32, ptr %LID.i, align 4 740 %call83.i = call spir_func i32 @Foo53(ptr byval(%"tangle_group") %agg.tmp82.i, i32 %54, i32 2) 741 store i32 %call83.i, ptr %ShiftRightResult.i, align 4 742 %55 = load i32, ptr %LID.i, align 4 743 %cmp84.i = icmp ult i32 %55, 2 744 br i1 %cmp84.i, label %l1.exit, label %lor.rhs85.i 745 746lor.rhs85.i: ; preds = %lor.end.i 747 %56 = load i32, ptr %ShiftRightResult.i, align 4 748 %57 = load i32, ptr %LID.i, align 4 749 %sub.i = sub i32 %57, 2 750 %cmp86.i = icmp eq i32 %56, %sub.i 751 br label %l1.exit 752 753l1.exit: ; preds = %lor.rhs85.i, %lor.end.i 754 %58 = phi i1 [ true, %lor.end.i ], [ %cmp86.i, %lor.rhs85.i ] 755 %ShiftRightAcc.i = getelementptr inbounds nuw %class.anon.8, ptr addrspace(4) %this1.i78, i32 0, i32 11 756 %59 = load i64, ptr %WI.addr.i 757 call spir_func void @Foo46(ptr addrspace(4) %agg.tmp88.ascast.i, i64 %59) 758 %call89.i = call spir_func align 1 ptr addrspace(4) @Foo54(ptr addrspace(4) %ShiftRightAcc.i, ptr byval(%"range") %agg.tmp88.i) 759 %storedv90.i = zext i1 %58 to i8 760 store i8 %storedv90.i, ptr addrspace(4) %call89.i, align 1 761 %60 = load i32, ptr %LID.i, align 4 762 call spir_func void @Foo51(ptr addrspace(4) dead_on_unwind writable sret(%"range") %ref.tmp93.ascast.i, ptr addrspace(4) %Tangle.ascast.i) 763 store i32 2, ptr %ref.tmp94.i, align 4 764 call spir_func void @Foo55(ptr addrspace(4) dead_on_unwind writable sret(%"range") %ref.tmp.ascast.i, ptr addrspace(4) %ref.tmp93.ascast.i, ptr addrspace(4) align 4 %ref.tmp94.ascast.i) 765 call spir_func void @Foo56(ptr addrspace(4) dead_on_unwind writable sret(%"range") %agg.tmp92.ascast.i, ptr addrspace(4) %ref.tmp.ascast.i, ptr addrspace(4) %TangleSize.addr.ascast.i) 766 %call95.i = call spir_func i32 @Foo57(ptr byval(%"tangle_group") %agg.tmp91.i, i32 %60, ptr byval(%"range") %agg.tmp92.i) 767 store i32 %call95.i, ptr %SelectResult.i, align 4 768 %61 = load i32, ptr %SelectResult.i, align 4 769 %conv96.i = zext i32 %61 to i64 770 %62 = load i32, ptr %LID.i, align 4 771 %add97.i = add i32 %62, 2 772 %conv98.i = zext i32 %add97.i to i64 773 %63 = load i64, ptr %TangleSize.addr.i 774 %rem.i = urem i64 %conv98.i, %63 775 %cmp99.i = icmp eq i64 %conv96.i, %rem.i 776 %SelectAcc.i = getelementptr inbounds nuw %class.anon.8, ptr addrspace(4) %this1.i78, i32 0, i32 12 777 %64 = load i64, ptr %WI.addr.i 778 call spir_func void @Foo46(ptr addrspace(4) %agg.tmp100.ascast.i, i64 %64) 779 %call101.i = call spir_func align 1 ptr addrspace(4) @Foo54(ptr addrspace(4) %SelectAcc.i, ptr byval(%"range") %agg.tmp100.i) 780 %storedv102.i = zext i1 %cmp99.i to i8 781 store i8 %storedv102.i, ptr addrspace(4) %call101.i, align 1 782 %65 = load i32, ptr %LID.i, align 4 783 %call104.i = call spir_func i32 @Foo58(ptr byval(%"tangle_group") %agg.tmp103.i, i32 %65, i32 2) 784 store i32 %call104.i, ptr %PermuteXorResult.i, align 4 785 %66 = load i32, ptr %PermuteXorResult.i, align 4 786 %67 = load i32, ptr %LID.i, align 4 787 %xor.i = xor i32 %67, 2 788 %cmp105.i = icmp eq i32 %66, %xor.i 789 %PermuteXorAcc.i = getelementptr inbounds nuw %class.anon.8, ptr addrspace(4) %this1.i78, i32 0, i32 13 790 %68 = load i64, ptr %WI.addr.i 791 call spir_func void @Foo46(ptr addrspace(4) %agg.tmp106.ascast.i, i64 %68) 792 %call107.i = call spir_func align 1 ptr addrspace(4) @Foo54(ptr addrspace(4) %PermuteXorAcc.i, ptr byval(%"range") %agg.tmp106.i) 793 %storedv108.i = zext i1 %cmp105.i to i8 794 store i8 %storedv108.i, ptr addrspace(4) %call107.i, align 1 795 br label %if.end41 796 797if.end41: ; preds = %if.then23, %if.else32, %l1.exit 798 ret void 799 800for.body.i: ; preds = %for.cond.i 801 %69 = load i64, ptr %Other.i 802 %call3.i = call spir_func zeroext i1 @Foo71(ptr addrspace(4) align 1 %IsMember.ascast.i, i64 %69) 803 br i1 %call3.i, label %if.then.i, label %if.end.i 804 805if.then.i: ; preds = %for.body.i 806 %70 = load i64, ptr %Other.i 807 call spir_func void @Foo46(ptr addrspace(4) %agg.tmp5.ascast.i, i64 %70) 808 %call6.i = call spir_func ptr addrspace(4) @Foo70(ptr addrspace(4) %this1.i78, ptr byval(%"range") %agg.tmp5.i) 809 %71 = load i64, ptr addrspace(4) %call6.i 810 %72 = load i64, ptr %Visible.i 811 %add.i = add i64 %72, %71 812 store i64 %add.i, ptr %Visible.i 813 br label %if.end.i 814 815if.end.i: ; preds = %if.then.i, %for.body.i 816 %73 = load i64, ptr %Other.i 817 %inc.i = add i64 %73, 1 818 store i64 %inc.i, ptr %Other.i 819 br label %for.cond.i 820} 821 822define internal spir_func void @Foo40(ptr addrspace(4) dead_on_unwind noalias writable sret(%"range") %agg.result, ptr addrspace(4) align 1 %this) { 823entry: 824 %this.addr = alloca ptr addrspace(4) 825 store ptr addrspace(4) %this, ptr %this.addr 826 %this1 = load ptr addrspace(4), ptr %this.addr 827 call spir_func void @Init6(ptr addrspace(4) dead_on_unwind writable sret(%"range") %agg.result) 828 ret void 829} 830 831define internal spir_func void @Foo41(ptr addrspace(4) dead_on_unwind noalias writable sret(%"nd_item") align 1 %agg.result, ptr addrspace(4) align 1 %this) { 832entry: 833 %this.addr = alloca ptr addrspace(4) 834 store ptr addrspace(4) %this, ptr %this.addr 835 %this1 = load ptr addrspace(4), ptr %this.addr 836 ret void 837} 838 839 840 841 842define internal spir_func void @Foo42(ptr addrspace(4) dead_on_unwind noalias writable sret(%"range") %agg.result, ptr addrspace(4) %lhs, ptr addrspace(4) align 4 %rhs) { 843entry: 844 %lhs.addr = alloca ptr addrspace(4) 845 %rhs.addr = alloca ptr addrspace(4) 846 %i = alloca i32, align 4 847 %cleanup.dest.slot = alloca i32, align 4 848 store ptr addrspace(4) %lhs, ptr %lhs.addr 849 store ptr addrspace(4) %rhs, ptr %rhs.addr 850 call spir_func void @Foo11(ptr addrspace(4) %agg.result) 851 store i32 0, ptr %i, align 4 852 br label %for.cond 853 854for.cond: ; preds = %for.body, %entry 855 %0 = load i32, ptr %i, align 4 856 %cmp = icmp slt i32 %0, 1 857 br i1 %cmp, label %for.body, label %for.cond.cleanup 858 859for.cond.cleanup: ; preds = %for.cond 860 ret void 861 862for.body: ; preds = %for.cond 863 %1 = load ptr addrspace(4), ptr %lhs.addr 864 %common_array1 = bitcast ptr addrspace(4) %1 to ptr addrspace(4) 865 %2 = load i32, ptr %i, align 4 866 %idxprom = sext i32 %2 to i64 867 %arrayidx = getelementptr inbounds [1 x i64], ptr addrspace(4) %common_array1, i64 0, i64 %idxprom 868 %3 = load i64, ptr addrspace(4) %arrayidx 869 %4 = load ptr addrspace(4), ptr %rhs.addr 870 %5 = load i32, ptr addrspace(4) %4, align 4 871 %conv = sext i32 %5 to i64 872 %cmp1 = icmp ult i64 %3, %conv 873 %conv2 = zext i1 %cmp1 to i64 874 %common_array32 = bitcast ptr addrspace(4) %agg.result to ptr addrspace(4) 875 %6 = load i32, ptr %i, align 4 876 %idxprom4 = sext i32 %6 to i64 877 %arrayidx5 = getelementptr inbounds [1 x i64], ptr addrspace(4) %common_array32, i64 0, i64 %idxprom4 878 store i64 %conv2, ptr addrspace(4) %arrayidx5 879 %7 = load i32, ptr %i, align 4 880 %inc = add nsw i32 %7, 1 881 store i32 %inc, ptr %i, align 4 882 br label %for.cond 883} 884 885declare void @llvm.assume(i1) 886 887 888define internal spir_func void @Foo43(ptr addrspace(4) dead_on_unwind noalias writable sret(%"tangle_group") %agg.result, ptr byval(%"nd_item") align 1 %group) { 889entry: 890 %mask = alloca %"ss_sub_group_mask" 891 %agg.tmp = alloca %"nd_item", align 1 892 %agg.tmp1 = alloca %"ss_sub_group_mask" 893 %cleanup.dest.slot = alloca i32, align 4 894 %mask.ascast = addrspacecast ptr %mask to ptr addrspace(4) 895 %group.ascast = addrspacecast ptr %group to ptr addrspace(4) 896 call spir_func void @Foo44(ptr addrspace(4) dead_on_unwind writable sret(%"ss_sub_group_mask") %mask.ascast, ptr byval(%"nd_item") align 1 %agg.tmp, i1 zeroext true) 897 call spir_func void @Foo45(ptr addrspace(4) %agg.result, ptr byval(%"ss_sub_group_mask") %agg.tmp1) 898 ret void 899} 900 901 902define internal spir_func void @Foo46(ptr addrspace(4) %this, i64 %dim0) { 903entry: 904 %this.addr = alloca ptr addrspace(4) 905 %dim0.addr = alloca i64 906 store ptr addrspace(4) %this, ptr %this.addr 907 store i64 %dim0, ptr %dim0.addr 908 %this1 = load ptr addrspace(4), ptr %this.addr 909 %0 = load i64, ptr %dim0.addr 910 call spir_func void @Foo60(ptr addrspace(4) %this1, i64 %0) 911 ret void 912} 913 914 915define internal spir_func ptr addrspace(4) @Foo70(ptr addrspace(4) %this, ptr byval(%"range") %Index) { 916entry: 917 %retval = alloca ptr addrspace(4) 918 %this.addr = alloca ptr addrspace(4) 919 %LinearIndex = alloca i64 920 %agg.tmp = alloca %"range" 921 %cleanup.dest.slot = alloca i32, align 4 922 %retval.ascast = addrspacecast ptr %retval to ptr addrspace(4) 923 store ptr addrspace(4) %this, ptr %this.addr 924 %this1 = load ptr addrspace(4), ptr %this.addr 925 %call = call spir_func i64 @Foo93(ptr addrspace(4) %this1, ptr byval(%"range") %agg.tmp) 926 store i64 %call, ptr %LinearIndex 927 %call2 = call spir_func ptr addrspace(1) @Foo94(ptr addrspace(4) %this1) 928 %0 = load i64, ptr %LinearIndex 929 %arrayidx = getelementptr inbounds nuw i64, ptr addrspace(1) %call2, i64 %0 930 %arrayidx.ascast = addrspacecast ptr addrspace(1) %arrayidx to ptr addrspace(4) 931 ret ptr addrspace(4) %arrayidx.ascast 932} 933 934 935define internal spir_func void @Foo75(ptr byval(%"tangle_group") %G, i32 %FenceScope) { 936entry: 937 %FenceScope.addr = alloca i32, align 4 938 %agg.tmp = alloca %"tangle_group" 939 store i32 %FenceScope, ptr %FenceScope.addr, align 4 940 %0 = load i32, ptr %FenceScope.addr, align 4 941 call spir_func void @Foo95(ptr byval(%"tangle_group") %agg.tmp, i32 %0, i32 5) 942 ret void 943} 944 945 946define internal spir_func align 1 ptr addrspace(4) @Foo54(ptr addrspace(4) %this, ptr byval(%"range") %Index) { 947entry: 948 %retval = alloca ptr addrspace(4) 949 %this.addr = alloca ptr addrspace(4) 950 %LinearIndex = alloca i64 951 %agg.tmp = alloca %"range" 952 %cleanup.dest.slot = alloca i32, align 4 953 %retval.ascast = addrspacecast ptr %retval to ptr addrspace(4) 954 store ptr addrspace(4) %this, ptr %this.addr 955 %this1 = load ptr addrspace(4), ptr %this.addr 956 %call = call spir_func i64 @Foo77(ptr addrspace(4) %this1, ptr byval(%"range") %agg.tmp) 957 store i64 %call, ptr %LinearIndex 958 %call2 = call spir_func ptr addrspace(1) @Foo78(ptr addrspace(4) %this1) 959 %0 = load i64, ptr %LinearIndex 960 %arrayidx = getelementptr inbounds nuw i8, ptr addrspace(1) %call2, i64 %0 961 %arrayidx.ascast = addrspacecast ptr addrspace(1) %arrayidx to ptr addrspace(4) 962 ret ptr addrspace(4) %arrayidx.ascast 963} 964 965 966define internal spir_func i32 @Foo76(ptr addrspace(4) align 1 %this) { 967entry: 968 %retval = alloca i32, align 4 969 %this.addr = alloca ptr addrspace(4) 970 %ref.tmp = alloca %"range" 971 %retval.ascast = addrspacecast ptr %retval to ptr addrspace(4) 972 %ref.tmp.ascast = addrspacecast ptr %ref.tmp to ptr addrspace(4) 973 store ptr addrspace(4) %this, ptr %this.addr 974 %this1 = load ptr addrspace(4), ptr %this.addr 975 call spir_func void @Foo96(ptr addrspace(4) dead_on_unwind writable sret(%"range") %ref.tmp.ascast, ptr addrspace(4) align 1 %this1) 976 %call = call spir_func ptr addrspace(4) @Foo16(ptr addrspace(4) %ref.tmp.ascast, i32 0) 977 %0 = load i64, ptr addrspace(4) %call 978 %conv = trunc i64 %0 to i32 979 ret i32 %conv 980} 981 982 983define internal spir_func i32 @Foo90(ptr addrspace(4) %this) { 984entry: 985 %retval = alloca i32, align 4 986 %this.addr = alloca ptr addrspace(4) 987 %ref.tmp = alloca %"range" 988 %retval.ascast = addrspacecast ptr %retval to ptr addrspace(4) 989 %ref.tmp.ascast = addrspacecast ptr %ref.tmp to ptr addrspace(4) 990 store ptr addrspace(4) %this, ptr %this.addr 991 %this1 = load ptr addrspace(4), ptr %this.addr 992 call spir_func void @Foo51(ptr addrspace(4) dead_on_unwind writable sret(%"range") %ref.tmp.ascast, ptr addrspace(4) %this1) 993 %call = call spir_func ptr addrspace(4) @Foo16(ptr addrspace(4) %ref.tmp.ascast, i32 0) 994 %0 = load i64, ptr addrspace(4) %call 995 %conv = trunc i64 %0 to i32 996 ret i32 %conv 997} 998 999 1000define internal spir_func i32 @Foo91(ptr byval(%"tangle_group") %g, i32 %x, i32 %linear_local_id) { 1001entry: 1002 %retval = alloca i32, align 4 1003 %x.addr = alloca i32, align 4 1004 %linear_local_id.addr = alloca i32, align 4 1005 %agg.tmp = alloca %"tangle_group" 1006 %agg.tmp1 = alloca %"range" 1007 %agg.tmp2 = alloca %"range" 1008 %retval.ascast = addrspacecast ptr %retval to ptr addrspace(4) 1009 %agg.tmp1.ascast = addrspacecast ptr %agg.tmp1 to ptr addrspace(4) 1010 %agg.tmp2.ascast = addrspacecast ptr %agg.tmp2 to ptr addrspace(4) 1011 %g.ascast = addrspacecast ptr %g to ptr addrspace(4) 1012 store i32 %x, ptr %x.addr, align 4 1013 store i32 %linear_local_id, ptr %linear_local_id.addr, align 4 1014 %0 = load i32, ptr %x.addr, align 4 1015 call spir_func void @Foo97(ptr addrspace(4) dead_on_unwind writable sret(%"range") %agg.tmp2.ascast, ptr addrspace(4) %g.ascast) 1016 %1 = load i32, ptr %linear_local_id.addr, align 4 1017 %conv = zext i32 %1 to i64 1018 call spir_func void @Foo98(ptr addrspace(4) dead_on_unwind writable sret(%"range") %agg.tmp1.ascast, ptr byval(%"range") %agg.tmp2, i64 %conv) 1019 %call = call spir_func i32 @Bar69(ptr byval(%"tangle_group") %agg.tmp, i32 %0, ptr byval(%"range") %agg.tmp1) 1020 ret i32 %call 1021} 1022 1023 1024define internal spir_func zeroext i1 @Foo92(ptr byval(%"tangle_group") %g, i1 zeroext %pred) { 1025entry: 1026 %retval = alloca i1, align 1 1027 %pred.addr = alloca i8, align 1 1028 %agg.tmp = alloca %"tangle_group" 1029 %retval.ascast = addrspacecast ptr %retval to ptr addrspace(4) 1030 %storedv = zext i1 %pred to i8 1031 store i8 %storedv, ptr %pred.addr, align 1 1032 %0 = load i8, ptr %pred.addr, align 1 1033 %loadedv = trunc i8 %0 to i1 1034 %call = call spir_func zeroext i1 @Bar10(ptr byval(%"tangle_group") %agg.tmp, i1 zeroext %loadedv) 1035 ret i1 %call 1036} 1037 1038 1039define internal spir_func zeroext i1 @Foo67(ptr byval(%"tangle_group") %g, i1 zeroext %pred) { 1040entry: 1041 %retval = alloca i1, align 1 1042 %pred.addr = alloca i8, align 1 1043 %agg.tmp = alloca %"tangle_group" 1044 %retval.ascast = addrspacecast ptr %retval to ptr addrspace(4) 1045 %storedv = zext i1 %pred to i8 1046 store i8 %storedv, ptr %pred.addr, align 1 1047 %0 = load i8, ptr %pred.addr, align 1 1048 %loadedv = trunc i8 %0 to i1 1049 %call = call spir_func zeroext i1 @Foo66(ptr byval(%"tangle_group") %agg.tmp, i1 zeroext %loadedv) 1050 ret i1 %call 1051} 1052 1053 1054define internal spir_func zeroext i1 @Foo65(ptr byval(%"tangle_group") %g, i1 zeroext %pred) { 1055entry: 1056 %retval = alloca i1, align 1 1057 %pred.addr = alloca i8, align 1 1058 %agg.tmp = alloca %"tangle_group" 1059 %retval.ascast = addrspacecast ptr %retval to ptr addrspace(4) 1060 %storedv = zext i1 %pred to i8 1061 store i8 %storedv, ptr %pred.addr, align 1 1062 %0 = load i8, ptr %pred.addr, align 1 1063 %loadedv = trunc i8 %0 to i1 1064 %lnot = xor i1 %loadedv, true 1065 %call = call spir_func zeroext i1 @Foo66(ptr byval(%"tangle_group") %agg.tmp, i1 zeroext %lnot) 1066 ret i1 %call 1067} 1068 1069 1070define internal spir_func i32 @Foo64(ptr byval(%"tangle_group") %g, i32 %x, ptr byval(%"nd_item") align 1 %binary_op) { 1071entry: 1072 %retval = alloca i32, align 4 1073 %x.addr = alloca i32, align 4 1074 %agg.tmp = alloca %"tangle_group" 1075 %agg.tmp1 = alloca %"nd_item", align 1 1076 %agg.tmp2 = alloca %"nd_item", align 1 1077 %retval.ascast = addrspacecast ptr %retval to ptr addrspace(4) 1078 store i32 %x, ptr %x.addr, align 4 1079 %binary_op.ascast = addrspacecast ptr %binary_op to ptr addrspace(4) 1080 %0 = load i32, ptr %x.addr, align 4 1081 %call = call spir_func i32 @Bar11(ptr byval(%"tangle_group") %agg.tmp, ptr byval(%"nd_item") align 1 %agg.tmp1, i32 %0, ptr byval(%"nd_item") align 1 %agg.tmp2) 1082 ret i32 %call 1083} 1084 1085 1086define internal spir_func i32 @Foo63(ptr byval(%"tangle_group") %g, i32 %x, ptr byval(%"nd_item") align 1 %binary_op) { 1087entry: 1088 %retval = alloca i32, align 4 1089 %x.addr = alloca i32, align 4 1090 %res = alloca i32, align 4 1091 %agg.tmp = alloca %"tangle_group" 1092 %agg.tmp1 = alloca %"nd_item", align 1 1093 %agg.tmp2 = alloca %"nd_item", align 1 1094 %cleanup.dest.slot = alloca i32, align 4 1095 %retval.ascast = addrspacecast ptr %retval to ptr addrspace(4) 1096 store i32 %x, ptr %x.addr, align 4 1097 %binary_op.ascast = addrspacecast ptr %binary_op to ptr addrspace(4) 1098 %0 = load i32, ptr %x.addr, align 4 1099 %call = call spir_func i32 @Bar12(ptr byval(%"tangle_group") %agg.tmp, ptr byval(%"nd_item") align 1 %agg.tmp1, i32 %0, ptr byval(%"nd_item") align 1 %agg.tmp2) 1100 store i32 %call, ptr %res, align 4 1101 %1 = load i32, ptr %res, align 4 1102 ret i32 %1 1103} 1104 1105 1106define internal spir_func i32 @Foo62(ptr byval(%"tangle_group") %g, i32 %x, ptr byval(%"nd_item") align 1 %binary_op) { 1107entry: 1108 %retval = alloca i32, align 4 1109 %x.addr = alloca i32, align 4 1110 %agg.tmp = alloca %"tangle_group" 1111 %agg.tmp1 = alloca %"nd_item", align 1 1112 %agg.tmp2 = alloca %"nd_item", align 1 1113 %retval.ascast = addrspacecast ptr %retval to ptr addrspace(4) 1114 store i32 %x, ptr %x.addr, align 4 1115 %binary_op.ascast = addrspacecast ptr %binary_op to ptr addrspace(4) 1116 %0 = load i32, ptr %x.addr, align 4 1117 %call = call spir_func i32 @Foo61(ptr byval(%"tangle_group") %agg.tmp, ptr byval(%"nd_item") align 1 %agg.tmp1, i32 %0, ptr byval(%"nd_item") align 1 %agg.tmp2) 1118 ret i32 %call 1119} 1120 1121 1122define internal spir_func i32 @Foo73(ptr byval(%"tangle_group") %g, i32 %x, i32 %delta) { 1123entry: 1124 %retval = alloca i32, align 4 1125 %x.addr = alloca i32, align 4 1126 %delta.addr = alloca i32, align 4 1127 %agg.tmp = alloca %"tangle_group" 1128 %retval.ascast = addrspacecast ptr %retval to ptr addrspace(4) 1129 store i32 %x, ptr %x.addr, align 4 1130 store i32 %delta, ptr %delta.addr, align 4 1131 %0 = load i32, ptr %x.addr, align 4 1132 %1 = load i32, ptr %delta.addr, align 4 1133 %call = call spir_func i32 @Foo72(ptr byval(%"tangle_group") %agg.tmp, i32 %0, i32 %1) 1134 ret i32 %call 1135} 1136 1137 1138define internal spir_func zeroext i1 @Foo71(ptr addrspace(4) align 1 %this, i64 %Other) { 1139entry: 1140 %retval = alloca i1, align 1 1141 %this.addr = alloca ptr addrspace(4) 1142 %Other.addr = alloca i64 1143 %retval.ascast = addrspacecast ptr %retval to ptr addrspace(4) 1144 store ptr addrspace(4) %this, ptr %this.addr 1145 store i64 %Other, ptr %Other.addr 1146 %this1 = load ptr addrspace(4), ptr %this.addr 1147 %0 = load i64, ptr %Other.addr 1148 %cmp = icmp ult i64 %0, 4 1149 ret i1 %cmp 1150} 1151 1152 1153define internal spir_func i32 @Foo53(ptr byval(%"tangle_group") %g, i32 %x, i32 %delta) { 1154entry: 1155 %retval = alloca i32, align 4 1156 %x.addr = alloca i32, align 4 1157 %delta.addr = alloca i32, align 4 1158 %agg.tmp = alloca %"tangle_group" 1159 %retval.ascast = addrspacecast ptr %retval to ptr addrspace(4) 1160 store i32 %x, ptr %x.addr, align 4 1161 store i32 %delta, ptr %delta.addr, align 4 1162 %0 = load i32, ptr %x.addr, align 4 1163 %1 = load i32, ptr %delta.addr, align 4 1164 %call = call spir_func i32 @Foo52(ptr byval(%"tangle_group") %agg.tmp, i32 %0, i32 %1) 1165 ret i32 %call 1166} 1167 1168 1169define internal spir_func void @Foo51(ptr addrspace(4) dead_on_unwind noalias writable sret(%"range") %agg.result, ptr addrspace(4) %this) { 1170entry: 1171 %this.addr = alloca ptr addrspace(4) 1172 %agg.tmp = alloca %"ss_sub_group_mask" 1173 store ptr addrspace(4) %this, ptr %this.addr 1174 %this1 = load ptr addrspace(4), ptr %this.addr 1175 %Mask1 = bitcast ptr addrspace(4) %this1 to ptr addrspace(4) 1176 %call = call spir_func i32 @Foo47(ptr byval(%"ss_sub_group_mask") %agg.tmp) 1177 %conv = zext i32 %call to i64 1178 call spir_func void @Foo46(ptr addrspace(4) %agg.result, i64 %conv) 1179 ret void 1180} 1181 1182 1183define internal spir_func void @Foo55(ptr addrspace(4) dead_on_unwind noalias writable sret(%"range") %agg.result, ptr addrspace(4) %lhs, ptr addrspace(4) align 4 %rhs) { 1184entry: 1185 %lhs.addr = alloca ptr addrspace(4) 1186 %rhs.addr = alloca ptr addrspace(4) 1187 %i = alloca i32, align 4 1188 %cleanup.dest.slot = alloca i32, align 4 1189 store ptr addrspace(4) %lhs, ptr %lhs.addr 1190 store ptr addrspace(4) %rhs, ptr %rhs.addr 1191 call spir_func void @Foo11(ptr addrspace(4) %agg.result) 1192 store i32 0, ptr %i, align 4 1193 br label %for.cond 1194 1195for.cond: ; preds = %for.body, %entry 1196 %0 = load i32, ptr %i, align 4 1197 %cmp = icmp slt i32 %0, 1 1198 br i1 %cmp, label %for.body, label %for.cond.cleanup 1199 1200for.cond.cleanup: ; preds = %for.cond 1201 ret void 1202 1203for.body: ; preds = %for.cond 1204 %1 = load ptr addrspace(4), ptr %lhs.addr 1205 %common_array2 = bitcast ptr addrspace(4) %1 to ptr addrspace(4) 1206 %2 = load i32, ptr %i, align 4 1207 %idxprom = sext i32 %2 to i64 1208 %arrayidx = getelementptr inbounds [1 x i64], ptr addrspace(4) %common_array2, i64 0, i64 %idxprom 1209 %3 = load i64, ptr addrspace(4) %arrayidx 1210 %4 = load ptr addrspace(4), ptr %rhs.addr 1211 %5 = load i32, ptr addrspace(4) %4, align 4 1212 %conv = sext i32 %5 to i64 1213 %add = add i64 %3, %conv 1214 %common_array13 = bitcast ptr addrspace(4) %agg.result to ptr addrspace(4) 1215 %6 = load i32, ptr %i, align 4 1216 %idxprom2 = sext i32 %6 to i64 1217 %arrayidx3 = getelementptr inbounds [1 x i64], ptr addrspace(4) %common_array13, i64 0, i64 %idxprom2 1218 store i64 %add, ptr addrspace(4) %arrayidx3 1219 %7 = load i32, ptr %i, align 4 1220 %inc = add nsw i32 %7, 1 1221 store i32 %inc, ptr %i, align 4 1222 br label %for.cond 1223} 1224 1225 1226define internal spir_func void @Foo56(ptr addrspace(4) dead_on_unwind noalias writable sret(%"range") %agg.result, ptr addrspace(4) %lhs, ptr addrspace(4) %rhs) { 1227entry: 1228 %lhs.addr = alloca ptr addrspace(4) 1229 %rhs.addr = alloca ptr addrspace(4) 1230 %i = alloca i32, align 4 1231 %cleanup.dest.slot = alloca i32, align 4 1232 store ptr addrspace(4) %lhs, ptr %lhs.addr 1233 store ptr addrspace(4) %rhs, ptr %rhs.addr 1234 call spir_func void @Foo11(ptr addrspace(4) %agg.result) 1235 store i32 0, ptr %i, align 4 1236 br label %for.cond 1237 1238for.cond: ; preds = %for.body, %entry 1239 %0 = load i32, ptr %i, align 4 1240 %cmp = icmp slt i32 %0, 1 1241 br i1 %cmp, label %for.body, label %for.cond.cleanup 1242 1243for.cond.cleanup: ; preds = %for.cond 1244 ret void 1245 1246for.body: ; preds = %for.cond 1247 %1 = load ptr addrspace(4), ptr %lhs.addr 1248 %common_array2 = bitcast ptr addrspace(4) %1 to ptr addrspace(4) 1249 %2 = load i32, ptr %i, align 4 1250 %idxprom = sext i32 %2 to i64 1251 %arrayidx = getelementptr inbounds [1 x i64], ptr addrspace(4) %common_array2, i64 0, i64 %idxprom 1252 %3 = load i64, ptr addrspace(4) %arrayidx 1253 %4 = load ptr addrspace(4), ptr %rhs.addr 1254 %5 = load i64, ptr addrspace(4) %4 1255 %rem = urem i64 %3, %5 1256 %common_array13 = bitcast ptr addrspace(4) %agg.result to ptr addrspace(4) 1257 %6 = load i32, ptr %i, align 4 1258 %idxprom2 = sext i32 %6 to i64 1259 %arrayidx3 = getelementptr inbounds [1 x i64], ptr addrspace(4) %common_array13, i64 0, i64 %idxprom2 1260 store i64 %rem, ptr addrspace(4) %arrayidx3 1261 %7 = load i32, ptr %i, align 4 1262 %inc = add nsw i32 %7, 1 1263 store i32 %inc, ptr %i, align 4 1264 br label %for.cond 1265} 1266 1267 1268define internal spir_func i32 @Foo57(ptr byval(%"tangle_group") %g, i32 %x, ptr byval(%"range") %local_id) { 1269entry: 1270 %retval = alloca i32, align 4 1271 %x.addr = alloca i32, align 4 1272 %agg.tmp = alloca %"tangle_group" 1273 %agg.tmp1 = alloca %"range" 1274 %retval.ascast = addrspacecast ptr %retval to ptr addrspace(4) 1275 store i32 %x, ptr %x.addr, align 4 1276 %0 = load i32, ptr %x.addr, align 4 1277 %call = call spir_func i32 @Foo59(ptr byval(%"tangle_group") %agg.tmp, i32 %0, ptr byval(%"range") %agg.tmp1) 1278 ret i32 %call 1279} 1280 1281 1282define internal spir_func i32 @Foo58(ptr byval(%"tangle_group") %g, i32 %x, i32 %mask) { 1283entry: 1284 %retval = alloca i32, align 4 1285 %x.addr = alloca i32, align 4 1286 %mask.addr = alloca i32, align 4 1287 %agg.tmp = alloca %"tangle_group" 1288 %agg.tmp1 = alloca %"range" 1289 %retval.ascast = addrspacecast ptr %retval to ptr addrspace(4) 1290 %agg.tmp1.ascast = addrspacecast ptr %agg.tmp1 to ptr addrspace(4) 1291 store i32 %x, ptr %x.addr, align 4 1292 store i32 %mask, ptr %mask.addr, align 4 1293 %0 = load i32, ptr %x.addr, align 4 1294 %1 = load i32, ptr %mask.addr, align 4 1295 %conv = zext i32 %1 to i64 1296 call spir_func void @Foo46(ptr addrspace(4) %agg.tmp1.ascast, i64 %conv) 1297 %call = call spir_func i32 @Bar13(ptr byval(%"tangle_group") %agg.tmp, i32 %0, ptr byval(%"range") %agg.tmp1) 1298 ret i32 %call 1299} 1300 1301 1302define internal spir_func void @Foo68(ptr addrspace(4) %this, i64 %WI, ptr byval(%"tangle_group") %Tangle, i64 %TangleLeader, i64 %TangleSize, ptr byval(%"nd_item") align 1 %IsMember) { 1303entry: 1304 %this.addr = alloca ptr addrspace(4) 1305 %WI.addr = alloca i64 1306 %TangleLeader.addr = alloca i64 1307 %TangleSize.addr = alloca i64 1308 %agg.tmp = alloca %"range" 1309 %agg.tmp2 = alloca %"tangle_group" 1310 %Visible = alloca i64 1311 %Other = alloca i64 1312 %cleanup.dest.slot = alloca i32, align 4 1313 %agg.tmp5 = alloca %"range" 1314 %agg.tmp8 = alloca %"range" 1315 %OriginalLID = alloca i32, align 4 1316 %LID = alloca i32, align 4 1317 %BroadcastResult = alloca i32, align 4 1318 %agg.tmp12 = alloca %"tangle_group" 1319 %agg.tmp15 = alloca %"range" 1320 %AnyResult = alloca i8, align 1 1321 %agg.tmp18 = alloca %"tangle_group" 1322 %agg.tmp24 = alloca %"range" 1323 %AllResult = alloca i8, align 1 1324 %agg.tmp27 = alloca %"tangle_group" 1325 %agg.tmp35 = alloca %"range" 1326 %NoneResult = alloca i8, align 1 1327 %agg.tmp38 = alloca %"tangle_group" 1328 %agg.tmp46 = alloca %"range" 1329 %ReduceResult = alloca i32, align 4 1330 %agg.tmp49 = alloca %"tangle_group" 1331 %agg.tmp50 = alloca %"nd_item", align 1 1332 %agg.tmp54 = alloca %"range" 1333 %ExScanResult = alloca i32, align 4 1334 %agg.tmp57 = alloca %"tangle_group" 1335 %agg.tmp58 = alloca %"nd_item", align 1 1336 %agg.tmp61 = alloca %"range" 1337 %IncScanResult = alloca i32, align 4 1338 %agg.tmp64 = alloca %"tangle_group" 1339 %agg.tmp65 = alloca %"nd_item", align 1 1340 %agg.tmp69 = alloca %"range" 1341 %ShiftLeftResult = alloca i32, align 4 1342 %agg.tmp72 = alloca %"tangle_group" 1343 %agg.tmp79 = alloca %"range" 1344 %ShiftRightResult = alloca i32, align 4 1345 %agg.tmp82 = alloca %"tangle_group" 1346 %agg.tmp88 = alloca %"range" 1347 %SelectResult = alloca i32, align 4 1348 %agg.tmp91 = alloca %"tangle_group" 1349 %agg.tmp92 = alloca %"range" 1350 %ref.tmp = alloca %"range" 1351 %ref.tmp93 = alloca %"range" 1352 %ref.tmp94 = alloca i32, align 4 1353 %agg.tmp100 = alloca %"range" 1354 %PermuteXorResult = alloca i32, align 4 1355 %agg.tmp103 = alloca %"tangle_group" 1356 %agg.tmp106 = alloca %"range" 1357 %TangleSize.addr.ascast = addrspacecast ptr %TangleSize.addr to ptr addrspace(4) 1358 %agg.tmp.ascast = addrspacecast ptr %agg.tmp to ptr addrspace(4) 1359 %agg.tmp5.ascast = addrspacecast ptr %agg.tmp5 to ptr addrspace(4) 1360 %agg.tmp8.ascast = addrspacecast ptr %agg.tmp8 to ptr addrspace(4) 1361 %agg.tmp15.ascast = addrspacecast ptr %agg.tmp15 to ptr addrspace(4) 1362 %agg.tmp24.ascast = addrspacecast ptr %agg.tmp24 to ptr addrspace(4) 1363 %agg.tmp35.ascast = addrspacecast ptr %agg.tmp35 to ptr addrspace(4) 1364 %agg.tmp46.ascast = addrspacecast ptr %agg.tmp46 to ptr addrspace(4) 1365 %agg.tmp54.ascast = addrspacecast ptr %agg.tmp54 to ptr addrspace(4) 1366 %agg.tmp61.ascast = addrspacecast ptr %agg.tmp61 to ptr addrspace(4) 1367 %agg.tmp69.ascast = addrspacecast ptr %agg.tmp69 to ptr addrspace(4) 1368 %agg.tmp79.ascast = addrspacecast ptr %agg.tmp79 to ptr addrspace(4) 1369 %agg.tmp88.ascast = addrspacecast ptr %agg.tmp88 to ptr addrspace(4) 1370 %agg.tmp92.ascast = addrspacecast ptr %agg.tmp92 to ptr addrspace(4) 1371 %ref.tmp.ascast = addrspacecast ptr %ref.tmp to ptr addrspace(4) 1372 %ref.tmp93.ascast = addrspacecast ptr %ref.tmp93 to ptr addrspace(4) 1373 %ref.tmp94.ascast = addrspacecast ptr %ref.tmp94 to ptr addrspace(4) 1374 %agg.tmp100.ascast = addrspacecast ptr %agg.tmp100 to ptr addrspace(4) 1375 %agg.tmp106.ascast = addrspacecast ptr %agg.tmp106 to ptr addrspace(4) 1376 store ptr addrspace(4) %this, ptr %this.addr 1377 store i64 %WI, ptr %WI.addr 1378 %Tangle.ascast = addrspacecast ptr %Tangle to ptr addrspace(4) 1379 store i64 %TangleLeader, ptr %TangleLeader.addr 1380 store i64 %TangleSize, ptr %TangleSize.addr 1381 %IsMember.ascast = addrspacecast ptr %IsMember to ptr addrspace(4) 1382 %this1 = load ptr addrspace(4), ptr %this.addr 1383 %TmpAcc1 = bitcast ptr addrspace(4) %this1 to ptr addrspace(4) 1384 %0 = load i64, ptr %WI.addr 1385 call spir_func void @Foo46(ptr addrspace(4) %agg.tmp.ascast, i64 %0) 1386 %call = call spir_func ptr addrspace(4) @Foo70(ptr addrspace(4) %TmpAcc1, ptr byval(%"range") %agg.tmp) 1387 store i64 1, ptr addrspace(4) %call 1388 call spir_func void @Foo75(ptr byval(%"tangle_group") %agg.tmp2, i32 1) 1389 store i64 0, ptr %Visible 1390 store i64 0, ptr %Other 1391 br label %for.cond 1392 1393for.cond: ; preds = %if.end, %entry 1394 %1 = load i64, ptr %Other 1395 %cmp = icmp ult i64 %1, 32 1396 br i1 %cmp, label %for.body, label %for.cond.cleanup 1397 1398for.cond.cleanup: ; preds = %for.cond 1399 %2 = load i64, ptr %Visible 1400 %3 = load i64, ptr %TangleSize.addr 1401 %cmp7 = icmp eq i64 %2, %3 1402 %BarrierAcc = getelementptr inbounds nuw %class.anon.8, ptr addrspace(4) %this1, i32 0, i32 1 1403 %4 = load i64, ptr %WI.addr 1404 call spir_func void @Foo46(ptr addrspace(4) %agg.tmp8.ascast, i64 %4) 1405 %call9 = call spir_func align 1 ptr addrspace(4) @Foo54(ptr addrspace(4) %BarrierAcc, ptr byval(%"range") %agg.tmp8) 1406 %storedv = zext i1 %cmp7 to i8 1407 store i8 %storedv, ptr addrspace(4) %call9, align 1 1408 %5 = getelementptr inbounds i8, ptr addrspace(4) %this1, i64 64 1409 %call10 = call spir_func i32 @Foo76(ptr addrspace(4) align 1 %5) 1410 store i32 %call10, ptr %OriginalLID, align 4 1411 %call11 = call spir_func i32 @Foo90(ptr addrspace(4) %Tangle.ascast) 1412 store i32 %call11, ptr %LID, align 4 1413 %6 = load i32, ptr %OriginalLID, align 4 1414 %call13 = call spir_func i32 @Foo91(ptr byval(%"tangle_group") %agg.tmp12, i32 %6, i32 0) 1415 store i32 %call13, ptr %BroadcastResult, align 4 1416 %7 = load i32, ptr %BroadcastResult, align 4 1417 %conv = zext i32 %7 to i64 1418 %8 = load i64, ptr %TangleLeader.addr 1419 %cmp14 = icmp eq i64 %conv, %8 1420 %BroadcastAcc = getelementptr inbounds nuw %class.anon.8, ptr addrspace(4) %this1, i32 0, i32 3 1421 %9 = load i64, ptr %WI.addr 1422 call spir_func void @Foo46(ptr addrspace(4) %agg.tmp15.ascast, i64 %9) 1423 %call16 = call spir_func align 1 ptr addrspace(4) @Foo54(ptr addrspace(4) %BroadcastAcc, ptr byval(%"range") %agg.tmp15) 1424 %storedv17 = zext i1 %cmp14 to i8 1425 store i8 %storedv17, ptr addrspace(4) %call16, align 1 1426 %10 = load i32, ptr %LID, align 4 1427 %cmp19 = icmp eq i32 %10, 0 1428 %call20 = call spir_func zeroext i1 @Foo92(ptr byval(%"tangle_group") %agg.tmp18, i1 zeroext %cmp19) 1429 %storedv21 = zext i1 %call20 to i8 1430 store i8 %storedv21, ptr %AnyResult, align 1 1431 %11 = load i8, ptr %AnyResult, align 1 1432 %loadedv = trunc i8 %11 to i1 1433 %conv22 = zext i1 %loadedv to i32 1434 %cmp23 = icmp eq i32 %conv22, 1 1435 %AnyAcc = getelementptr inbounds nuw %class.anon.8, ptr addrspace(4) %this1, i32 0, i32 4 1436 %12 = load i64, ptr %WI.addr 1437 call spir_func void @Foo46(ptr addrspace(4) %agg.tmp24.ascast, i64 %12) 1438 %call25 = call spir_func align 1 ptr addrspace(4) @Foo54(ptr addrspace(4) %AnyAcc, ptr byval(%"range") %agg.tmp24) 1439 %storedv26 = zext i1 %cmp23 to i8 1440 store i8 %storedv26, ptr addrspace(4) %call25, align 1 1441 %13 = load i32, ptr %LID, align 4 1442 %conv28 = zext i32 %13 to i64 1443 %14 = load i64, ptr %TangleSize.addr 1444 %cmp29 = icmp ult i64 %conv28, %14 1445 %call30 = call spir_func zeroext i1 @Foo67(ptr byval(%"tangle_group") %agg.tmp27, i1 zeroext %cmp29) 1446 %storedv31 = zext i1 %call30 to i8 1447 store i8 %storedv31, ptr %AllResult, align 1 1448 %15 = load i8, ptr %AllResult, align 1 1449 %loadedv32 = trunc i8 %15 to i1 1450 %conv33 = zext i1 %loadedv32 to i32 1451 %cmp34 = icmp eq i32 %conv33, 1 1452 %AllAcc = getelementptr inbounds nuw %class.anon.8, ptr addrspace(4) %this1, i32 0, i32 5 1453 %16 = load i64, ptr %WI.addr 1454 call spir_func void @Foo46(ptr addrspace(4) %agg.tmp35.ascast, i64 %16) 1455 %call36 = call spir_func align 1 ptr addrspace(4) @Foo54(ptr addrspace(4) %AllAcc, ptr byval(%"range") %agg.tmp35) 1456 %storedv37 = zext i1 %cmp34 to i8 1457 store i8 %storedv37, ptr addrspace(4) %call36, align 1 1458 %17 = load i32, ptr %LID, align 4 1459 %conv39 = zext i32 %17 to i64 1460 %18 = load i64, ptr %TangleSize.addr 1461 %cmp40 = icmp uge i64 %conv39, %18 1462 %call41 = call spir_func zeroext i1 @Foo65(ptr byval(%"tangle_group") %agg.tmp38, i1 zeroext %cmp40) 1463 %storedv42 = zext i1 %call41 to i8 1464 store i8 %storedv42, ptr %NoneResult, align 1 1465 %19 = load i8, ptr %NoneResult, align 1 1466 %loadedv43 = trunc i8 %19 to i1 1467 %conv44 = zext i1 %loadedv43 to i32 1468 %cmp45 = icmp eq i32 %conv44, 1 1469 %NoneAcc = getelementptr inbounds nuw %class.anon.8, ptr addrspace(4) %this1, i32 0, i32 6 1470 %20 = load i64, ptr %WI.addr 1471 call spir_func void @Foo46(ptr addrspace(4) %agg.tmp46.ascast, i64 %20) 1472 %call47 = call spir_func align 1 ptr addrspace(4) @Foo54(ptr addrspace(4) %NoneAcc, ptr byval(%"range") %agg.tmp46) 1473 %storedv48 = zext i1 %cmp45 to i8 1474 store i8 %storedv48, ptr addrspace(4) %call47, align 1 1475 %call51 = call spir_func i32 @Foo64(ptr byval(%"tangle_group") %agg.tmp49, i32 1, ptr byval(%"nd_item") align 1 %agg.tmp50) 1476 store i32 %call51, ptr %ReduceResult, align 4 1477 %21 = load i32, ptr %ReduceResult, align 4 1478 %conv52 = zext i32 %21 to i64 1479 %22 = load i64, ptr %TangleSize.addr 1480 %cmp53 = icmp eq i64 %conv52, %22 1481 %ReduceAcc = getelementptr inbounds nuw %class.anon.8, ptr addrspace(4) %this1, i32 0, i32 7 1482 %23 = load i64, ptr %WI.addr 1483 call spir_func void @Foo46(ptr addrspace(4) %agg.tmp54.ascast, i64 %23) 1484 %call55 = call spir_func align 1 ptr addrspace(4) @Foo54(ptr addrspace(4) %ReduceAcc, ptr byval(%"range") %agg.tmp54) 1485 %storedv56 = zext i1 %cmp53 to i8 1486 store i8 %storedv56, ptr addrspace(4) %call55, align 1 1487 %call59 = call spir_func i32 @Foo63(ptr byval(%"tangle_group") %agg.tmp57, i32 1, ptr byval(%"nd_item") align 1 %agg.tmp58) 1488 store i32 %call59, ptr %ExScanResult, align 4 1489 %24 = load i32, ptr %ExScanResult, align 4 1490 %25 = load i32, ptr %LID, align 4 1491 %cmp60 = icmp eq i32 %24, %25 1492 %ExScanAcc = getelementptr inbounds nuw %class.anon.8, ptr addrspace(4) %this1, i32 0, i32 8 1493 %26 = load i64, ptr %WI.addr 1494 call spir_func void @Foo46(ptr addrspace(4) %agg.tmp61.ascast, i64 %26) 1495 %call62 = call spir_func align 1 ptr addrspace(4) @Foo54(ptr addrspace(4) %ExScanAcc, ptr byval(%"range") %agg.tmp61) 1496 %storedv63 = zext i1 %cmp60 to i8 1497 store i8 %storedv63, ptr addrspace(4) %call62, align 1 1498 %call66 = call spir_func i32 @Foo62(ptr byval(%"tangle_group") %agg.tmp64, i32 1, ptr byval(%"nd_item") align 1 %agg.tmp65) 1499 store i32 %call66, ptr %IncScanResult, align 4 1500 %27 = load i32, ptr %IncScanResult, align 4 1501 %28 = load i32, ptr %LID, align 4 1502 %add67 = add i32 %28, 1 1503 %cmp68 = icmp eq i32 %27, %add67 1504 %IncScanAcc = getelementptr inbounds nuw %class.anon.8, ptr addrspace(4) %this1, i32 0, i32 9 1505 %29 = load i64, ptr %WI.addr 1506 call spir_func void @Foo46(ptr addrspace(4) %agg.tmp69.ascast, i64 %29) 1507 %call70 = call spir_func align 1 ptr addrspace(4) @Foo54(ptr addrspace(4) %IncScanAcc, ptr byval(%"range") %agg.tmp69) 1508 %storedv71 = zext i1 %cmp68 to i8 1509 store i8 %storedv71, ptr addrspace(4) %call70, align 1 1510 %30 = load i32, ptr %LID, align 4 1511 %call73 = call spir_func i32 @Foo73(ptr byval(%"tangle_group") %agg.tmp72, i32 %30, i32 2) 1512 store i32 %call73, ptr %ShiftLeftResult, align 4 1513 %31 = load i32, ptr %LID, align 4 1514 %add74 = add i32 %31, 2 1515 %conv75 = zext i32 %add74 to i64 1516 %32 = load i64, ptr %TangleSize.addr 1517 %cmp76 = icmp uge i64 %conv75, %32 1518 br i1 %cmp76, label %lor.end, label %lor.rhs 1519 1520lor.rhs: ; preds = %for.cond.cleanup 1521 %33 = load i32, ptr %ShiftLeftResult, align 4 1522 %34 = load i32, ptr %LID, align 4 1523 %add77 = add i32 %34, 2 1524 %cmp78 = icmp eq i32 %33, %add77 1525 br label %lor.end 1526 1527lor.end: ; preds = %lor.rhs, %for.cond.cleanup 1528 %35 = phi i1 [ true, %for.cond.cleanup ], [ %cmp78, %lor.rhs ] 1529 %ShiftLeftAcc = getelementptr inbounds nuw %class.anon.8, ptr addrspace(4) %this1, i32 0, i32 10 1530 %36 = load i64, ptr %WI.addr 1531 call spir_func void @Foo46(ptr addrspace(4) %agg.tmp79.ascast, i64 %36) 1532 %call80 = call spir_func align 1 ptr addrspace(4) @Foo54(ptr addrspace(4) %ShiftLeftAcc, ptr byval(%"range") %agg.tmp79) 1533 %storedv81 = zext i1 %35 to i8 1534 store i8 %storedv81, ptr addrspace(4) %call80, align 1 1535 %37 = load i32, ptr %LID, align 4 1536 %call83 = call spir_func i32 @Foo53(ptr byval(%"tangle_group") %agg.tmp82, i32 %37, i32 2) 1537 store i32 %call83, ptr %ShiftRightResult, align 4 1538 %38 = load i32, ptr %LID, align 4 1539 %cmp84 = icmp ult i32 %38, 2 1540 br i1 %cmp84, label %lor.end87, label %lor.rhs85 1541 1542lor.rhs85: ; preds = %lor.end 1543 %39 = load i32, ptr %ShiftRightResult, align 4 1544 %40 = load i32, ptr %LID, align 4 1545 %sub = sub i32 %40, 2 1546 %cmp86 = icmp eq i32 %39, %sub 1547 br label %lor.end87 1548 1549lor.end87: ; preds = %lor.rhs85, %lor.end 1550 %41 = phi i1 [ true, %lor.end ], [ %cmp86, %lor.rhs85 ] 1551 %ShiftRightAcc = getelementptr inbounds nuw %class.anon.8, ptr addrspace(4) %this1, i32 0, i32 11 1552 %42 = load i64, ptr %WI.addr 1553 call spir_func void @Foo46(ptr addrspace(4) %agg.tmp88.ascast, i64 %42) 1554 %call89 = call spir_func align 1 ptr addrspace(4) @Foo54(ptr addrspace(4) %ShiftRightAcc, ptr byval(%"range") %agg.tmp88) 1555 %storedv90 = zext i1 %41 to i8 1556 store i8 %storedv90, ptr addrspace(4) %call89, align 1 1557 %43 = load i32, ptr %LID, align 4 1558 call spir_func void @Foo51(ptr addrspace(4) dead_on_unwind writable sret(%"range") %ref.tmp93.ascast, ptr addrspace(4) %Tangle.ascast) 1559 store i32 2, ptr %ref.tmp94, align 4 1560 call spir_func void @Foo55(ptr addrspace(4) dead_on_unwind writable sret(%"range") %ref.tmp.ascast, ptr addrspace(4) %ref.tmp93.ascast, ptr addrspace(4) align 4 %ref.tmp94.ascast) 1561 call spir_func void @Foo56(ptr addrspace(4) dead_on_unwind writable sret(%"range") %agg.tmp92.ascast, ptr addrspace(4) %ref.tmp.ascast, ptr addrspace(4) %TangleSize.addr.ascast) 1562 %call95 = call spir_func i32 @Foo57(ptr byval(%"tangle_group") %agg.tmp91, i32 %43, ptr byval(%"range") %agg.tmp92) 1563 store i32 %call95, ptr %SelectResult, align 4 1564 %44 = load i32, ptr %SelectResult, align 4 1565 %conv96 = zext i32 %44 to i64 1566 %45 = load i32, ptr %LID, align 4 1567 %add97 = add i32 %45, 2 1568 %conv98 = zext i32 %add97 to i64 1569 %46 = load i64, ptr %TangleSize.addr 1570 %rem = urem i64 %conv98, %46 1571 %cmp99 = icmp eq i64 %conv96, %rem 1572 %SelectAcc = getelementptr inbounds nuw %class.anon.8, ptr addrspace(4) %this1, i32 0, i32 12 1573 %47 = load i64, ptr %WI.addr 1574 call spir_func void @Foo46(ptr addrspace(4) %agg.tmp100.ascast, i64 %47) 1575 %call101 = call spir_func align 1 ptr addrspace(4) @Foo54(ptr addrspace(4) %SelectAcc, ptr byval(%"range") %agg.tmp100) 1576 %storedv102 = zext i1 %cmp99 to i8 1577 store i8 %storedv102, ptr addrspace(4) %call101, align 1 1578 %48 = load i32, ptr %LID, align 4 1579 %call104 = call spir_func i32 @Foo58(ptr byval(%"tangle_group") %agg.tmp103, i32 %48, i32 2) 1580 store i32 %call104, ptr %PermuteXorResult, align 4 1581 %49 = load i32, ptr %PermuteXorResult, align 4 1582 %50 = load i32, ptr %LID, align 4 1583 %xor = xor i32 %50, 2 1584 %cmp105 = icmp eq i32 %49, %xor 1585 %PermuteXorAcc = getelementptr inbounds nuw %class.anon.8, ptr addrspace(4) %this1, i32 0, i32 13 1586 %51 = load i64, ptr %WI.addr 1587 call spir_func void @Foo46(ptr addrspace(4) %agg.tmp106.ascast, i64 %51) 1588 %call107 = call spir_func align 1 ptr addrspace(4) @Foo54(ptr addrspace(4) %PermuteXorAcc, ptr byval(%"range") %agg.tmp106) 1589 %storedv108 = zext i1 %cmp105 to i8 1590 store i8 %storedv108, ptr addrspace(4) %call107, align 1 1591 ret void 1592 1593for.body: ; preds = %for.cond 1594 %52 = load i64, ptr %Other 1595 %call3 = call spir_func zeroext i1 @Foo74(ptr addrspace(4) align 1 %IsMember.ascast, i64 %52) 1596 br i1 %call3, label %if.then, label %if.end 1597 1598if.then: ; preds = %for.body 1599 %TmpAcc42 = bitcast ptr addrspace(4) %this1 to ptr addrspace(4) 1600 %53 = load i64, ptr %Other 1601 call spir_func void @Foo46(ptr addrspace(4) %agg.tmp5.ascast, i64 %53) 1602 %call6 = call spir_func ptr addrspace(4) @Foo70(ptr addrspace(4) %TmpAcc42, ptr byval(%"range") %agg.tmp5) 1603 %54 = load i64, ptr addrspace(4) %call6 1604 %55 = load i64, ptr %Visible 1605 %add = add i64 %55, %54 1606 store i64 %add, ptr %Visible 1607 br label %if.end 1608 1609if.end: ; preds = %if.then, %for.body 1610 %56 = load i64, ptr %Other 1611 %inc = add i64 %56, 1 1612 store i64 %inc, ptr %Other 1613 br label %for.cond 1614} 1615 1616 1617define internal spir_func void @Foo69(ptr addrspace(4) %this, i64 %WI, ptr byval(%"tangle_group") %Tangle, i64 %TangleLeader, i64 %TangleSize, ptr byval(%"nd_item") align 1 %IsMember) { 1618entry: 1619 %this.addr = alloca ptr addrspace(4) 1620 %WI.addr = alloca i64 1621 %TangleLeader.addr = alloca i64 1622 %TangleSize.addr = alloca i64 1623 %agg.tmp = alloca %"range" 1624 %agg.tmp2 = alloca %"tangle_group" 1625 %Visible = alloca i64 1626 %Other = alloca i64 1627 %cleanup.dest.slot = alloca i32, align 4 1628 %agg.tmp5 = alloca %"range" 1629 %agg.tmp8 = alloca %"range" 1630 %OriginalLID = alloca i32, align 4 1631 %LID = alloca i32, align 4 1632 %BroadcastResult = alloca i32, align 4 1633 %agg.tmp12 = alloca %"tangle_group" 1634 %agg.tmp15 = alloca %"range" 1635 %AnyResult = alloca i8, align 1 1636 %agg.tmp18 = alloca %"tangle_group" 1637 %agg.tmp24 = alloca %"range" 1638 %AllResult = alloca i8, align 1 1639 %agg.tmp27 = alloca %"tangle_group" 1640 %agg.tmp35 = alloca %"range" 1641 %NoneResult = alloca i8, align 1 1642 %agg.tmp38 = alloca %"tangle_group" 1643 %agg.tmp46 = alloca %"range" 1644 %ReduceResult = alloca i32, align 4 1645 %agg.tmp49 = alloca %"tangle_group" 1646 %agg.tmp50 = alloca %"nd_item", align 1 1647 %agg.tmp54 = alloca %"range" 1648 %ExScanResult = alloca i32, align 4 1649 %agg.tmp57 = alloca %"tangle_group" 1650 %agg.tmp58 = alloca %"nd_item", align 1 1651 %agg.tmp61 = alloca %"range" 1652 %IncScanResult = alloca i32, align 4 1653 %agg.tmp64 = alloca %"tangle_group" 1654 %agg.tmp65 = alloca %"nd_item", align 1 1655 %agg.tmp69 = alloca %"range" 1656 %ShiftLeftResult = alloca i32, align 4 1657 %agg.tmp72 = alloca %"tangle_group" 1658 %agg.tmp79 = alloca %"range" 1659 %ShiftRightResult = alloca i32, align 4 1660 %agg.tmp82 = alloca %"tangle_group" 1661 %agg.tmp88 = alloca %"range" 1662 %SelectResult = alloca i32, align 4 1663 %agg.tmp91 = alloca %"tangle_group" 1664 %agg.tmp92 = alloca %"range" 1665 %ref.tmp = alloca %"range" 1666 %ref.tmp93 = alloca %"range" 1667 %ref.tmp94 = alloca i32, align 4 1668 %agg.tmp100 = alloca %"range" 1669 %PermuteXorResult = alloca i32, align 4 1670 %agg.tmp103 = alloca %"tangle_group" 1671 %agg.tmp106 = alloca %"range" 1672 %TangleSize.addr.ascast = addrspacecast ptr %TangleSize.addr to ptr addrspace(4) 1673 %agg.tmp.ascast = addrspacecast ptr %agg.tmp to ptr addrspace(4) 1674 %agg.tmp5.ascast = addrspacecast ptr %agg.tmp5 to ptr addrspace(4) 1675 %agg.tmp8.ascast = addrspacecast ptr %agg.tmp8 to ptr addrspace(4) 1676 %agg.tmp15.ascast = addrspacecast ptr %agg.tmp15 to ptr addrspace(4) 1677 %agg.tmp24.ascast = addrspacecast ptr %agg.tmp24 to ptr addrspace(4) 1678 %agg.tmp35.ascast = addrspacecast ptr %agg.tmp35 to ptr addrspace(4) 1679 %agg.tmp46.ascast = addrspacecast ptr %agg.tmp46 to ptr addrspace(4) 1680 %agg.tmp54.ascast = addrspacecast ptr %agg.tmp54 to ptr addrspace(4) 1681 %agg.tmp61.ascast = addrspacecast ptr %agg.tmp61 to ptr addrspace(4) 1682 %agg.tmp69.ascast = addrspacecast ptr %agg.tmp69 to ptr addrspace(4) 1683 %agg.tmp79.ascast = addrspacecast ptr %agg.tmp79 to ptr addrspace(4) 1684 %agg.tmp88.ascast = addrspacecast ptr %agg.tmp88 to ptr addrspace(4) 1685 %agg.tmp92.ascast = addrspacecast ptr %agg.tmp92 to ptr addrspace(4) 1686 %ref.tmp.ascast = addrspacecast ptr %ref.tmp to ptr addrspace(4) 1687 %ref.tmp93.ascast = addrspacecast ptr %ref.tmp93 to ptr addrspace(4) 1688 %ref.tmp94.ascast = addrspacecast ptr %ref.tmp94 to ptr addrspace(4) 1689 %agg.tmp100.ascast = addrspacecast ptr %agg.tmp100 to ptr addrspace(4) 1690 %agg.tmp106.ascast = addrspacecast ptr %agg.tmp106 to ptr addrspace(4) 1691 store ptr addrspace(4) %this, ptr %this.addr 1692 store i64 %WI, ptr %WI.addr 1693 %Tangle.ascast = addrspacecast ptr %Tangle to ptr addrspace(4) 1694 store i64 %TangleLeader, ptr %TangleLeader.addr 1695 store i64 %TangleSize, ptr %TangleSize.addr 1696 %IsMember.ascast = addrspacecast ptr %IsMember to ptr addrspace(4) 1697 %this1 = load ptr addrspace(4), ptr %this.addr 1698 %TmpAcc1 = bitcast ptr addrspace(4) %this1 to ptr addrspace(4) 1699 %0 = load i64, ptr %WI.addr 1700 call spir_func void @Foo46(ptr addrspace(4) %agg.tmp.ascast, i64 %0) 1701 %call = call spir_func ptr addrspace(4) @Foo70(ptr addrspace(4) %TmpAcc1, ptr byval(%"range") %agg.tmp) 1702 store i64 1, ptr addrspace(4) %call 1703 call spir_func void @Foo75(ptr byval(%"tangle_group") %agg.tmp2, i32 1) 1704 store i64 0, ptr %Visible 1705 store i64 0, ptr %Other 1706 br label %for.cond 1707 1708for.cond: ; preds = %if.end, %entry 1709 %1 = load i64, ptr %Other 1710 %cmp = icmp ult i64 %1, 32 1711 br i1 %cmp, label %for.body, label %for.cond.cleanup 1712 1713for.cond.cleanup: ; preds = %for.cond 1714 %2 = load i64, ptr %Visible 1715 %3 = load i64, ptr %TangleSize.addr 1716 %cmp7 = icmp eq i64 %2, %3 1717 %BarrierAcc = getelementptr inbounds nuw %class.anon.8, ptr addrspace(4) %this1, i32 0, i32 1 1718 %4 = load i64, ptr %WI.addr 1719 call spir_func void @Foo46(ptr addrspace(4) %agg.tmp8.ascast, i64 %4) 1720 %call9 = call spir_func align 1 ptr addrspace(4) @Foo54(ptr addrspace(4) %BarrierAcc, ptr byval(%"range") %agg.tmp8) 1721 %storedv = zext i1 %cmp7 to i8 1722 store i8 %storedv, ptr addrspace(4) %call9, align 1 1723 %5 = getelementptr inbounds i8, ptr addrspace(4) %this1, i64 64 1724 %call10 = call spir_func i32 @Foo76(ptr addrspace(4) align 1 %5) 1725 store i32 %call10, ptr %OriginalLID, align 4 1726 %call11 = call spir_func i32 @Foo90(ptr addrspace(4) %Tangle.ascast) 1727 store i32 %call11, ptr %LID, align 4 1728 %6 = load i32, ptr %OriginalLID, align 4 1729 %call13 = call spir_func i32 @Foo91(ptr byval(%"tangle_group") %agg.tmp12, i32 %6, i32 0) 1730 store i32 %call13, ptr %BroadcastResult, align 4 1731 %7 = load i32, ptr %BroadcastResult, align 4 1732 %conv = zext i32 %7 to i64 1733 %8 = load i64, ptr %TangleLeader.addr 1734 %cmp14 = icmp eq i64 %conv, %8 1735 %BroadcastAcc = getelementptr inbounds nuw %class.anon.8, ptr addrspace(4) %this1, i32 0, i32 3 1736 %9 = load i64, ptr %WI.addr 1737 call spir_func void @Foo46(ptr addrspace(4) %agg.tmp15.ascast, i64 %9) 1738 %call16 = call spir_func align 1 ptr addrspace(4) @Foo54(ptr addrspace(4) %BroadcastAcc, ptr byval(%"range") %agg.tmp15) 1739 %storedv17 = zext i1 %cmp14 to i8 1740 store i8 %storedv17, ptr addrspace(4) %call16, align 1 1741 %10 = load i32, ptr %LID, align 4 1742 %cmp19 = icmp eq i32 %10, 0 1743 %call20 = call spir_func zeroext i1 @Foo92(ptr byval(%"tangle_group") %agg.tmp18, i1 zeroext %cmp19) 1744 %storedv21 = zext i1 %call20 to i8 1745 store i8 %storedv21, ptr %AnyResult, align 1 1746 %11 = load i8, ptr %AnyResult, align 1 1747 %loadedv = trunc i8 %11 to i1 1748 %conv22 = zext i1 %loadedv to i32 1749 %cmp23 = icmp eq i32 %conv22, 1 1750 %AnyAcc = getelementptr inbounds nuw %class.anon.8, ptr addrspace(4) %this1, i32 0, i32 4 1751 %12 = load i64, ptr %WI.addr 1752 call spir_func void @Foo46(ptr addrspace(4) %agg.tmp24.ascast, i64 %12) 1753 %call25 = call spir_func align 1 ptr addrspace(4) @Foo54(ptr addrspace(4) %AnyAcc, ptr byval(%"range") %agg.tmp24) 1754 %storedv26 = zext i1 %cmp23 to i8 1755 store i8 %storedv26, ptr addrspace(4) %call25, align 1 1756 %13 = load i32, ptr %LID, align 4 1757 %conv28 = zext i32 %13 to i64 1758 %14 = load i64, ptr %TangleSize.addr 1759 %cmp29 = icmp ult i64 %conv28, %14 1760 %call30 = call spir_func zeroext i1 @Foo67(ptr byval(%"tangle_group") %agg.tmp27, i1 zeroext %cmp29) 1761 %storedv31 = zext i1 %call30 to i8 1762 store i8 %storedv31, ptr %AllResult, align 1 1763 %15 = load i8, ptr %AllResult, align 1 1764 %loadedv32 = trunc i8 %15 to i1 1765 %conv33 = zext i1 %loadedv32 to i32 1766 %cmp34 = icmp eq i32 %conv33, 1 1767 %AllAcc = getelementptr inbounds nuw %class.anon.8, ptr addrspace(4) %this1, i32 0, i32 5 1768 %16 = load i64, ptr %WI.addr 1769 call spir_func void @Foo46(ptr addrspace(4) %agg.tmp35.ascast, i64 %16) 1770 %call36 = call spir_func align 1 ptr addrspace(4) @Foo54(ptr addrspace(4) %AllAcc, ptr byval(%"range") %agg.tmp35) 1771 %storedv37 = zext i1 %cmp34 to i8 1772 store i8 %storedv37, ptr addrspace(4) %call36, align 1 1773 %17 = load i32, ptr %LID, align 4 1774 %conv39 = zext i32 %17 to i64 1775 %18 = load i64, ptr %TangleSize.addr 1776 %cmp40 = icmp uge i64 %conv39, %18 1777 %call41 = call spir_func zeroext i1 @Foo65(ptr byval(%"tangle_group") %agg.tmp38, i1 zeroext %cmp40) 1778 %storedv42 = zext i1 %call41 to i8 1779 store i8 %storedv42, ptr %NoneResult, align 1 1780 %19 = load i8, ptr %NoneResult, align 1 1781 %loadedv43 = trunc i8 %19 to i1 1782 %conv44 = zext i1 %loadedv43 to i32 1783 %cmp45 = icmp eq i32 %conv44, 1 1784 %NoneAcc = getelementptr inbounds nuw %class.anon.8, ptr addrspace(4) %this1, i32 0, i32 6 1785 %20 = load i64, ptr %WI.addr 1786 call spir_func void @Foo46(ptr addrspace(4) %agg.tmp46.ascast, i64 %20) 1787 %call47 = call spir_func align 1 ptr addrspace(4) @Foo54(ptr addrspace(4) %NoneAcc, ptr byval(%"range") %agg.tmp46) 1788 %storedv48 = zext i1 %cmp45 to i8 1789 store i8 %storedv48, ptr addrspace(4) %call47, align 1 1790 %call51 = call spir_func i32 @Foo64(ptr byval(%"tangle_group") %agg.tmp49, i32 1, ptr byval(%"nd_item") align 1 %agg.tmp50) 1791 store i32 %call51, ptr %ReduceResult, align 4 1792 %21 = load i32, ptr %ReduceResult, align 4 1793 %conv52 = zext i32 %21 to i64 1794 %22 = load i64, ptr %TangleSize.addr 1795 %cmp53 = icmp eq i64 %conv52, %22 1796 %ReduceAcc = getelementptr inbounds nuw %class.anon.8, ptr addrspace(4) %this1, i32 0, i32 7 1797 %23 = load i64, ptr %WI.addr 1798 call spir_func void @Foo46(ptr addrspace(4) %agg.tmp54.ascast, i64 %23) 1799 %call55 = call spir_func align 1 ptr addrspace(4) @Foo54(ptr addrspace(4) %ReduceAcc, ptr byval(%"range") %agg.tmp54) 1800 %storedv56 = zext i1 %cmp53 to i8 1801 store i8 %storedv56, ptr addrspace(4) %call55, align 1 1802 %call59 = call spir_func i32 @Foo63(ptr byval(%"tangle_group") %agg.tmp57, i32 1, ptr byval(%"nd_item") align 1 %agg.tmp58) 1803 store i32 %call59, ptr %ExScanResult, align 4 1804 %24 = load i32, ptr %ExScanResult, align 4 1805 %25 = load i32, ptr %LID, align 4 1806 %cmp60 = icmp eq i32 %24, %25 1807 %ExScanAcc = getelementptr inbounds nuw %class.anon.8, ptr addrspace(4) %this1, i32 0, i32 8 1808 %26 = load i64, ptr %WI.addr 1809 call spir_func void @Foo46(ptr addrspace(4) %agg.tmp61.ascast, i64 %26) 1810 %call62 = call spir_func align 1 ptr addrspace(4) @Foo54(ptr addrspace(4) %ExScanAcc, ptr byval(%"range") %agg.tmp61) 1811 %storedv63 = zext i1 %cmp60 to i8 1812 store i8 %storedv63, ptr addrspace(4) %call62, align 1 1813 %call66 = call spir_func i32 @Foo62(ptr byval(%"tangle_group") %agg.tmp64, i32 1, ptr byval(%"nd_item") align 1 %agg.tmp65) 1814 store i32 %call66, ptr %IncScanResult, align 4 1815 %27 = load i32, ptr %IncScanResult, align 4 1816 %28 = load i32, ptr %LID, align 4 1817 %add67 = add i32 %28, 1 1818 %cmp68 = icmp eq i32 %27, %add67 1819 %IncScanAcc = getelementptr inbounds nuw %class.anon.8, ptr addrspace(4) %this1, i32 0, i32 9 1820 %29 = load i64, ptr %WI.addr 1821 call spir_func void @Foo46(ptr addrspace(4) %agg.tmp69.ascast, i64 %29) 1822 %call70 = call spir_func align 1 ptr addrspace(4) @Foo54(ptr addrspace(4) %IncScanAcc, ptr byval(%"range") %agg.tmp69) 1823 %storedv71 = zext i1 %cmp68 to i8 1824 store i8 %storedv71, ptr addrspace(4) %call70, align 1 1825 %30 = load i32, ptr %LID, align 4 1826 %call73 = call spir_func i32 @Foo73(ptr byval(%"tangle_group") %agg.tmp72, i32 %30, i32 2) 1827 store i32 %call73, ptr %ShiftLeftResult, align 4 1828 %31 = load i32, ptr %LID, align 4 1829 %add74 = add i32 %31, 2 1830 %conv75 = zext i32 %add74 to i64 1831 %32 = load i64, ptr %TangleSize.addr 1832 %cmp76 = icmp uge i64 %conv75, %32 1833 br i1 %cmp76, label %lor.end, label %lor.rhs 1834 1835lor.rhs: ; preds = %for.cond.cleanup 1836 %33 = load i32, ptr %ShiftLeftResult, align 4 1837 %34 = load i32, ptr %LID, align 4 1838 %add77 = add i32 %34, 2 1839 %cmp78 = icmp eq i32 %33, %add77 1840 br label %lor.end 1841 1842lor.end: ; preds = %lor.rhs, %for.cond.cleanup 1843 %35 = phi i1 [ true, %for.cond.cleanup ], [ %cmp78, %lor.rhs ] 1844 %ShiftLeftAcc = getelementptr inbounds nuw %class.anon.8, ptr addrspace(4) %this1, i32 0, i32 10 1845 %36 = load i64, ptr %WI.addr 1846 call spir_func void @Foo46(ptr addrspace(4) %agg.tmp79.ascast, i64 %36) 1847 %call80 = call spir_func align 1 ptr addrspace(4) @Foo54(ptr addrspace(4) %ShiftLeftAcc, ptr byval(%"range") %agg.tmp79) 1848 %storedv81 = zext i1 %35 to i8 1849 store i8 %storedv81, ptr addrspace(4) %call80, align 1 1850 %37 = load i32, ptr %LID, align 4 1851 %call83 = call spir_func i32 @Foo53(ptr byval(%"tangle_group") %agg.tmp82, i32 %37, i32 2) 1852 store i32 %call83, ptr %ShiftRightResult, align 4 1853 %38 = load i32, ptr %LID, align 4 1854 %cmp84 = icmp ult i32 %38, 2 1855 br i1 %cmp84, label %lor.end87, label %lor.rhs85 1856 1857lor.rhs85: ; preds = %lor.end 1858 %39 = load i32, ptr %ShiftRightResult, align 4 1859 %40 = load i32, ptr %LID, align 4 1860 %sub = sub i32 %40, 2 1861 %cmp86 = icmp eq i32 %39, %sub 1862 br label %lor.end87 1863 1864lor.end87: ; preds = %lor.rhs85, %lor.end 1865 %41 = phi i1 [ true, %lor.end ], [ %cmp86, %lor.rhs85 ] 1866 %ShiftRightAcc = getelementptr inbounds nuw %class.anon.8, ptr addrspace(4) %this1, i32 0, i32 11 1867 %42 = load i64, ptr %WI.addr 1868 call spir_func void @Foo46(ptr addrspace(4) %agg.tmp88.ascast, i64 %42) 1869 %call89 = call spir_func align 1 ptr addrspace(4) @Foo54(ptr addrspace(4) %ShiftRightAcc, ptr byval(%"range") %agg.tmp88) 1870 %storedv90 = zext i1 %41 to i8 1871 store i8 %storedv90, ptr addrspace(4) %call89, align 1 1872 %43 = load i32, ptr %LID, align 4 1873 call spir_func void @Foo51(ptr addrspace(4) dead_on_unwind writable sret(%"range") %ref.tmp93.ascast, ptr addrspace(4) %Tangle.ascast) 1874 store i32 2, ptr %ref.tmp94, align 4 1875 call spir_func void @Foo55(ptr addrspace(4) dead_on_unwind writable sret(%"range") %ref.tmp.ascast, ptr addrspace(4) %ref.tmp93.ascast, ptr addrspace(4) align 4 %ref.tmp94.ascast) 1876 call spir_func void @Foo56(ptr addrspace(4) dead_on_unwind writable sret(%"range") %agg.tmp92.ascast, ptr addrspace(4) %ref.tmp.ascast, ptr addrspace(4) %TangleSize.addr.ascast) 1877 %call95 = call spir_func i32 @Foo57(ptr byval(%"tangle_group") %agg.tmp91, i32 %43, ptr byval(%"range") %agg.tmp92) 1878 store i32 %call95, ptr %SelectResult, align 4 1879 %44 = load i32, ptr %SelectResult, align 4 1880 %conv96 = zext i32 %44 to i64 1881 %45 = load i32, ptr %LID, align 4 1882 %add97 = add i32 %45, 2 1883 %conv98 = zext i32 %add97 to i64 1884 %46 = load i64, ptr %TangleSize.addr 1885 %rem = urem i64 %conv98, %46 1886 %cmp99 = icmp eq i64 %conv96, %rem 1887 %SelectAcc = getelementptr inbounds nuw %class.anon.8, ptr addrspace(4) %this1, i32 0, i32 12 1888 %47 = load i64, ptr %WI.addr 1889 call spir_func void @Foo46(ptr addrspace(4) %agg.tmp100.ascast, i64 %47) 1890 %call101 = call spir_func align 1 ptr addrspace(4) @Foo54(ptr addrspace(4) %SelectAcc, ptr byval(%"range") %agg.tmp100) 1891 %storedv102 = zext i1 %cmp99 to i8 1892 store i8 %storedv102, ptr addrspace(4) %call101, align 1 1893 %48 = load i32, ptr %LID, align 4 1894 %call104 = call spir_func i32 @Foo58(ptr byval(%"tangle_group") %agg.tmp103, i32 %48, i32 2) 1895 store i32 %call104, ptr %PermuteXorResult, align 4 1896 %49 = load i32, ptr %PermuteXorResult, align 4 1897 %50 = load i32, ptr %LID, align 4 1898 %xor = xor i32 %50, 2 1899 %cmp105 = icmp eq i32 %49, %xor 1900 %PermuteXorAcc = getelementptr inbounds nuw %class.anon.8, ptr addrspace(4) %this1, i32 0, i32 13 1901 %51 = load i64, ptr %WI.addr 1902 call spir_func void @Foo46(ptr addrspace(4) %agg.tmp106.ascast, i64 %51) 1903 %call107 = call spir_func align 1 ptr addrspace(4) @Foo54(ptr addrspace(4) %PermuteXorAcc, ptr byval(%"range") %agg.tmp106) 1904 %storedv108 = zext i1 %cmp105 to i8 1905 store i8 %storedv108, ptr addrspace(4) %call107, align 1 1906 ret void 1907 1908for.body: ; preds = %for.cond 1909 %52 = load i64, ptr %Other 1910 %call3 = call spir_func zeroext i1 @Bar14(ptr addrspace(4) align 1 %IsMember.ascast, i64 %52) 1911 br i1 %call3, label %if.then, label %if.end 1912 1913if.then: ; preds = %for.body 1914 %TmpAcc42 = bitcast ptr addrspace(4) %this1 to ptr addrspace(4) 1915 %53 = load i64, ptr %Other 1916 call spir_func void @Foo46(ptr addrspace(4) %agg.tmp5.ascast, i64 %53) 1917 %call6 = call spir_func ptr addrspace(4) @Foo70(ptr addrspace(4) %TmpAcc42, ptr byval(%"range") %agg.tmp5) 1918 %54 = load i64, ptr addrspace(4) %call6 1919 %55 = load i64, ptr %Visible 1920 %add = add i64 %55, %54 1921 store i64 %add, ptr %Visible 1922 br label %if.end 1923 1924if.end: ; preds = %if.then, %for.body 1925 %56 = load i64, ptr %Other 1926 %inc = add i64 %56, 1 1927 store i64 %inc, ptr %Other 1928 br label %for.cond 1929} 1930 1931 1932define internal spir_func zeroext i1 @Bar14(ptr addrspace(4) align 1 %this, i64 %Other) { 1933entry: 1934 %retval = alloca i1, align 1 1935 %this.addr = alloca ptr addrspace(4) 1936 %Other.addr = alloca i64 1937 %retval.ascast = addrspacecast ptr %retval to ptr addrspace(4) 1938 store ptr addrspace(4) %this, ptr %this.addr 1939 store i64 %Other, ptr %Other.addr 1940 %this1 = load ptr addrspace(4), ptr %this.addr 1941 %0 = load i64, ptr %Other.addr 1942 %cmp = icmp uge i64 %0, 24 1943 br i1 %cmp, label %land.rhs, label %land.end 1944 1945land.rhs: ; preds = %entry 1946 %1 = load i64, ptr %Other.addr 1947 %cmp2 = icmp ult i64 %1, 32 1948 br label %land.end 1949 1950land.end: ; preds = %land.rhs, %entry 1951 %2 = phi i1 [ false, %entry ], [ %cmp2, %land.rhs ] 1952 ret i1 %2 1953} 1954 1955 1956define internal spir_func zeroext i1 @Foo74(ptr addrspace(4) align 1 %this, i64 %Other) { 1957entry: 1958 %retval = alloca i1, align 1 1959 %this.addr = alloca ptr addrspace(4) 1960 %Other.addr = alloca i64 1961 %retval.ascast = addrspacecast ptr %retval to ptr addrspace(4) 1962 store ptr addrspace(4) %this, ptr %this.addr 1963 store i64 %Other, ptr %Other.addr 1964 %this1 = load ptr addrspace(4), ptr %this.addr 1965 %0 = load i64, ptr %Other.addr 1966 %cmp = icmp uge i64 %0, 4 1967 br i1 %cmp, label %land.rhs, label %land.end 1968 1969land.rhs: ; preds = %entry 1970 %1 = load i64, ptr %Other.addr 1971 %cmp2 = icmp ult i64 %1, 24 1972 br label %land.end 1973 1974land.end: ; preds = %land.rhs, %entry 1975 %2 = phi i1 [ false, %entry ], [ %cmp2, %land.rhs ] 1976 ret i1 %2 1977} 1978 1979 1980define internal spir_func i32 @Bar13(ptr byval(%"tangle_group") %g, i32 %x, ptr byval(%"range") %mask) { 1981entry: 1982 %retval = alloca i32, align 4 1983 %x.addr = alloca i32, align 4 1984 %TargetLocalId = alloca %"range" 1985 %ref.tmp = alloca %"range" 1986 %TargetId = alloca i32, align 4 1987 %agg.tmp = alloca %"tangle_group" 1988 %agg.tmp1 = alloca %"range" 1989 %cleanup.dest.slot = alloca i32, align 4 1990 %retval.ascast = addrspacecast ptr %retval to ptr addrspace(4) 1991 %x.addr.ascast = addrspacecast ptr %x.addr to ptr addrspace(4) 1992 %TargetLocalId.ascast = addrspacecast ptr %TargetLocalId to ptr addrspace(4) 1993 %ref.tmp.ascast = addrspacecast ptr %ref.tmp to ptr addrspace(4) 1994 %g.ascast = addrspacecast ptr %g to ptr addrspace(4) 1995 store i32 %x, ptr %x.addr, align 4 1996 %mask.ascast = addrspacecast ptr %mask to ptr addrspace(4) 1997 %0 = addrspacecast ptr addrspace(1) @_ZSt6ignore to ptr addrspace(4) 1998 %call = call spir_func align 1 ptr addrspace(4) @Bar15(ptr addrspace(4) align 1 %0, ptr addrspace(4) %g.ascast) 1999 call spir_func void @Foo51(ptr addrspace(4) dead_on_unwind writable sret(%"range") %ref.tmp.ascast, ptr addrspace(4) %g.ascast) 2000 call spir_func void @Bar16(ptr addrspace(4) dead_on_unwind writable sret(%"range") %TargetLocalId.ascast, ptr addrspace(4) %ref.tmp.ascast, ptr addrspace(4) %mask.ascast) 2001 %call2 = call spir_func i32 @Foo48(ptr byval(%"tangle_group") %agg.tmp, ptr byval(%"range") %agg.tmp1) 2002 store i32 %call2, ptr %TargetId, align 4 2003 %call3 = call spir_func i32 @Foo49(ptr addrspace(4) align 4 %x.addr.ascast) 2004 %1 = load i32, ptr %TargetId, align 4 2005 %call4 = call spir_func i32 @Foo50(i32 3, i32 %call3, i32 %1) 2006 ret i32 %call4 2007} 2008 2009 2010define internal spir_func align 1 ptr addrspace(4) @Bar15(ptr addrspace(4) align 1 %this, ptr addrspace(4) %0) { 2011entry: 2012 %retval = alloca ptr addrspace(4) 2013 %this.addr = alloca ptr addrspace(4) 2014 %.addr = alloca ptr addrspace(4) 2015 %retval.ascast = addrspacecast ptr %retval to ptr addrspace(4) 2016 store ptr addrspace(4) %this, ptr %this.addr 2017 store ptr addrspace(4) %0, ptr %.addr 2018 %this1 = load ptr addrspace(4), ptr %this.addr 2019 ret ptr addrspace(4) %this1 2020} 2021 2022 2023define internal spir_func void @Bar16(ptr addrspace(4) dead_on_unwind noalias writable sret(%"range") %agg.result, ptr addrspace(4) %lhs, ptr addrspace(4) %rhs) { 2024entry: 2025 %lhs.addr = alloca ptr addrspace(4) 2026 %rhs.addr = alloca ptr addrspace(4) 2027 %i = alloca i32, align 4 2028 %cleanup.dest.slot = alloca i32, align 4 2029 store ptr addrspace(4) %lhs, ptr %lhs.addr 2030 store ptr addrspace(4) %rhs, ptr %rhs.addr 2031 call spir_func void @Foo11(ptr addrspace(4) %agg.result) 2032 store i32 0, ptr %i, align 4 2033 br label %for.cond 2034 2035for.cond: ; preds = %for.body, %entry 2036 %0 = load i32, ptr %i, align 4 2037 %cmp = icmp slt i32 %0, 1 2038 br i1 %cmp, label %for.body, label %for.cond.cleanup 2039 2040for.cond.cleanup: ; preds = %for.cond 2041 ret void 2042 2043for.body: ; preds = %for.cond 2044 %1 = load ptr addrspace(4), ptr %lhs.addr 2045 %common_array2 = bitcast ptr addrspace(4) %1 to ptr addrspace(4) 2046 %2 = load i32, ptr %i, align 4 2047 %idxprom = sext i32 %2 to i64 2048 %arrayidx = getelementptr inbounds [1 x i64], ptr addrspace(4) %common_array2, i64 0, i64 %idxprom 2049 %3 = load i64, ptr addrspace(4) %arrayidx 2050 %4 = load ptr addrspace(4), ptr %rhs.addr 2051 %common_array13 = bitcast ptr addrspace(4) %4 to ptr addrspace(4) 2052 %5 = load i32, ptr %i, align 4 2053 %idxprom2 = sext i32 %5 to i64 2054 %arrayidx3 = getelementptr inbounds [1 x i64], ptr addrspace(4) %common_array13, i64 0, i64 %idxprom2 2055 %6 = load i64, ptr addrspace(4) %arrayidx3 2056 %xor = xor i64 %3, %6 2057 %common_array44 = bitcast ptr addrspace(4) %agg.result to ptr addrspace(4) 2058 %7 = load i32, ptr %i, align 4 2059 %idxprom5 = sext i32 %7 to i64 2060 %arrayidx6 = getelementptr inbounds [1 x i64], ptr addrspace(4) %common_array44, i64 0, i64 %idxprom5 2061 store i64 %xor, ptr addrspace(4) %arrayidx6 2062 %8 = load i32, ptr %i, align 4 2063 %inc = add nsw i32 %8, 1 2064 store i32 %inc, ptr %i, align 4 2065 br label %for.cond 2066} 2067 2068 2069define internal spir_func i32 @Foo48(ptr byval(%"tangle_group") %g, ptr byval(%"range") %local_id) { 2070entry: 2071 %retval.i = alloca i64 2072 %this.addr.i = alloca ptr addrspace(4) 2073 %Result.i = alloca i64 2074 %retval = alloca i32, align 4 2075 %agg.tmp = alloca %"tangle_group" 2076 %retval.ascast = addrspacecast ptr %retval to ptr addrspace(4) 2077 %local_id.ascast = addrspacecast ptr %local_id to ptr addrspace(4) 2078 %retval.ascast.i = addrspacecast ptr %retval.i to ptr addrspace(4) 2079 store ptr addrspace(4) %local_id.ascast, ptr %this.addr.i 2080 %this1.i = load ptr addrspace(4), ptr %this.addr.i 2081 %0 = load i64, ptr addrspace(4) %this1.i 2082 store i64 %0, ptr %Result.i 2083 %1 = load i64, ptr %Result.i 2084 %conv = trunc i64 %1 to i32 2085 %call1 = call spir_func i32 @Bar17(ptr byval(%"tangle_group") %agg.tmp, i32 %conv) 2086 ret i32 %call1 2087} 2088 2089 2090define internal spir_func i32 @Foo49(ptr addrspace(4) align 4 %x) { 2091entry: 2092 %retval = alloca i32, align 4 2093 %x.addr = alloca ptr addrspace(4) 2094 %retval.ascast = addrspacecast ptr %retval to ptr addrspace(4) 2095 store ptr addrspace(4) %x, ptr %x.addr 2096 %0 = load ptr addrspace(4), ptr %x.addr 2097 %1 = load i32, ptr addrspace(4) %0, align 4 2098 ret i32 %1 2099} 2100 2101declare dso_local spir_func i32 @Foo50(i32, i32, i32) 2102 2103 2104define internal spir_func i32 @Bar17(ptr byval(%"tangle_group") %Group, i32 %Id) { 2105entry: 2106 %retval = alloca i32, align 4 2107 %Id.addr = alloca i32, align 4 2108 %MemberMask = alloca %"vec.16", align 16 2109 %agg.tmp = alloca %"ss_sub_group_mask" 2110 %agg.tmp1 = alloca %"tangle_group" 2111 %Count = alloca i32, align 4 2112 %i = alloca i32, align 4 2113 %cleanup.dest.slot = alloca i32, align 4 2114 %b = alloca i32, align 4 2115 %MemberMask.ascast = addrspacecast ptr %MemberMask to ptr addrspace(4) 2116 %agg.tmp.ascast = addrspacecast ptr %agg.tmp to ptr addrspace(4) 2117 store i32 %Id, ptr %Id.addr, align 4 2118 call spir_func void @Bar18(ptr addrspace(4) dead_on_unwind writable sret(%"ss_sub_group_mask") %agg.tmp.ascast, ptr byval(%"tangle_group") %agg.tmp1) 2119 call spir_func void @Bar19(ptr addrspace(4) dead_on_unwind writable sret(%"vec.16") align 16 %MemberMask.ascast, ptr byval(%"ss_sub_group_mask") %agg.tmp) 2120 store i32 0, ptr %Count, align 4 2121 store i32 0, ptr %i, align 4 2122 br label %for.cond 2123 2124for.cond: ; preds = %for.end, %entry 2125 %0 = load i32, ptr %i, align 4 2126 %cmp = icmp slt i32 %0, 4 2127 br i1 %cmp, label %for.body, label %for.cond.cleanup 2128 2129for.cond.cleanup: ; preds = %for.cond 2130 store i32 2, ptr %cleanup.dest.slot, align 4 2131 br label %cleanup12 2132 2133for.body: ; preds = %for.cond 2134 store i32 0, ptr %b, align 4 2135 br label %for.cond2 2136 2137for.cond2: ; preds = %if.end8, %for.body 2138 %1 = load i32, ptr %b, align 4 2139 %cmp3 = icmp slt i32 %1, 32 2140 br i1 %cmp3, label %for.body5, label %for.cond.cleanup4 2141 2142for.cond.cleanup4: ; preds = %for.cond2 2143 store i32 5, ptr %cleanup.dest.slot, align 4 2144 br label %cleanup 2145 2146for.body5: ; preds = %for.cond2 2147 %2 = load i32, ptr %i, align 4 2148 %call = call spir_func align 4 ptr addrspace(4) @Bar20(ptr addrspace(4) align 16 %MemberMask.ascast, i32 %2) 2149 %3 = load i32, ptr addrspace(4) %call, align 4 2150 %4 = load i32, ptr %b, align 4 2151 %shl = shl i32 1, %4 2152 %and = and i32 %3, %shl 2153 %tobool = icmp ne i32 %and, 0 2154 br i1 %tobool, label %if.then, label %if.end8 2155 2156if.then: ; preds = %for.body5 2157 %5 = load i32, ptr %Count, align 4 2158 %6 = load i32, ptr %Id.addr, align 4 2159 %cmp6 = icmp eq i32 %5, %6 2160 br i1 %cmp6, label %if.then7, label %if.end 2161 2162if.end: ; preds = %if.then 2163 %7 = load i32, ptr %Count, align 4 2164 %inc = add i32 %7, 1 2165 store i32 %inc, ptr %Count, align 4 2166 br label %if.end8 2167 2168if.end8: ; preds = %if.end, %for.body5 2169 %8 = load i32, ptr %b, align 4 2170 %inc9 = add nsw i32 %8, 1 2171 store i32 %inc9, ptr %b, align 4 2172 br label %for.cond2 2173 2174if.then7: ; preds = %if.then 2175 %9 = load i32, ptr %i, align 4 2176 %mul = mul nsw i32 %9, 32 2177 %10 = load i32, ptr %b, align 4 2178 %add = add nsw i32 %mul, %10 2179 store i32 %add, ptr %retval, align 4 2180 store i32 1, ptr %cleanup.dest.slot, align 4 2181 br label %cleanup 2182 2183cleanup: ; preds = %if.then7, %for.cond.cleanup4 2184 %cleanup.dest = load i32, ptr %cleanup.dest.slot, align 4 2185 %cond = icmp eq i32 %cleanup.dest, 5 2186 br i1 %cond, label %for.end, label %cleanup12 2187 2188for.end: ; preds = %cleanup 2189 %11 = load i32, ptr %i, align 4 2190 %inc11 = add nsw i32 %11, 1 2191 store i32 %inc11, ptr %i, align 4 2192 br label %for.cond 2193 2194cleanup12: ; preds = %cleanup, %for.cond.cleanup 2195 %cleanup.dest13 = load i32, ptr %cleanup.dest.slot, align 4 2196 %cond1 = icmp eq i32 %cleanup.dest13, 2 2197 br i1 %cond1, label %for.end14, label %cleanup15 2198 2199for.end14: ; preds = %cleanup12 2200 %12 = load i32, ptr %Count, align 4 2201 store i32 %12, ptr %retval, align 4 2202 store i32 1, ptr %cleanup.dest.slot, align 4 2203 br label %cleanup15 2204 2205cleanup15: ; preds = %cleanup12, %for.end14 2206 %13 = load i32, ptr %retval, align 4 2207 ret i32 %13 2208} 2209 2210 2211define internal spir_func void @Bar18(ptr addrspace(4) dead_on_unwind noalias writable sret(%"ss_sub_group_mask") %agg.result, ptr byval(%"tangle_group") %Group) { 2212entry: 2213 %Mask1 = bitcast ptr %Group to ptr 2214 ret void 2215} 2216 2217 2218define internal spir_func void @Bar19(ptr addrspace(4) dead_on_unwind noalias writable sret(%"vec.16") align 16 %agg.result, ptr byval(%"ss_sub_group_mask") %Mask) { 2219entry: 2220 %TmpMArray = alloca %"struct.std::array.20", align 4 2221 %agg.tmp = alloca %"range" 2222 %i = alloca i32, align 4 2223 %cleanup.dest.slot = alloca i32, align 4 2224 %cleanup.dest.slot2 = alloca i32, align 4 2225 %TmpMArray.ascast = addrspacecast ptr %TmpMArray to ptr addrspace(4) 2226 %agg.tmp.ascast = addrspacecast ptr %agg.tmp to ptr addrspace(4) 2227 %Mask.ascast = addrspacecast ptr %Mask to ptr addrspace(4) 2228 call spir_func void @Bar50(ptr addrspace(4) align 4 %TmpMArray.ascast) 2229 call spir_func void @Foo46(ptr addrspace(4) %agg.tmp.ascast, i64 0) 2230 call spir_func void @Bar51(ptr addrspace(4) %Mask.ascast, ptr addrspace(4) align 4 %TmpMArray.ascast, ptr byval(%"range") %agg.tmp) 2231 store i32 0, ptr %i, align 4 2232 br label %for.cond 2233 2234for.cond: ; preds = %for.inc, %entry 2235 %0 = load i32, ptr %i, align 4 2236 %cmp = icmp slt i32 %0, 4 2237 br i1 %cmp, label %for.body, label %for.cond.cleanup 2238 2239for.cond.cleanup: ; preds = %for.cond 2240 br label %for.end 2241 2242for.end: ; preds = %for.cond.cleanup 2243 ret void 2244 2245for.body: ; preds = %for.cond 2246 %1 = load i32, ptr %i, align 4 2247 %conv = sext i32 %1 to i64 2248 %call = call spir_func align 4 ptr addrspace(4) @Bar57(ptr addrspace(4) align 4 %TmpMArray.ascast, i64 %conv) 2249 %2 = load i32, ptr addrspace(4) %call, align 4 2250 %3 = load i32, ptr %i, align 4 2251 %call1 = call spir_func align 4 ptr addrspace(4) @Bar20(ptr addrspace(4) align 16 %agg.result, i32 %3) 2252 store i32 %2, ptr addrspace(4) %call1, align 4 2253 br label %for.inc 2254 2255for.inc: ; preds = %for.body 2256 %4 = load i32, ptr %i, align 4 2257 %inc = add nsw i32 %4, 1 2258 store i32 %inc, ptr %i, align 4 2259 br label %for.cond 2260} 2261 2262 2263define internal spir_func align 4 ptr addrspace(4) @Bar20(ptr addrspace(4) align 16 %this, i32 %i) { 2264entry: 2265 %retval = alloca ptr addrspace(4) 2266 %this.addr = alloca ptr addrspace(4) 2267 %i.addr = alloca i32, align 4 2268 %retval.ascast = addrspacecast ptr %retval to ptr addrspace(4) 2269 store ptr addrspace(4) %this, ptr %this.addr 2270 store i32 %i, ptr %i.addr, align 4 2271 %this1 = load ptr addrspace(4), ptr %this.addr 2272 %m_Data1 = bitcast ptr addrspace(4) %this1 to ptr addrspace(4) 2273 %0 = load i32, ptr %i.addr, align 4 2274 %conv = sext i32 %0 to i64 2275 %call = call spir_func align 4 ptr addrspace(4) @_ZNSt5arrayIjLm4EEixEm(ptr addrspace(4) align 4 %m_Data1, i64 %conv) 2276 ret ptr addrspace(4) %call 2277} 2278 2279 2280define internal spir_func align 4 ptr addrspace(4) @_ZNSt5arrayIjLm4EEixEm(ptr addrspace(4) align 4 %this, i64 %__n) { 2281entry: 2282 %retval = alloca ptr addrspace(4) 2283 %this.addr = alloca ptr addrspace(4) 2284 %__n.addr = alloca i64 2285 %retval.ascast = addrspacecast ptr %retval to ptr addrspace(4) 2286 store ptr addrspace(4) %this, ptr %this.addr 2287 store i64 %__n, ptr %__n.addr 2288 %this1 = load ptr addrspace(4), ptr %this.addr 2289 %_M_elems1 = bitcast ptr addrspace(4) %this1 to ptr addrspace(4) 2290 %0 = load i64, ptr %__n.addr 2291 %call = call spir_func align 4 ptr addrspace(4) @_ZNSt14__array_traitsIjLm4EE6_S_refERA4_Kjm(ptr addrspace(4) align 4 %_M_elems1, i64 %0) 2292 ret ptr addrspace(4) %call 2293} 2294 2295 2296define internal spir_func align 4 ptr addrspace(4) @_ZNSt14__array_traitsIjLm4EE6_S_refERA4_Kjm(ptr addrspace(4) align 4 %__t, i64 %__n) { 2297entry: 2298 %retval = alloca ptr addrspace(4) 2299 %__t.addr = alloca ptr addrspace(4) 2300 %__n.addr = alloca i64 2301 %retval.ascast = addrspacecast ptr %retval to ptr addrspace(4) 2302 store ptr addrspace(4) %__t, ptr %__t.addr 2303 store i64 %__n, ptr %__n.addr 2304 %0 = load ptr addrspace(4), ptr %__t.addr 2305 %1 = load i64, ptr %__n.addr 2306 %arrayidx = getelementptr inbounds nuw [4 x i32], ptr addrspace(4) %0, i64 0, i64 %1 2307 ret ptr addrspace(4) %arrayidx 2308} 2309 2310 2311define internal spir_func void @Bar50(ptr addrspace(4) align 4 %this) { 2312entry: 2313 %this.addr = alloca ptr addrspace(4) 2314 store ptr addrspace(4) %this, ptr %this.addr 2315 %this1 = load ptr addrspace(4), ptr %this.addr 2316 %0 = inttoptr i64 16 to ptr addrspace(4) 2317 br label %arrayinit.body 2318 2319arrayinit.body: ; preds = %arrayinit.body, %entry 2320 %lsr.iv = phi i64 [ %lsr.iv.next, %arrayinit.body ], [ 0, %entry ] 2321 %scevgep = getelementptr i8, ptr addrspace(4) %this1, i64 %lsr.iv 2322 store i32 0, ptr addrspace(4) %scevgep, align 4 2323 %lsr.iv.next = add nuw nsw i64 %lsr.iv, 4 2324 %lsr.iv.next1 = inttoptr i64 %lsr.iv.next to ptr addrspace(4) 2325 %arrayinit.done = icmp eq ptr addrspace(4) %lsr.iv.next1, %0 2326 br i1 %arrayinit.done, label %arrayinit.end2, label %arrayinit.body 2327 2328arrayinit.end2: ; preds = %arrayinit.body 2329 ret void 2330} 2331 2332 2333define internal spir_func void @Bar51(ptr addrspace(4) %this, ptr addrspace(4) align 4 %bits, ptr byval(%"range") %pos) { 2334entry: 2335 %this.addr = alloca ptr addrspace(4) 2336 %bits.addr = alloca ptr addrspace(4) 2337 %cur_pos = alloca i64 2338 %__range4 = alloca ptr addrspace(4) 2339 %__begin0 = alloca ptr addrspace(4) 2340 %__end0 = alloca ptr addrspace(4) 2341 %cleanup.dest.slot = alloca i32, align 4 2342 %elem = alloca ptr addrspace(4) 2343 %agg.tmp = alloca %"range" 2344 %agg.tmp.ascast = addrspacecast ptr %agg.tmp to ptr addrspace(4) 2345 store ptr addrspace(4) %this, ptr %this.addr 2346 store ptr addrspace(4) %bits, ptr %bits.addr 2347 %pos.ascast = addrspacecast ptr %pos to ptr addrspace(4) 2348 %this1 = load ptr addrspace(4), ptr %this.addr 2349 %call = call spir_func i64 @Bar52(ptr addrspace(4) %pos.ascast, i32 0) 2350 store i64 %call, ptr %cur_pos 2351 %0 = load ptr addrspace(4), ptr %bits.addr 2352 store ptr addrspace(4) %0, ptr %__range4 2353 %1 = load ptr addrspace(4), ptr %__range4 2354 %call2 = call spir_func ptr addrspace(4) @Bar53(ptr addrspace(4) align 4 %1) 2355 store ptr addrspace(4) %call2, ptr %__begin0 2356 %2 = load ptr addrspace(4), ptr %__range4 2357 %call3 = call spir_func ptr addrspace(4) @Bar54(ptr addrspace(4) align 4 %2) 2358 store ptr addrspace(4) %call3, ptr %__end0 2359 br label %for.cond 2360 2361for.cond: ; preds = %for.inc, %entry 2362 %3 = load ptr addrspace(4), ptr %__begin0 2363 %4 = load ptr addrspace(4), ptr %__end0 2364 %cmp = icmp ne ptr addrspace(4) %3, %4 2365 br i1 %cmp, label %for.body, label %for.cond.cleanup 2366 2367for.cond.cleanup: ; preds = %for.cond 2368 br label %for.end 2369 2370for.end: ; preds = %for.cond.cleanup 2371 ret void 2372 2373for.body: ; preds = %for.cond 2374 %5 = load ptr addrspace(4), ptr %__begin0 2375 store ptr addrspace(4) %5, ptr %elem 2376 %6 = load i64, ptr %cur_pos 2377 %call4 = call spir_func i32 @Bar55(ptr addrspace(4) %this1) 2378 %conv = zext i32 %call4 to i64 2379 %cmp5 = icmp ult i64 %6, %conv 2380 br i1 %cmp5, label %if.then, label %if.else 2381 2382if.else: ; preds = %for.body 2383 %7 = load ptr addrspace(4), ptr %elem 2384 store i32 0, ptr addrspace(4) %7, align 4 2385 br label %if.end 2386 2387if.then: ; preds = %for.body 2388 %8 = load ptr addrspace(4), ptr %elem 2389 %9 = load i64, ptr %cur_pos 2390 call spir_func void @Foo46(ptr addrspace(4) %agg.tmp.ascast, i64 %9) 2391 call spir_func void @Bar56(ptr addrspace(4) %this1, ptr addrspace(4) align 4 %8, ptr byval(%"range") %agg.tmp) 2392 %10 = load i64, ptr %cur_pos 2393 %add = add i64 %10, 32 2394 store i64 %add, ptr %cur_pos 2395 br label %if.end 2396 2397if.end: ; preds = %if.else, %if.then 2398 br label %for.inc 2399 2400for.inc: ; preds = %if.end 2401 %11 = load ptr addrspace(4), ptr %__begin0 2402 %incdec.ptr = getelementptr inbounds nuw i32, ptr addrspace(4) %11, i32 1 2403 store ptr addrspace(4) %incdec.ptr, ptr %__begin0 2404 br label %for.cond 2405} 2406 2407 2408define internal spir_func align 4 ptr addrspace(4) @Bar57(ptr addrspace(4) align 4 %this, i64 %index) { 2409entry: 2410 %retval = alloca ptr addrspace(4) 2411 %this.addr = alloca ptr addrspace(4) 2412 %index.addr = alloca i64 2413 %retval.ascast = addrspacecast ptr %retval to ptr addrspace(4) 2414 store ptr addrspace(4) %this, ptr %this.addr 2415 store i64 %index, ptr %index.addr 2416 %this1 = load ptr addrspace(4), ptr %this.addr 2417 %MData1 = bitcast ptr addrspace(4) %this1 to ptr addrspace(4) 2418 %0 = load i64, ptr %index.addr 2419 %arrayidx = getelementptr inbounds nuw [4 x i32], ptr addrspace(4) %MData1, i64 0, i64 %0 2420 ret ptr addrspace(4) %arrayidx 2421} 2422 2423 2424define internal spir_func i64 @Bar52(ptr addrspace(4) %this, i32 %dimension) { 2425entry: 2426 %this.addr.i = alloca ptr addrspace(4) 2427 %dimension.addr.i = alloca i32, align 4 2428 %retval = alloca i64 2429 %this.addr = alloca ptr addrspace(4) 2430 %dimension.addr = alloca i32, align 4 2431 %retval.ascast = addrspacecast ptr %retval to ptr addrspace(4) 2432 store ptr addrspace(4) %this, ptr %this.addr 2433 store i32 %dimension, ptr %dimension.addr, align 4 2434 %this1 = load ptr addrspace(4), ptr %this.addr 2435 %0 = load i32, ptr %dimension.addr, align 4 2436 store ptr addrspace(4) %this1, ptr %this.addr.i 2437 store i32 %0, ptr %dimension.addr.i, align 4 2438 %this1.i = load ptr addrspace(4), ptr %this.addr.i 2439 %common_array1 = bitcast ptr addrspace(4) %this1 to ptr addrspace(4) 2440 %1 = load i32, ptr %dimension.addr, align 4 2441 %idxprom = sext i32 %1 to i64 2442 %arrayidx = getelementptr inbounds [1 x i64], ptr addrspace(4) %common_array1, i64 0, i64 %idxprom 2443 %2 = load i64, ptr addrspace(4) %arrayidx 2444 ret i64 %2 2445} 2446 2447 2448define internal spir_func ptr addrspace(4) @Bar53(ptr addrspace(4) align 4 %this) { 2449entry: 2450 %retval = alloca ptr addrspace(4) 2451 %this.addr = alloca ptr addrspace(4) 2452 %retval.ascast = addrspacecast ptr %retval to ptr addrspace(4) 2453 store ptr addrspace(4) %this, ptr %this.addr 2454 2455 2456 %this.addr1 = bitcast ptr %this.addr to ptr 2457 %this.addr2 = bitcast ptr %this.addr1 to ptr 2458 %this1 = load ptr addrspace(4), ptr %this.addr2 2459 2460 2461 2462; %this1 = load ptr addrspace(4), ptr %this.addr 2463 %MData1 = bitcast ptr addrspace(4) %this1 to ptr addrspace(4) 2464 %arraydecay2 = bitcast ptr addrspace(4) %MData1 to ptr addrspace(4) 2465 ret ptr addrspace(4) %arraydecay2 2466} 2467 2468 2469define internal spir_func ptr addrspace(4) @Bar54(ptr addrspace(4) align 4 %this) { 2470entry: 2471 %retval = alloca ptr addrspace(4) 2472 %this.addr = alloca ptr addrspace(4) 2473 %retval.ascast = addrspacecast ptr %retval to ptr addrspace(4) 2474 store ptr addrspace(4) %this, ptr %this.addr 2475 2476 2477 %this.addr1 = bitcast ptr %this.addr to ptr 2478 %this.addr2 = bitcast ptr %this.addr1 to ptr 2479 %this1 = load ptr addrspace(4), ptr %this.addr2 2480 2481; %this1 = load ptr addrspace(4), ptr %this.addr 2482 %MData1 = bitcast ptr addrspace(4) %this1 to ptr addrspace(4) 2483 %arraydecay2 = bitcast ptr addrspace(4) %MData1 to ptr addrspace(4) 2484 %add.ptr = getelementptr inbounds nuw i32, ptr addrspace(4) %arraydecay2, i64 4 2485 ret ptr addrspace(4) %add.ptr 2486} 2487 2488 2489define internal spir_func i32 @Bar55(ptr addrspace(4) %this) { 2490entry: 2491 %retval = alloca i32, align 4 2492 %this.addr = alloca ptr addrspace(4) 2493 %retval.ascast = addrspacecast ptr %retval to ptr addrspace(4) 2494 store ptr addrspace(4) %this, ptr %this.addr 2495 %this1 = load ptr addrspace(4), ptr %this.addr 2496 %bits_num = getelementptr inbounds nuw %"ss_sub_group_mask", ptr addrspace(4) %this1, i32 0, i32 1 2497 %0 = load i64, ptr addrspace(4) %bits_num 2498 %conv = trunc i64 %0 to i32 2499 ret i32 %conv 2500} 2501 2502 2503define internal spir_func void @Bar56(ptr addrspace(4) %this, ptr addrspace(4) align 4 %bits, ptr byval(%"range") %pos) { 2504entry: 2505 %this.addr = alloca ptr addrspace(4) 2506 %bits.addr = alloca ptr addrspace(4) 2507 %Res = alloca i64 2508 store ptr addrspace(4) %this, ptr %this.addr 2509 store ptr addrspace(4) %bits, ptr %bits.addr 2510 %pos.ascast = addrspacecast ptr %pos to ptr addrspace(4) 2511 %this1 = load ptr addrspace(4), ptr %this.addr 2512 %Bits1 = bitcast ptr addrspace(4) %this1 to ptr addrspace(4) 2513 %0 = load i64, ptr addrspace(4) %Bits1 2514 store i64 %0, ptr %Res 2515 %bits_num = getelementptr inbounds nuw %"ss_sub_group_mask", ptr addrspace(4) %this1, i32 0, i32 1 2516 %1 = load i64, ptr addrspace(4) %bits_num 2517 %call = call spir_func i64 @Bar58(ptr addrspace(4) %this1, i64 %1) 2518 %2 = load i64, ptr %Res 2519 %and = and i64 %2, %call 2520 store i64 %and, ptr %Res 2521 %call2 = call spir_func i64 @Bar52(ptr addrspace(4) %pos.ascast, i32 0) 2522 %call3 = call spir_func i32 @Bar55(ptr addrspace(4) %this1) 2523 %conv = zext i32 %call3 to i64 2524 %cmp = icmp ult i64 %call2, %conv 2525 br i1 %cmp, label %if.then, label %if.else 2526 2527if.else: ; preds = %entry 2528 %3 = load ptr addrspace(4), ptr %bits.addr 2529 store i32 0, ptr addrspace(4) %3, align 4 2530 br label %if.end11 2531 2532if.then: ; preds = %entry 2533 %call4 = call spir_func i64 @Bar52(ptr addrspace(4) %pos.ascast, i32 0) 2534 %cmp5 = icmp ugt i64 %call4, 0 2535 br i1 %cmp5, label %if.then6, label %if.end 2536 2537if.then6: ; preds = %if.then 2538 %call7 = call spir_func i64 @Bar52(ptr addrspace(4) %pos.ascast, i32 0) 2539 %4 = load i64, ptr %Res 2540 %shr = lshr i64 %4, %call7 2541 store i64 %shr, ptr %Res 2542 br label %if.end 2543 2544if.end: ; preds = %if.then6, %if.then 2545 %call8 = call spir_func i64 @Bar58(ptr addrspace(4) %this1, i64 32) 2546 %5 = load i64, ptr %Res 2547 %and9 = and i64 %5, %call8 2548 store i64 %and9, ptr %Res 2549 %6 = load i64, ptr %Res 2550 %conv10 = trunc i64 %6 to i32 2551 %7 = load ptr addrspace(4), ptr %bits.addr 2552 store i32 %conv10, ptr addrspace(4) %7, align 4 2553 br label %if.end11 2554 2555if.end11: ; preds = %if.else, %if.end 2556 ret void 2557} 2558 2559 2560define internal spir_func i64 @Bar58(ptr addrspace(4) %this, i64 %bn) { 2561entry: 2562 %retval = alloca i64 2563 %this.addr = alloca ptr addrspace(4) 2564 %bn.addr = alloca i64 2565 %one = alloca i64 2566 %cleanup.dest.slot = alloca i32, align 4 2567 store ptr addrspace(4) %this, ptr %this.addr 2568 store i64 %bn, ptr %bn.addr 2569 %this1 = load ptr addrspace(4), ptr %this.addr 2570 %0 = load i64, ptr %bn.addr 2571 %cmp = icmp ule i64 %0, 64 2572 %1 = addrspacecast ptr addrspace(1) @.str.2 to ptr addrspace(4) 2573 %2 = addrspacecast ptr addrspace(1) @.str.1 to ptr addrspace(4) 2574 %3 = addrspacecast ptr addrspace(1) @__PRETTY_FUNCTION2 to ptr addrspace(4) 2575 br i1 %cmp, label %cond.end, label %cond.false 2576 2577cond.false: ; preds = %entry 2578 call spir_func void @__assert_fail(ptr addrspace(4) %1, ptr addrspace(4) %2, i32 327, ptr addrspace(4) %3) 2579 br label %cond.end 2580 2581cond.end: ; preds = %entry, %cond.false 2582 store i64 1, ptr %one 2583 %4 = load i64, ptr %bn.addr 2584 %cmp2 = icmp eq i64 %4, 64 2585 br i1 %cmp2, label %if.then, label %if.end 2586 2587if.end: ; preds = %cond.end 2588 %5 = load i64, ptr %one 2589 %6 = load i64, ptr %bn.addr 2590 %shl = shl i64 %5, %6 2591 %7 = load i64, ptr %one 2592 %sub3 = sub i64 %shl, %7 2593 store i64 %sub3, ptr %retval 2594 store i32 1, ptr %cleanup.dest.slot, align 4 2595 br label %cleanup 2596 2597if.then: ; preds = %cond.end 2598 %8 = load i64, ptr %one 2599 %sub = sub i64 0, %8 2600 store i64 %sub, ptr %retval 2601 store i32 1, ptr %cleanup.dest.slot, align 4 2602 br label %cleanup 2603 2604cleanup: ; preds = %if.end, %if.then 2605 %9 = load i64, ptr %retval 2606 ret i64 %9 2607} 2608 2609 2610 2611 2612define internal spir_func void @Foo11(ptr addrspace(4) %this) { 2613entry: 2614 %this.addr = alloca ptr addrspace(4) 2615 store ptr addrspace(4) %this, ptr %this.addr 2616 %this1 = load ptr addrspace(4), ptr %this.addr 2617 call spir_func void @Foo60(ptr addrspace(4) %this1, i64 0) 2618 ret void 2619} 2620 2621 2622define internal spir_func void @Foo60(ptr addrspace(4) %this, i64 %dim0) { 2623entry: 2624 %this.addr = alloca ptr addrspace(4) 2625 %dim0.addr = alloca i64 2626 store ptr addrspace(4) %this, ptr %this.addr 2627 store i64 %dim0, ptr %dim0.addr 2628 %this1 = load ptr addrspace(4), ptr %this.addr 2629 %common_array1 = bitcast ptr addrspace(4) %this1 to ptr addrspace(4) 2630 %0 = load i64, ptr %dim0.addr 2631 store i64 %0, ptr addrspace(4) %common_array1 2632 ret void 2633} 2634 2635 2636define internal spir_func i32 @Foo59(ptr byval(%"tangle_group") %g, i32 %x, ptr byval(%"range") %local_id) { 2637entry: 2638 %retval = alloca i32, align 4 2639 %x.addr = alloca i32, align 4 2640 %LocalId = alloca i32, align 4 2641 %agg.tmp = alloca %"tangle_group" 2642 %agg.tmp1 = alloca %"range" 2643 %cleanup.dest.slot = alloca i32, align 4 2644 %retval.ascast = addrspacecast ptr %retval to ptr addrspace(4) 2645 %x.addr.ascast = addrspacecast ptr %x.addr to ptr addrspace(4) 2646 %g.ascast = addrspacecast ptr %g to ptr addrspace(4) 2647 store i32 %x, ptr %x.addr, align 4 2648 %call = call spir_func i32 @Foo48(ptr byval(%"tangle_group") %agg.tmp, ptr byval(%"range") %agg.tmp1) 2649 store i32 %call, ptr %LocalId, align 4 2650 %0 = addrspacecast ptr addrspace(1) @_ZSt6ignore to ptr addrspace(4) 2651 %call2 = call spir_func align 1 ptr addrspace(4) @Bar15(ptr addrspace(4) align 1 %0, ptr addrspace(4) %g.ascast) 2652 %call3 = call spir_func i32 @Foo49(ptr addrspace(4) align 4 %x.addr.ascast) 2653 %1 = load i32, ptr %LocalId, align 4 2654 %call4 = call spir_func i32 @Foo50(i32 3, i32 %call3, i32 %1) 2655 ret i32 %call4 2656} 2657 2658 2659define internal spir_func i32 @Foo47(ptr byval(%"ss_sub_group_mask") %Mask) { 2660entry: 2661 %retval = alloca i32, align 4 2662 %MemberMask = alloca %"vec.16", align 16 2663 %agg.tmp = alloca %"ss_sub_group_mask" 2664 %cleanup.dest.slot = alloca i32, align 4 2665 %retval.ascast = addrspacecast ptr %retval to ptr addrspace(4) 2666 %MemberMask.ascast = addrspacecast ptr %MemberMask to ptr addrspace(4) 2667 call spir_func void @Bar19(ptr addrspace(4) dead_on_unwind writable sret(%"vec.16") align 16 %MemberMask.ascast, ptr byval(%"ss_sub_group_mask") %agg.tmp) 2668 %call = call spir_func <4 x i32> @Bar59(ptr addrspace(4) align 16 %MemberMask.ascast) 2669 %call1 = call spir_func i32 @_Z37__spirv_GroupNonUniformBallotBitCountN5__spv5Scope4FlagEiDv4_j(i32 3, i32 2, <4 x i32> %call) 2670 ret i32 %call1 2671} 2672 2673 2674define internal spir_func <4 x i32> @Bar59(ptr addrspace(4) align 16 %x) { 2675entry: 2676 %retval = alloca <4 x i32>, align 16 2677 %x.addr = alloca ptr addrspace(4) 2678 %retval.ascast = addrspacecast ptr %retval to ptr addrspace(4) 2679 store ptr addrspace(4) %x, ptr %x.addr 2680 %0 = load ptr addrspace(4), ptr %x.addr 2681 %call = call spir_func <4 x i32> @Bar60(ptr addrspace(4) align 16 %0) 2682 ret <4 x i32> %call 2683} 2684 2685declare dso_local spir_func i32 @_Z37__spirv_GroupNonUniformBallotBitCountN5__spv5Scope4FlagEiDv4_j(i32, i32, <4 x i32>) 2686 2687 2688define internal spir_func <4 x i32> @Bar60(ptr addrspace(4) align 16 %from) { 2689entry: 2690 %retval = alloca <4 x i32>, align 16 2691 %from.addr = alloca ptr addrspace(4) 2692 %retval.ascast = addrspacecast ptr %retval to ptr addrspace(4) 2693 store ptr addrspace(4) %from, ptr %from.addr 2694 %0 = load ptr addrspace(4), ptr %from.addr 2695 %1 = load <4 x i32>, ptr addrspace(4) %0, align 16 2696 ret <4 x i32> %1 2697} 2698 2699 2700define internal spir_func i32 @Foo52(ptr byval(%"tangle_group") %g, i32 %x, i32 %delta) { 2701entry: 2702 %retval = alloca i32, align 4 2703 %x.addr = alloca i32, align 4 2704 %delta.addr = alloca i32, align 4 2705 %TargetLocalId = alloca %"range" 2706 %TargetId = alloca i32, align 4 2707 %agg.tmp = alloca %"tangle_group" 2708 %agg.tmp3 = alloca %"range" 2709 %cleanup.dest.slot = alloca i32, align 4 2710 %retval.ascast = addrspacecast ptr %retval to ptr addrspace(4) 2711 %x.addr.ascast = addrspacecast ptr %x.addr to ptr addrspace(4) 2712 %TargetLocalId.ascast = addrspacecast ptr %TargetLocalId to ptr addrspace(4) 2713 %g.ascast = addrspacecast ptr %g to ptr addrspace(4) 2714 store i32 %x, ptr %x.addr, align 4 2715 store i32 %delta, ptr %delta.addr, align 4 2716 call spir_func void @Foo51(ptr addrspace(4) dead_on_unwind writable sret(%"range") %TargetLocalId.ascast, ptr addrspace(4) %g.ascast) 2717 %call = call spir_func ptr addrspace(4) @Foo16(ptr addrspace(4) %TargetLocalId.ascast, i32 0) 2718 %0 = load i64, ptr addrspace(4) %call 2719 %1 = load i32, ptr %delta.addr, align 4 2720 %conv = zext i32 %1 to i64 2721 %cmp = icmp uge i64 %0, %conv 2722 br i1 %cmp, label %if.then, label %if.end 2723 2724if.then: ; preds = %entry 2725 %2 = load i32, ptr %delta.addr, align 4 2726 %conv1 = zext i32 %2 to i64 2727 %call2 = call spir_func ptr addrspace(4) @Foo16(ptr addrspace(4) %TargetLocalId.ascast, i32 0) 2728 %3 = load i64, ptr addrspace(4) %call2 2729 %sub = sub i64 %3, %conv1 2730 store i64 %sub, ptr addrspace(4) %call2 2731 br label %if.end 2732 2733if.end: ; preds = %if.then, %entry 2734 %call4 = call spir_func i32 @Foo48(ptr byval(%"tangle_group") %agg.tmp, ptr byval(%"range") %agg.tmp3) 2735 store i32 %call4, ptr %TargetId, align 4 2736 %call5 = call spir_func i32 @Foo49(ptr addrspace(4) align 4 %x.addr.ascast) 2737 %4 = load i32, ptr %TargetId, align 4 2738 %call6 = call spir_func i32 @Foo50(i32 3, i32 %call5, i32 %4) 2739 ret i32 %call6 2740} 2741 2742 2743define internal spir_func ptr addrspace(4) @Foo16(ptr addrspace(4) %this, i32 %dimension) { 2744entry: 2745 %this.addr.i = alloca ptr addrspace(4) 2746 %dimension.addr.i = alloca i32, align 4 2747 %retval = alloca ptr addrspace(4) 2748 %this.addr = alloca ptr addrspace(4) 2749 %dimension.addr = alloca i32, align 4 2750 %retval.ascast = addrspacecast ptr %retval to ptr addrspace(4) 2751 store ptr addrspace(4) %this, ptr %this.addr 2752 store i32 %dimension, ptr %dimension.addr, align 4 2753 %this1 = load ptr addrspace(4), ptr %this.addr 2754 %0 = load i32, ptr %dimension.addr, align 4 2755 store ptr addrspace(4) %this1, ptr %this.addr.i 2756 store i32 %0, ptr %dimension.addr.i, align 4 2757 %this1.i = load ptr addrspace(4), ptr %this.addr.i 2758 %common_array1 = bitcast ptr addrspace(4) %this1 to ptr addrspace(4) 2759 %1 = load i32, ptr %dimension.addr, align 4 2760 %idxprom = sext i32 %1 to i64 2761 %arrayidx = getelementptr inbounds [1 x i64], ptr addrspace(4) %common_array1, i64 0, i64 %idxprom 2762 ret ptr addrspace(4) %arrayidx 2763} 2764 2765 2766define internal spir_func i32 @Foo72(ptr byval(%"tangle_group") %g, i32 %x, i32 %delta) { 2767entry: 2768 %retval = alloca i32, align 4 2769 %x.addr = alloca i32, align 4 2770 %delta.addr = alloca i32, align 4 2771 %TargetLocalId = alloca %"range" 2772 %TargetId = alloca i32, align 4 2773 %agg.tmp = alloca %"tangle_group" 2774 %agg.tmp6 = alloca %"range" 2775 %cleanup.dest.slot = alloca i32, align 4 2776 %retval.ascast = addrspacecast ptr %retval to ptr addrspace(4) 2777 %x.addr.ascast = addrspacecast ptr %x.addr to ptr addrspace(4) 2778 %TargetLocalId.ascast = addrspacecast ptr %TargetLocalId to ptr addrspace(4) 2779 %g.ascast = addrspacecast ptr %g to ptr addrspace(4) 2780 store i32 %x, ptr %x.addr, align 4 2781 store i32 %delta, ptr %delta.addr, align 4 2782 call spir_func void @Foo51(ptr addrspace(4) dead_on_unwind writable sret(%"range") %TargetLocalId.ascast, ptr addrspace(4) %g.ascast) 2783 %call = call spir_func ptr addrspace(4) @Foo16(ptr addrspace(4) %TargetLocalId.ascast, i32 0) 2784 %0 = load i64, ptr addrspace(4) %call 2785 %1 = load i32, ptr %delta.addr, align 4 2786 %conv = zext i32 %1 to i64 2787 %add = add i64 %0, %conv 2788 %call1 = call spir_func i32 @Bar61(ptr addrspace(4) %g.ascast) 2789 %conv2 = zext i32 %call1 to i64 2790 %cmp = icmp ult i64 %add, %conv2 2791 br i1 %cmp, label %if.then, label %if.end 2792 2793if.then: ; preds = %entry 2794 %2 = load i32, ptr %delta.addr, align 4 2795 %conv3 = zext i32 %2 to i64 2796 %call4 = call spir_func ptr addrspace(4) @Foo16(ptr addrspace(4) %TargetLocalId.ascast, i32 0) 2797 %3 = load i64, ptr addrspace(4) %call4 2798 %add5 = add i64 %3, %conv3 2799 store i64 %add5, ptr addrspace(4) %call4 2800 br label %if.end 2801 2802if.end: ; preds = %if.then, %entry 2803 %call7 = call spir_func i32 @Foo48(ptr byval(%"tangle_group") %agg.tmp, ptr byval(%"range") %agg.tmp6) 2804 store i32 %call7, ptr %TargetId, align 4 2805 %call8 = call spir_func i32 @Foo49(ptr addrspace(4) align 4 %x.addr.ascast) 2806 %4 = load i32, ptr %TargetId, align 4 2807 %call9 = call spir_func i32 @Foo50(i32 3, i32 %call8, i32 %4) 2808 ret i32 %call9 2809} 2810 2811 2812define internal spir_func i32 @Bar61(ptr addrspace(4) %this) { 2813entry: 2814 %retval = alloca i32, align 4 2815 %this.addr = alloca ptr addrspace(4) 2816 %ref.tmp = alloca %"range" 2817 %retval.ascast = addrspacecast ptr %retval to ptr addrspace(4) 2818 %ref.tmp.ascast = addrspacecast ptr %ref.tmp to ptr addrspace(4) 2819 store ptr addrspace(4) %this, ptr %this.addr 2820 %this1 = load ptr addrspace(4), ptr %this.addr 2821 call spir_func void @Foo97(ptr addrspace(4) dead_on_unwind writable sret(%"range") %ref.tmp.ascast, ptr addrspace(4) %this1) 2822 %call = call spir_func ptr addrspace(4) @Foo16(ptr addrspace(4) %ref.tmp.ascast, i32 0) 2823 %0 = load i64, ptr addrspace(4) %call 2824 %conv = trunc i64 %0 to i32 2825 ret i32 %conv 2826} 2827 2828 2829define internal spir_func void @Foo97(ptr addrspace(4) dead_on_unwind noalias writable sret(%"range") %agg.result, ptr addrspace(4) %this) { 2830entry: 2831 %this.addr = alloca ptr addrspace(4) 2832 store ptr addrspace(4) %this, ptr %this.addr 2833 %this1 = load ptr addrspace(4), ptr %this.addr 2834 %Mask1 = bitcast ptr addrspace(4) %this1 to ptr addrspace(4) 2835 %call = call spir_func i32 @Bar62(ptr addrspace(4) %Mask1) 2836 %conv = zext i32 %call to i64 2837 call spir_func void @Foo9(ptr addrspace(4) %agg.result, i64 %conv) 2838 ret void 2839} 2840 2841 2842define internal spir_func i32 @Bar62(ptr addrspace(4) %this) { 2843entry: 2844 %retval = alloca i32, align 4 2845 %this.addr = alloca ptr addrspace(4) 2846 %count = alloca i32, align 4 2847 %word = alloca i64 2848 %cleanup.dest.slot = alloca i32, align 4 2849 %retval.ascast = addrspacecast ptr %retval to ptr addrspace(4) 2850 store ptr addrspace(4) %this, ptr %this.addr 2851 %this1 = load ptr addrspace(4), ptr %this.addr 2852 store i32 0, ptr %count, align 4 2853 %Bits1 = bitcast ptr addrspace(4) %this1 to ptr addrspace(4) 2854 %0 = load i64, ptr addrspace(4) %Bits1 2855 %bits_num = getelementptr inbounds nuw %"ss_sub_group_mask", ptr addrspace(4) %this1, i32 0, i32 1 2856 %1 = load i64, ptr addrspace(4) %bits_num 2857 %call = call spir_func i64 @Bar58(ptr addrspace(4) %this1, i64 %1) 2858 %and = and i64 %0, %call 2859 store i64 %and, ptr %word 2860 br label %while.cond 2861 2862while.cond: ; preds = %while.body, %entry 2863 %2 = load i64, ptr %word 2864 %tobool = icmp ne i64 %2, 0 2865 br i1 %tobool, label %while.body, label %while.end 2866 2867while.end: ; preds = %while.cond 2868 %3 = load i32, ptr %count, align 4 2869 ret i32 %3 2870 2871while.body: ; preds = %while.cond 2872 %4 = load i64, ptr %word 2873 %sub = sub i64 %4, 1 2874 %5 = load i64, ptr %word 2875 %and2 = and i64 %5, %sub 2876 store i64 %and2, ptr %word 2877 %6 = load i32, ptr %count, align 4 2878 %inc = add i32 %6, 1 2879 store i32 %inc, ptr %count, align 4 2880 br label %while.cond 2881} 2882 2883 2884define internal spir_func void @Foo9(ptr addrspace(4) %this, i64 %dim0) unnamed_addr { 2885entry: 2886 %this.addr = alloca ptr addrspace(4) 2887 %dim0.addr = alloca i64 2888 store ptr addrspace(4) %this, ptr %this.addr 2889 store i64 %dim0, ptr %dim0.addr 2890 %this1 = load ptr addrspace(4), ptr %this.addr 2891 %0 = load i64, ptr %dim0.addr 2892 call spir_func void @Foo60(ptr addrspace(4) %this1, i64 %0) 2893 ret void 2894} 2895 2896 2897define internal spir_func i32 @Foo61(ptr byval(%"tangle_group") %g, ptr byval(%"nd_item") align 1 %0, i32 %x, ptr byval(%"nd_item") align 1 %1){ 2898entry: 2899 %retval = alloca i32, align 4 2900 %x.addr = alloca i32, align 4 2901 %agg.tmp = alloca %"tangle_group" 2902 %agg.tmp1 = alloca %"nd_item", align 1 2903 %agg.tmp2 = alloca %"nd_item", align 1 2904 %retval.ascast = addrspacecast ptr %retval to ptr addrspace(4) 2905 %2 = addrspacecast ptr %0 to ptr addrspace(4) 2906 store i32 %x, ptr %x.addr, align 4 2907 %3 = addrspacecast ptr %1 to ptr addrspace(4) 2908 %4 = load i32, ptr %x.addr, align 4 2909 %call = call spir_func i32 @Bar63(ptr byval(%"tangle_group") %agg.tmp, ptr byval(%"nd_item") align 1 %agg.tmp1, i32 %4, ptr byval(%"nd_item") align 1 %agg.tmp2) 2910 ret i32 %call 2911} 2912 2913 2914define internal spir_func i32 @Bar63(ptr byval(%"tangle_group") %g, ptr byval(%"nd_item") align 1 %0, i32 %x, ptr byval(%"nd_item") align 1 %1){ 2915entry: 2916 %retval = alloca i32, align 4 2917 %x.addr = alloca i32, align 4 2918 %agg.tmp = alloca %"tangle_group" 2919 %retval.ascast = addrspacecast ptr %retval to ptr addrspace(4) 2920 %2 = addrspacecast ptr %0 to ptr addrspace(4) 2921 store i32 %x, ptr %x.addr, align 4 2922 %3 = addrspacecast ptr %1 to ptr addrspace(4) 2923 %4 = load i32, ptr %x.addr, align 4 2924 %call = call spir_func i32 @Bar64(ptr byval(%"tangle_group") %agg.tmp, i32 %4) 2925 ret i32 %call 2926} 2927 2928 2929define internal spir_func i32 @Bar64(ptr byval(%"tangle_group") %0, i32 %x) { 2930entry: 2931 %retval = alloca i32, align 4 2932 %x.addr = alloca i32, align 4 2933 %Arg = alloca i32, align 4 2934 %Ret = alloca i32, align 4 2935 %cleanup.dest.slot = alloca i32, align 4 2936 %retval.ascast = addrspacecast ptr %retval to ptr addrspace(4) 2937 %1 = addrspacecast ptr %0 to ptr addrspace(4) 2938 store i32 %x, ptr %x.addr, align 4 2939 %2 = load i32, ptr %x.addr, align 4 2940 store i32 %2, ptr %Arg, align 4 2941 %3 = load i32, ptr %Arg, align 4 2942 %call = call spir_func i32 @_Z27__spirv_GroupNonUniformIAddIiET_N5__spv5Scope4FlagEjS0_(i32 3, i32 1, i32 %3) 2943 store i32 %call, ptr %Ret, align 4 2944 %4 = load i32, ptr %Ret, align 4 2945 ret i32 %4 2946} 2947 2948declare dso_local spir_func i32 @_Z27__spirv_GroupNonUniformIAddIiET_N5__spv5Scope4FlagEjS0_(i32, i32, i32) 2949 2950 2951define internal spir_func i32 @Bar12(ptr byval(%"tangle_group") %g, ptr byval(%"nd_item") align 1 %0, i32 %x, ptr byval(%"nd_item") align 1 %1){ 2952entry: 2953 %retval = alloca i32, align 4 2954 %x.addr = alloca i32, align 4 2955 %agg.tmp = alloca %"tangle_group" 2956 %agg.tmp1 = alloca %"nd_item", align 1 2957 %agg.tmp2 = alloca %"nd_item", align 1 2958 %retval.ascast = addrspacecast ptr %retval to ptr addrspace(4) 2959 %2 = addrspacecast ptr %0 to ptr addrspace(4) 2960 store i32 %x, ptr %x.addr, align 4 2961 %3 = addrspacecast ptr %1 to ptr addrspace(4) 2962 %4 = load i32, ptr %x.addr, align 4 2963 %call = call spir_func i32 @Bar65(ptr byval(%"tangle_group") %agg.tmp, ptr byval(%"nd_item") align 1 %agg.tmp1, i32 %4, ptr byval(%"nd_item") align 1 %agg.tmp2) 2964 ret i32 %call 2965} 2966 2967 2968define internal spir_func i32 @Bar65(ptr byval(%"tangle_group") %g, ptr byval(%"nd_item") align 1 %0, i32 %x, ptr byval(%"nd_item") align 1 %1){ 2969entry: 2970 %retval = alloca i32, align 4 2971 %x.addr = alloca i32, align 4 2972 %agg.tmp = alloca %"tangle_group" 2973 %retval.ascast = addrspacecast ptr %retval to ptr addrspace(4) 2974 %2 = addrspacecast ptr %0 to ptr addrspace(4) 2975 store i32 %x, ptr %x.addr, align 4 2976 %3 = addrspacecast ptr %1 to ptr addrspace(4) 2977 %4 = load i32, ptr %x.addr, align 4 2978 %call = call spir_func i32 @Bar66(ptr byval(%"tangle_group") %agg.tmp, i32 %4) 2979 ret i32 %call 2980} 2981 2982 2983define internal spir_func i32 @Bar66(ptr byval(%"tangle_group") %0, i32 %x) { 2984entry: 2985 %retval = alloca i32, align 4 2986 %x.addr = alloca i32, align 4 2987 %Arg = alloca i32, align 4 2988 %Ret = alloca i32, align 4 2989 %cleanup.dest.slot = alloca i32, align 4 2990 %retval.ascast = addrspacecast ptr %retval to ptr addrspace(4) 2991 %1 = addrspacecast ptr %0 to ptr addrspace(4) 2992 store i32 %x, ptr %x.addr, align 4 2993 %2 = load i32, ptr %x.addr, align 4 2994 store i32 %2, ptr %Arg, align 4 2995 %3 = load i32, ptr %Arg, align 4 2996 %call = call spir_func i32 @_Z27__spirv_GroupNonUniformIAddIiET_N5__spv5Scope4FlagEjS0_(i32 3, i32 2, i32 %3) 2997 store i32 %call, ptr %Ret, align 4 2998 %4 = load i32, ptr %Ret, align 4 2999 ret i32 %4 3000} 3001 3002 3003define internal spir_func i32 @Bar11(ptr byval(%"tangle_group") %g, ptr byval(%"nd_item") align 1 %0, i32 %x, ptr byval(%"nd_item") align 1 %1){ 3004entry: 3005 %retval = alloca i32, align 4 3006 %x.addr = alloca i32, align 4 3007 %agg.tmp = alloca %"tangle_group" 3008 %agg.tmp1 = alloca %"nd_item", align 1 3009 %agg.tmp2 = alloca %"nd_item", align 1 3010 %retval.ascast = addrspacecast ptr %retval to ptr addrspace(4) 3011 %2 = addrspacecast ptr %0 to ptr addrspace(4) 3012 store i32 %x, ptr %x.addr, align 4 3013 %3 = addrspacecast ptr %1 to ptr addrspace(4) 3014 %4 = load i32, ptr %x.addr, align 4 3015 %call = call spir_func i32 @Bar67(ptr byval(%"tangle_group") %agg.tmp, ptr byval(%"nd_item") align 1 %agg.tmp1, i32 %4, ptr byval(%"nd_item") align 1 %agg.tmp2) 3016 ret i32 %call 3017} 3018 3019 3020define internal spir_func i32 @Bar67(ptr byval(%"tangle_group") %g, ptr byval(%"nd_item") align 1 %0, i32 %x, ptr byval(%"nd_item") align 1 %1){ 3021entry: 3022 %retval = alloca i32, align 4 3023 %x.addr = alloca i32, align 4 3024 %agg.tmp = alloca %"tangle_group" 3025 %retval.ascast = addrspacecast ptr %retval to ptr addrspace(4) 3026 %2 = addrspacecast ptr %0 to ptr addrspace(4) 3027 store i32 %x, ptr %x.addr, align 4 3028 %3 = addrspacecast ptr %1 to ptr addrspace(4) 3029 %4 = load i32, ptr %x.addr, align 4 3030 %call = call spir_func i32 @Bar68(ptr byval(%"tangle_group") %agg.tmp, i32 %4) 3031 ret i32 %call 3032} 3033 3034 3035define internal spir_func i32 @Bar68(ptr byval(%"tangle_group") %0, i32 %x) { 3036entry: 3037 %retval = alloca i32, align 4 3038 %x.addr = alloca i32, align 4 3039 %Arg = alloca i32, align 4 3040 %Ret = alloca i32, align 4 3041 %cleanup.dest.slot = alloca i32, align 4 3042 %retval.ascast = addrspacecast ptr %retval to ptr addrspace(4) 3043 %1 = addrspacecast ptr %0 to ptr addrspace(4) 3044 store i32 %x, ptr %x.addr, align 4 3045 %2 = load i32, ptr %x.addr, align 4 3046 store i32 %2, ptr %Arg, align 4 3047 %3 = load i32, ptr %Arg, align 4 3048 %call = call spir_func i32 @_Z27__spirv_GroupNonUniformIAddIiET_N5__spv5Scope4FlagEjS0_(i32 3, i32 0, i32 %3) 3049 store i32 %call, ptr %Ret, align 4 3050 %4 = load i32, ptr %Ret, align 4 3051 ret i32 %4 3052} 3053 3054 3055define internal spir_func zeroext i1 @Foo66(ptr byval(%"tangle_group") %0, i1 zeroext %pred) { 3056entry: 3057 %retval = alloca i1, align 1 3058 %pred.addr = alloca i8, align 1 3059 %retval.ascast = addrspacecast ptr %retval to ptr addrspace(4) 3060 %1 = addrspacecast ptr %0 to ptr addrspace(4) 3061 %storedv = zext i1 %pred to i8 3062 store i8 %storedv, ptr %pred.addr, align 1 3063 %2 = load i8, ptr %pred.addr, align 1 3064 %loadedv = trunc i8 %2 to i1 3065 %call = call spir_func zeroext i1 @Foo99(i32 3, i1 zeroext %loadedv) 3066 ret i1 %call 3067} 3068 3069declare dso_local spir_func zeroext i1 @Foo99(i32, i1 zeroext) 3070 3071 3072define internal spir_func zeroext i1 @Bar10(ptr byval(%"tangle_group") %0, i1 zeroext %pred) { 3073entry: 3074 %retval = alloca i1, align 1 3075 %pred.addr = alloca i8, align 1 3076 %retval.ascast = addrspacecast ptr %retval to ptr addrspace(4) 3077 %1 = addrspacecast ptr %0 to ptr addrspace(4) 3078 %storedv = zext i1 %pred to i8 3079 store i8 %storedv, ptr %pred.addr, align 1 3080 %2 = load i8, ptr %pred.addr, align 1 3081 %loadedv = trunc i8 %2 to i1 3082 %call = call spir_func zeroext i1 @_Z26__spirv_GroupNonUniformAnyN5__spv5Scope4FlagEb(i32 3, i1 zeroext %loadedv) 3083 ret i1 %call 3084} 3085 3086declare dso_local spir_func zeroext i1 @_Z26__spirv_GroupNonUniformAnyN5__spv5Scope4FlagEb(i32, i1 zeroext) 3087 3088 3089define internal spir_func void @Foo98(ptr addrspace(4) dead_on_unwind noalias writable sret(%"range") %agg.result, ptr byval(%"range") %0, i64 %linear_id) { 3090entry: 3091 %linear_id.addr = alloca i64 3092 %1 = addrspacecast ptr %0 to ptr addrspace(4) 3093 store i64 %linear_id, ptr %linear_id.addr 3094 %2 = load i64, ptr %linear_id.addr 3095 call spir_func void @Foo46(ptr addrspace(4) %agg.result, i64 %2) 3096 ret void 3097} 3098 3099 3100define internal spir_func i32 @Bar69(ptr byval(%"tangle_group") %g, i32 %x, ptr byval(%"range") %local_id) { 3101entry: 3102 %retval = alloca i32, align 4 3103 %x.addr = alloca i32, align 4 3104 %agg.tmp = alloca %"tangle_group" 3105 %agg.tmp1 = alloca %"range" 3106 %retval.ascast = addrspacecast ptr %retval to ptr addrspace(4) 3107 store i32 %x, ptr %x.addr, align 4 3108 %0 = load i32, ptr %x.addr, align 4 3109 %call = call spir_func i32 @Bar70(ptr byval(%"tangle_group") %agg.tmp, i32 %0, ptr byval(%"range") %agg.tmp1) 3110 ret i32 %call 3111} 3112 3113 3114define internal spir_func i32 @Bar70(ptr byval(%"tangle_group") %g, i32 %x, ptr byval(%"range") %local_id) { 3115entry: 3116 %retval = alloca i32, align 4 3117 %x.addr = alloca i32, align 4 3118 %agg.tmp = alloca %"tangle_group" 3119 %VecId = alloca %"range" 3120 %OCLX = alloca i32, align 4 3121 %WideOCLX = alloca i32, align 4 3122 %OCLId = alloca i64 3123 %retval.ascast = addrspacecast ptr %retval to ptr addrspace(4) 3124 %VecId.ascast = addrspacecast ptr %VecId to ptr addrspace(4) 3125 %OCLX.ascast = addrspacecast ptr %OCLX to ptr addrspace(4) 3126 %WideOCLX.ascast = addrspacecast ptr %WideOCLX to ptr addrspace(4) 3127 %OCLId.ascast = addrspacecast ptr %OCLId to ptr addrspace(4) 3128 store i32 %x, ptr %x.addr, align 4 3129 %local_id.ascast = addrspacecast ptr %local_id to ptr addrspace(4) 3130 %0 = load i32, ptr %x.addr, align 4 3131 %call = call spir_func ptr addrspace(4) @Foo16(ptr addrspace(4) %local_id.ascast, i32 0) 3132 %1 = load i64, ptr addrspace(4) %call 3133 %call1 = call spir_func i32 @Bar71(ptr byval(%"tangle_group") %agg.tmp, i32 %0, i64 %1) 3134 ret i32 %call1 3135} 3136 3137 3138define internal spir_func i32 @Bar71(ptr byval(%"tangle_group") %g, i32 %x, i64 %local_id) { 3139entry: 3140 %retval = alloca i32, align 4 3141 %x.addr = alloca i32, align 4 3142 %local_id.addr = alloca i64 3143 %LocalId = alloca i32, align 4 3144 %agg.tmp = alloca %"tangle_group" 3145 %GroupLocalId = alloca i32, align 4 3146 %OCLX = alloca i32, align 4 3147 %WideOCLX = alloca i32, align 4 3148 %OCLId = alloca i32, align 4 3149 %cleanup.dest.slot = alloca i32, align 4 3150 %retval.ascast = addrspacecast ptr %retval to ptr addrspace(4) 3151 %x.addr.ascast = addrspacecast ptr %x.addr to ptr addrspace(4) 3152 %GroupLocalId.ascast = addrspacecast ptr %GroupLocalId to ptr addrspace(4) 3153 store i32 %x, ptr %x.addr, align 4 3154 store i64 %local_id, ptr %local_id.addr 3155 %0 = load i64, ptr %local_id.addr 3156 %conv = trunc i64 %0 to i32 3157 %call = call spir_func i32 @Bar17(ptr byval(%"tangle_group") %agg.tmp, i32 %conv) 3158 store i32 %call, ptr %LocalId, align 4 3159 %1 = load i32, ptr %LocalId, align 4 3160 store i32 %1, ptr %GroupLocalId, align 4 3161 %call1 = call spir_func i32 @Foo49(ptr addrspace(4) align 4 %x.addr.ascast) 3162 store i32 %call1, ptr %OCLX, align 4 3163 %2 = load i32, ptr %OCLX, align 4 3164 store i32 %2, ptr %WideOCLX, align 4 3165 %call2 = call spir_func i32 @Foo49(ptr addrspace(4) align 4 %GroupLocalId.ascast) 3166 store i32 %call2, ptr %OCLId, align 4 3167 %3 = load i32, ptr %WideOCLX, align 4 3168 %4 = load i32, ptr %OCLId, align 4 3169 %call3 = call spir_func i32 @_Z32__spirv_GroupNonUniformBroadcastIjjET_N5__spv5Scope4FlagES0_T0_(i32 3, i32 %3, i32 %4) 3170 ret i32 %call3 3171} 3172 3173declare dso_local spir_func i32 @_Z32__spirv_GroupNonUniformBroadcastIjjET_N5__spv5Scope4FlagES0_T0_(i32, i32, i32) 3174 3175 3176define internal spir_func void @Foo96(ptr addrspace(4) dead_on_unwind noalias writable sret(%"range") %agg.result, ptr addrspace(4) align 1 %this) { 3177entry: 3178 %this.addr = alloca ptr addrspace(4) 3179 store ptr addrspace(4) %this, ptr %this.addr 3180 %this1 = load ptr addrspace(4), ptr %this.addr 3181 %call = call spir_func i32 @_Z33__spirv_SubgroupLocalInvocationIdv() 3182 %conv = zext i32 %call to i64 3183 call spir_func void @Foo46(ptr addrspace(4) %agg.result, i64 %conv) 3184 ret void 3185} 3186 3187 3188define internal spir_func i32 @_Z33__spirv_SubgroupLocalInvocationIdv() { 3189entry: 3190 %retval = alloca i32, align 4 3191 %retval.ascast = addrspacecast ptr %retval to ptr addrspace(4) 3192 %0 = load i32, ptr addrspace(1) @__spirv_BuiltInSubgroupLocalInvocationId, align 4 3193 ret i32 %0 3194} 3195 3196 3197define internal spir_func i64 @Foo77(ptr addrspace(4) %this, ptr byval(%"range") %Id) { 3198entry: 3199 %retval = alloca i64 3200 %this.addr = alloca ptr addrspace(4) 3201 %Result = alloca i64 3202 %ref.tmp = alloca %class.anon.15 3203 %cleanup.dest.slot = alloca i32, align 4 3204 %retval.ascast = addrspacecast ptr %retval to ptr addrspace(4) 3205 %Result.ascast = addrspacecast ptr %Result to ptr addrspace(4) 3206 %ref.tmp.ascast = addrspacecast ptr %ref.tmp to ptr addrspace(4) 3207 store ptr addrspace(4) %this, ptr %this.addr 3208 %Id.ascast = addrspacecast ptr %Id to ptr addrspace(4) 3209 %this1 = load ptr addrspace(4), ptr %this.addr 3210 store i64 0, ptr %Result 3211 %0 = bitcast ptr %ref.tmp to ptr 3212 store ptr addrspace(4) %this1, ptr %0 3213 %Result2 = getelementptr inbounds %class.anon.15, ptr %ref.tmp, i32 0, i32 1 3214 store ptr addrspace(4) %Result.ascast, ptr %Result2 3215 %Id3 = getelementptr inbounds %class.anon.15, ptr %ref.tmp, i32 0, i32 2 3216 store ptr addrspace(4) %Id.ascast, ptr %Id3 3217 call spir_func void @Foo79(ptr addrspace(4) %ref.tmp.ascast) 3218 %1 = load i64, ptr %Result 3219 ret i64 %1 3220} 3221 3222 3223define internal spir_func ptr addrspace(1) @Foo78(ptr addrspace(4) %this) { 3224entry: 3225 %retval = alloca ptr addrspace(1) 3226 %this.addr = alloca ptr addrspace(4) 3227 %retval.ascast = addrspacecast ptr %retval to ptr addrspace(4) 3228 store ptr addrspace(4) %this, ptr %this.addr 3229 %this1 = load ptr addrspace(4), ptr %this.addr 3230 %0 = getelementptr inbounds nuw %"accessor", ptr addrspace(4) %this1, i32 0, i32 1 3231 %1 = load ptr addrspace(1), ptr addrspace(4) %0 3232 ret ptr addrspace(1) %1 3233} 3234 3235 3236define internal spir_func void @Foo79(ptr addrspace(4) %f) { 3237entry: 3238 %f.addr = alloca ptr addrspace(4) 3239 %agg.tmp = alloca %"nd_item", align 1 3240 store ptr addrspace(4) %f, ptr %f.addr 3241 %0 = load ptr addrspace(4), ptr %f.addr 3242 call spir_func void @Foo80(ptr byval(%"nd_item") align 1 %agg.tmp, ptr addrspace(4) %0) 3243 ret void 3244} 3245 3246 3247define internal spir_func void @Foo80(ptr byval(%"nd_item") align 1 %0, ptr addrspace(4) %f) { 3248entry: 3249 %f.addr = alloca ptr addrspace(4) 3250 %ref.tmp = alloca %"nd_item", align 1 3251 %ref.tmp.ascast = addrspacecast ptr %ref.tmp to ptr addrspace(4) 3252 %1 = addrspacecast ptr %0 to ptr addrspace(4) 3253 store ptr addrspace(4) %f, ptr %f.addr 3254 %2 = load ptr addrspace(4), ptr %f.addr 3255 %call = call spir_func i64 @_ZNKSt17integral_constantImLm0EEcvmEv(ptr addrspace(4) align 1 %ref.tmp.ascast) 3256 call spir_func void @Foo81(ptr addrspace(4) %2, i64 %call) 3257 ret void 3258} 3259 3260 3261define internal spir_func i64 @_ZNKSt17integral_constantImLm0EEcvmEv(ptr addrspace(4) align 1 %this) { 3262entry: 3263 %retval = alloca i64 3264 %this.addr = alloca ptr addrspace(4) 3265 %retval.ascast = addrspacecast ptr %retval to ptr addrspace(4) 3266 store ptr addrspace(4) %this, ptr %this.addr 3267 %this1 = load ptr addrspace(4), ptr %this.addr 3268 ret i64 0 3269} 3270 3271 3272define internal spir_func void @Foo81(ptr addrspace(4) %this, i64 %I) align 2 { 3273entry: 3274 %this.addr = alloca ptr addrspace(4) 3275 %I.addr = alloca i64 3276 store ptr addrspace(4) %this, ptr %this.addr 3277 store i64 %I, ptr %I.addr 3278 %this1 = load ptr addrspace(4), ptr %this.addr 3279 %0 = bitcast ptr addrspace(4) %this1 to ptr addrspace(4) 3280 %1 = load ptr addrspace(4), ptr addrspace(4) %0 3281 %Result = getelementptr inbounds nuw %class.anon.15, ptr addrspace(4) %this1, i32 0, i32 1 3282 %2 = load ptr addrspace(4), ptr addrspace(4) %Result 3283 %3 = load i64, ptr addrspace(4) %2 3284 %call = call spir_func ptr addrspace(4) @Bar72(ptr addrspace(4) %1) 3285 %4 = load i64, ptr %I.addr 3286 %conv = trunc i64 %4 to i32 3287 %call2 = call spir_func i64 @Foo37(ptr addrspace(4) %call, i32 %conv) 3288 %mul = mul i64 %3, %call2 3289 %Id = getelementptr inbounds nuw %class.anon.15, ptr addrspace(4) %this1, i32 0, i32 2 3290 %5 = load ptr addrspace(4), ptr addrspace(4) %Id 3291 %6 = load i64, ptr %I.addr 3292 %conv3 = trunc i64 %6 to i32 3293 %call4 = call spir_func ptr addrspace(4) @Foo16(ptr addrspace(4) %5, i32 %conv3) 3294 %7 = load i64, ptr addrspace(4) %call4 3295 %add = add i64 %mul, %7 3296 %Result5 = getelementptr inbounds nuw %class.anon.15, ptr addrspace(4) %this1, i32 0, i32 1 3297 %8 = load ptr addrspace(4), ptr addrspace(4) %Result5 3298 store i64 %add, ptr addrspace(4) %8 3299 ret void 3300} 3301 3302 3303define internal spir_func ptr addrspace(4) @Bar72(ptr addrspace(4) %this) { 3304entry: 3305 %retval = alloca ptr addrspace(4) 3306 %this.addr = alloca ptr addrspace(4) 3307 %retval.ascast = addrspacecast ptr %retval to ptr addrspace(4) 3308 store ptr addrspace(4) %this, ptr %this.addr 3309 %this1 = load ptr addrspace(4), ptr %this.addr 3310 %impl1 = bitcast ptr addrspace(4) %this1 to ptr addrspace(4) 3311 %MemRange = getelementptr inbounds nuw %"detail::AccessorImplDevice", ptr addrspace(4) %impl1, i32 0, i32 2 3312 ret ptr addrspace(4) %MemRange 3313} 3314 3315 3316define internal spir_func i64 @Foo37(ptr addrspace(4) %this, i32 %dimension) { 3317entry: 3318 %this.addr.i = alloca ptr addrspace(4) 3319 %dimension.addr.i = alloca i32, align 4 3320 %retval = alloca i64 3321 %this.addr = alloca ptr addrspace(4) 3322 %dimension.addr = alloca i32, align 4 3323 %retval.ascast = addrspacecast ptr %retval to ptr addrspace(4) 3324 store ptr addrspace(4) %this, ptr %this.addr 3325 store i32 %dimension, ptr %dimension.addr, align 4 3326 %this1 = load ptr addrspace(4), ptr %this.addr 3327 %0 = load i32, ptr %dimension.addr, align 4 3328 store ptr addrspace(4) %this1, ptr %this.addr.i 3329 store i32 %0, ptr %dimension.addr.i, align 4 3330 %this1.i = load ptr addrspace(4), ptr %this.addr.i 3331 %common_array1 = bitcast ptr addrspace(4) %this1 to ptr addrspace(4) 3332 %1 = load i32, ptr %dimension.addr, align 4 3333 %idxprom = sext i32 %1 to i64 3334 %arrayidx = getelementptr inbounds [1 x i64], ptr addrspace(4) %common_array1, i64 0, i64 %idxprom 3335 %2 = load i64, ptr addrspace(4) %arrayidx 3336 ret i64 %2 3337} 3338 3339 3340define internal spir_func void @Foo95(ptr byval(%"tangle_group") %g, i32 %FenceScope, i32 %Order) { 3341entry: 3342 %FenceScope.addr = alloca i32, align 4 3343 %Order.addr = alloca i32, align 4 3344 %g.ascast = addrspacecast ptr %g to ptr addrspace(4) 3345 store i32 %FenceScope, ptr %FenceScope.addr, align 4 3346 store i32 %Order, ptr %Order.addr, align 4 3347 %0 = load i32, ptr %FenceScope.addr, align 4 3348 %call = call spir_func i32 @Bar73(i32 %0) 3349 %1 = load i32, ptr %Order.addr, align 4 3350 %call1 = call spir_func i32 @Bar74(i32 %1) 3351 %or = or i32 %call1, 128 3352 %or2 = or i32 %or, 256 3353 %or3 = or i32 %or2, 512 3354 call spir_func void @_Z21__spirv_MemoryBarrierjj(i32 %call, i32 %or3) 3355 ret void 3356} 3357 3358 3359define internal spir_func i32 @Bar73(i32 %Scope){ 3360entry: 3361 %retval = alloca i32, align 4 3362 %Scope.addr = alloca i32, align 4 3363 store i32 %Scope, ptr %Scope.addr, align 4 3364 %0 = load i32, ptr %Scope.addr, align 4 3365 switch i32 %0, label %sw.epilog [ 3366 i32 0, label %sw.bb 3367 i32 1, label %sw.bb1 3368 i32 2, label %sw.bb2 3369 i32 3, label %sw.bb3 3370 i32 4, label %sw.bb4 3371 ] 3372 3373sw.bb4: ; preds = %entry 3374 store i32 0, ptr %retval, align 4 3375 br label %return 3376 3377sw.bb3: ; preds = %entry 3378 store i32 1, ptr %retval, align 4 3379 br label %return 3380 3381sw.bb2: ; preds = %entry 3382 store i32 2, ptr %retval, align 4 3383 br label %return 3384 3385sw.bb1: ; preds = %entry 3386 store i32 3, ptr %retval, align 4 3387 br label %return 3388 3389sw.bb: ; preds = %entry 3390 store i32 4, ptr %retval, align 4 3391 br label %return 3392 3393return: ; preds = %sw.bb4, %sw.bb3, %sw.bb2, %sw.bb1, %sw.bb 3394 %1 = load i32, ptr %retval, align 4 3395 ret i32 %1 3396 3397sw.epilog: ; preds = %entry 3398 unreachable 3399} 3400 3401 3402define internal spir_func i32 @Bar74(i32 %Order){ 3403entry: 3404 %retval = alloca i32, align 4 3405 %Order.addr = alloca i32, align 4 3406 %SpvOrder = alloca i32, align 4 3407 %cleanup.dest.slot = alloca i32, align 4 3408 %retval.ascast = addrspacecast ptr %retval to ptr addrspace(4) 3409 store i32 %Order, ptr %Order.addr, align 4 3410 store i32 0, ptr %SpvOrder, align 4 3411 %0 = load i32, ptr %Order.addr, align 4 3412 switch i32 %0, label %sw.epilog [ 3413 i32 0, label %sw.bb 3414 i32 2, label %sw.bb1 3415 i32 1, label %sw.bb1 3416 i32 3, label %sw.bb2 3417 i32 4, label %sw.bb3 3418 i32 5, label %sw.bb4 3419 ] 3420 3421sw.bb4: ; preds = %entry 3422 store i32 16, ptr %SpvOrder, align 4 3423 br label %sw.epilog 3424 3425sw.bb3: ; preds = %entry 3426 store i32 8, ptr %SpvOrder, align 4 3427 br label %sw.epilog 3428 3429sw.bb2: ; preds = %entry 3430 store i32 4, ptr %SpvOrder, align 4 3431 br label %sw.epilog 3432 3433sw.bb1: ; preds = %entry, %entry 3434 store i32 2, ptr %SpvOrder, align 4 3435 br label %sw.epilog 3436 3437sw.bb: ; preds = %entry 3438 store i32 0, ptr %SpvOrder, align 4 3439 br label %sw.epilog 3440 3441sw.epilog: ; preds = %sw.bb4, %sw.bb3, %sw.bb2, %sw.bb1, %sw.bb, %entry 3442 %1 = load i32, ptr %SpvOrder, align 4 3443 %or = or i32 %1, 128 3444 %or5 = or i32 %or, 256 3445 %or6 = or i32 %or5, 512 3446 ret i32 %or6 3447} 3448 3449declare dso_local spir_func void @_Z21__spirv_MemoryBarrierjj(i32, i32) 3450 3451 3452define internal spir_func i64 @Foo93(ptr addrspace(4) %this, ptr byval(%"range") %Id) { 3453entry: 3454 %retval = alloca i64 3455 %this.addr = alloca ptr addrspace(4) 3456 %Result = alloca i64 3457 %ref.tmp = alloca %class.anon.15 3458 %cleanup.dest.slot = alloca i32, align 4 3459 %retval.ascast = addrspacecast ptr %retval to ptr addrspace(4) 3460 %Result.ascast = addrspacecast ptr %Result to ptr addrspace(4) 3461 %ref.tmp.ascast = addrspacecast ptr %ref.tmp to ptr addrspace(4) 3462 store ptr addrspace(4) %this, ptr %this.addr 3463 %Id.ascast = addrspacecast ptr %Id to ptr addrspace(4) 3464 %this1 = load ptr addrspace(4), ptr %this.addr 3465 store i64 0, ptr %Result 3466 %0 = bitcast ptr %ref.tmp to ptr 3467 store ptr addrspace(4) %this1, ptr %0 3468 %Result2 = getelementptr inbounds %class.anon.15, ptr %ref.tmp, i32 0, i32 1 3469 store ptr addrspace(4) %Result.ascast, ptr %Result2 3470 %Id3 = getelementptr inbounds %class.anon.15, ptr %ref.tmp, i32 0, i32 2 3471 store ptr addrspace(4) %Id.ascast, ptr %Id3 3472 call spir_func void @Bar75(ptr addrspace(4) %ref.tmp.ascast) 3473 %1 = load i64, ptr %Result 3474 ret i64 %1 3475} 3476 3477 3478define internal spir_func ptr addrspace(1) @Foo94(ptr addrspace(4) %this) { 3479entry: 3480 %retval = alloca ptr addrspace(1) 3481 %this.addr = alloca ptr addrspace(4) 3482 %retval.ascast = addrspacecast ptr %retval to ptr addrspace(4) 3483 store ptr addrspace(4) %this, ptr %this.addr 3484 %this1 = load ptr addrspace(4), ptr %this.addr 3485 %0 = getelementptr inbounds nuw %"accessor", ptr addrspace(4) %this1, i32 0, i32 1 3486 %1 = load ptr addrspace(1), ptr addrspace(4) %0 3487 ret ptr addrspace(1) %1 3488} 3489 3490 3491define internal spir_func void @Bar75(ptr addrspace(4) %f) { 3492entry: 3493 %f.addr = alloca ptr addrspace(4) 3494 %agg.tmp = alloca %"nd_item", align 1 3495 store ptr addrspace(4) %f, ptr %f.addr 3496 %0 = load ptr addrspace(4), ptr %f.addr 3497 call spir_func void @Bar76(ptr byval(%"nd_item") align 1 %agg.tmp, ptr addrspace(4) %0) 3498 ret void 3499} 3500 3501 3502define internal spir_func void @Bar76(ptr byval(%"nd_item") align 1 %0, ptr addrspace(4) %f) { 3503entry: 3504 %f.addr = alloca ptr addrspace(4) 3505 %ref.tmp = alloca %"nd_item", align 1 3506 %ref.tmp.ascast = addrspacecast ptr %ref.tmp to ptr addrspace(4) 3507 %1 = addrspacecast ptr %0 to ptr addrspace(4) 3508 store ptr addrspace(4) %f, ptr %f.addr 3509 %2 = load ptr addrspace(4), ptr %f.addr 3510 %call = call spir_func i64 @_ZNKSt17integral_constantImLm0EEcvmEv(ptr addrspace(4) align 1 %ref.tmp.ascast) 3511 call spir_func void @Bar767(ptr addrspace(4) %2, i64 %call) 3512 ret void 3513} 3514 3515 3516define internal spir_func void @Bar767(ptr addrspace(4) %this, i64 %I) align 2 { 3517entry: 3518 %this.addr = alloca ptr addrspace(4) 3519 %I.addr = alloca i64 3520 store ptr addrspace(4) %this, ptr %this.addr 3521 store i64 %I, ptr %I.addr 3522 %this1 = load ptr addrspace(4), ptr %this.addr 3523 %0 = bitcast ptr addrspace(4) %this1 to ptr addrspace(4) 3524 %1 = load ptr addrspace(4), ptr addrspace(4) %0 3525 %Result = getelementptr inbounds nuw %class.anon.15, ptr addrspace(4) %this1, i32 0, i32 1 3526 %2 = load ptr addrspace(4), ptr addrspace(4) %Result 3527 %3 = load i64, ptr addrspace(4) %2 3528 %call = call spir_func ptr addrspace(4) @Bar78(ptr addrspace(4) %1) 3529 %4 = load i64, ptr %I.addr 3530 %conv = trunc i64 %4 to i32 3531 %call2 = call spir_func i64 @Foo37(ptr addrspace(4) %call, i32 %conv) 3532 %mul = mul i64 %3, %call2 3533 %Id = getelementptr inbounds nuw %class.anon.15, ptr addrspace(4) %this1, i32 0, i32 2 3534 %5 = load ptr addrspace(4), ptr addrspace(4) %Id 3535 %6 = load i64, ptr %I.addr 3536 %conv3 = trunc i64 %6 to i32 3537 %call4 = call spir_func ptr addrspace(4) @Foo16(ptr addrspace(4) %5, i32 %conv3) 3538 %7 = load i64, ptr addrspace(4) %call4 3539 %add = add i64 %mul, %7 3540 %Result5 = getelementptr inbounds nuw %class.anon.15, ptr addrspace(4) %this1, i32 0, i32 1 3541 %8 = load ptr addrspace(4), ptr addrspace(4) %Result5 3542 store i64 %add, ptr addrspace(4) %8 3543 ret void 3544} 3545 3546 3547define internal spir_func ptr addrspace(4) @Bar78(ptr addrspace(4) %this) { 3548entry: 3549 %retval = alloca ptr addrspace(4) 3550 %this.addr = alloca ptr addrspace(4) 3551 %retval.ascast = addrspacecast ptr %retval to ptr addrspace(4) 3552 store ptr addrspace(4) %this, ptr %this.addr 3553 %this1 = load ptr addrspace(4), ptr %this.addr 3554 %impl1 = bitcast ptr addrspace(4) %this1 to ptr addrspace(4) 3555 %MemRange = getelementptr inbounds nuw %"detail::AccessorImplDevice", ptr addrspace(4) %impl1, i32 0, i32 2 3556 ret ptr addrspace(4) %MemRange 3557} 3558 3559 3560define internal spir_func void @Foo44(ptr addrspace(4) dead_on_unwind noalias writable sret(%"ss_sub_group_mask") %agg.result, ptr byval(%"nd_item") align 1 %g, i1 zeroext %predicate) { 3561entry: 3562 %predicate.addr = alloca i8, align 1 3563 %res = alloca <4 x i32>, align 16 3564 %val = alloca i64 3565 %ref.tmp = alloca %"range" 3566 %cleanup.dest.slot = alloca i32, align 4 3567 %ref.tmp.ascast = addrspacecast ptr %ref.tmp to ptr addrspace(4) 3568 %g.ascast = addrspacecast ptr %g to ptr addrspace(4) 3569 %storedv = zext i1 %predicate to i8 3570 store i8 %storedv, ptr %predicate.addr, align 1 3571 %0 = load i8, ptr %predicate.addr, align 1 3572 %loadedv = trunc i8 %0 to i1 3573 %call = call spir_func <4 x i32> @_Z29__spirv_GroupNonUniformBallotjb(i32 3, i1 zeroext %loadedv) 3574 store <4 x i32> %call, ptr %res, align 16 3575 %1 = load <4 x i32>, ptr %res, align 16 3576 %vecext = extractelement <4 x i32> %1, i32 0 3577 %conv = zext i32 %vecext to i64 3578 store i64 %conv, ptr %val 3579 %2 = load <4 x i32>, ptr %res, align 16 3580 %vecext1 = extractelement <4 x i32> %2, i32 1 3581 %conv2 = zext i32 %vecext1 to i64 3582 %shl = shl i64 %conv2, 32 3583 %3 = load i64, ptr %val 3584 %or = or i64 %3, %shl 3585 store i64 %or, ptr %val 3586 %4 = load i64, ptr %val 3587 call spir_func void @Bar79(ptr addrspace(4) dead_on_unwind writable sret(%"range") %ref.tmp.ascast, ptr addrspace(4) align 1 %g.ascast) 3588 %call3 = call spir_func ptr addrspace(4) @Foo16(ptr addrspace(4) %ref.tmp.ascast, i32 0) 3589 %5 = load i64, ptr addrspace(4) %call3 3590 call spir_func void @Bar80(ptr addrspace(4) dead_on_unwind writable sret(%"ss_sub_group_mask") %agg.result, i64 %4, i64 %5) 3591 ret void 3592} 3593 3594 3595define internal spir_func void @Foo45(ptr addrspace(4) %this, ptr byval(%"ss_sub_group_mask") %m) unnamed_addr { 3596entry: 3597 %this.addr = alloca ptr addrspace(4) 3598 store ptr addrspace(4) %this, ptr %this.addr 3599 %this1 = load ptr addrspace(4), ptr %this.addr 3600 %Mask1 = bitcast ptr addrspace(4) %this1 to ptr addrspace(4) 3601 ret void 3602} 3603 3604declare dso_local spir_func <4 x i32> @_Z29__spirv_GroupNonUniformBallotjb(i32, i1 zeroext) 3605 3606 3607define internal spir_func void @Bar79(ptr addrspace(4) dead_on_unwind noalias writable sret(%"range") %agg.result, ptr addrspace(4) align 1 %this) { 3608entry: 3609 %this.addr = alloca ptr addrspace(4) 3610 store ptr addrspace(4) %this, ptr %this.addr 3611 %this1 = load ptr addrspace(4), ptr %this.addr 3612 %call = call spir_func i32 @_Z23__spirv_SubgroupMaxSizev() 3613 %conv = zext i32 %call to i64 3614 call spir_func void @Foo9(ptr addrspace(4) %agg.result, i64 %conv) 3615 ret void 3616} 3617 3618 3619define internal spir_func void @Bar80(ptr addrspace(4) dead_on_unwind noalias writable sret(%"ss_sub_group_mask") %agg.result, i64 %Bits, i64 %BitsNum) { 3620entry: 3621 %Bits.addr = alloca i64 3622 %BitsNum.addr = alloca i64 3623 store i64 %Bits, ptr %Bits.addr 3624 store i64 %BitsNum, ptr %BitsNum.addr 3625 %0 = load i64, ptr %Bits.addr 3626 %1 = load i64, ptr %BitsNum.addr 3627 call spir_func void @Bar81(ptr addrspace(4) %agg.result, i64 %0, i64 %1) 3628 ret void 3629} 3630 3631 3632define internal spir_func void @Bar81(ptr addrspace(4) %this, i64 %rhs, i64 %bn) unnamed_addr { 3633entry: 3634 %this.addr = alloca ptr addrspace(4) 3635 %rhs.addr = alloca i64 3636 %bn.addr = alloca i64 3637 store ptr addrspace(4) %this, ptr %this.addr 3638 store i64 %rhs, ptr %rhs.addr 3639 store i64 %bn, ptr %bn.addr 3640 %this1 = load ptr addrspace(4), ptr %this.addr 3641 %Bits1 = bitcast ptr addrspace(4) %this1 to ptr addrspace(4) 3642 %0 = load i64, ptr %rhs.addr 3643 %1 = load i64, ptr %bn.addr 3644 %call = call spir_func i64 @Bar58(ptr addrspace(4) %this1, i64 %1) 3645 %and = and i64 %0, %call 3646 store i64 %and, ptr addrspace(4) %Bits1 3647 %bits_num = getelementptr inbounds nuw %"ss_sub_group_mask", ptr addrspace(4) %this1, i32 0, i32 1 3648 %2 = load i64, ptr %bn.addr 3649 store i64 %2, ptr addrspace(4) %bits_num 3650 %bits_num2 = getelementptr inbounds nuw %"ss_sub_group_mask", ptr addrspace(4) %this1, i32 0, i32 1 3651 %3 = load i64, ptr addrspace(4) %bits_num2 3652 %cmp = icmp ule i64 %3, 64 3653 %4 = addrspacecast ptr addrspace(1) @.str to ptr addrspace(4) 3654 %5 = addrspacecast ptr addrspace(1) @.str.1 to ptr addrspace(4) 3655 %6 = addrspacecast ptr addrspace(1) @__PRETTY_FUNCTION1 to ptr addrspace(4) 3656 br i1 %cmp, label %cond.end, label %cond.false 3657 3658cond.false: ; preds = %entry 3659 call spir_func void @__assert_fail(ptr addrspace(4) %4, ptr addrspace(4) %5, i32 324, ptr addrspace(4) %6) 3660 br label %cond.end 3661 3662cond.end: ; preds = %entry, %cond.false 3663 ret void 3664} 3665 3666 3667define internal spir_func i32 @_Z23__spirv_SubgroupMaxSizev() { 3668entry: 3669 %retval = alloca i32, align 4 3670 %retval.ascast = addrspacecast ptr %retval to ptr addrspace(4) 3671 %0 = load i32, ptr addrspace(1) @__spirv_BuiltInSubgroupMaxSize, align 4 3672 ret i32 %0 3673} 3674 3675 3676define internal spir_func void @Init6(ptr addrspace(4) dead_on_unwind noalias writable sret(%"range") %agg.result) { 3677entry: 3678 call spir_func void @Inv1(ptr addrspace(4) dead_on_unwind writable sret(%"range") %agg.result) 3679 ret void 3680} 3681 3682 3683define internal spir_func void @Inv1(ptr addrspace(4) dead_on_unwind noalias writable sret(%"range") %agg.result) { 3684entry: 3685 %call = call spir_func i64 @Inv2() 3686 call spir_func void @Foo46(ptr addrspace(4) %agg.result, i64 %call) 3687 ret void 3688} 3689 3690 3691define internal spir_func i64 @Inv2() { 3692entry: 3693 %retval = alloca i64 3694 %retval.ascast = addrspacecast ptr %retval to ptr addrspace(4) 3695 %call = call spir_func i64 @_Z28__spirv_GlobalInvocationId_xv() 3696 ret i64 %call 3697} 3698 3699 3700define internal spir_func i64 @_Z28__spirv_GlobalInvocationId_xv() { 3701entry: 3702 %retval = alloca i64 3703 %retval.ascast = addrspacecast ptr %retval to ptr addrspace(4) 3704 %0 = load <3 x i64>, ptr addrspace(1) @__spirv_BuiltInGlobalInvocationId, align 32 3705 %1 = extractelement <3 x i64> %0, i64 0 3706 ret i64 %1 3707} 3708 3709 3710define internal spir_func void @Foo7(ptr addrspace(4) dead_on_unwind noalias writable sret(%"range") %agg.result) { 3711entry: 3712 call spir_func void @Foo8(ptr addrspace(4) dead_on_unwind writable sret(%"range") %agg.result) 3713 ret void 3714} 3715 3716 3717define internal spir_func void @Init1(ptr addrspace(4) dead_on_unwind noalias writable sret(%"range") %agg.result) { 3718entry: 3719 call spir_func void @Inv3(ptr addrspace(4) dead_on_unwind writable sret(%"range") %agg.result) 3720 ret void 3721} 3722 3723 3724define internal spir_func void @Init2(ptr addrspace(4) dead_on_unwind noalias writable sret(%"range") %agg.result) { 3725entry: 3726 call spir_func void @InitSize1(ptr addrspace(4) dead_on_unwind writable sret(%"range") %agg.result) 3727 ret void 3728} 3729 3730 3731define internal spir_func void @Init3(ptr addrspace(4) dead_on_unwind noalias writable sret(%"range") %agg.result) { 3732entry: 3733 call spir_func void @InitSize2(ptr addrspace(4) dead_on_unwind writable sret(%"range") %agg.result) 3734 ret void 3735} 3736 3737 3738define internal spir_func void @Init4(ptr addrspace(4) dead_on_unwind noalias writable sret(%"range") %agg.result) { 3739entry: 3740 call spir_func void @InitSize3(ptr addrspace(4) dead_on_unwind writable sret(%"range") %agg.result) 3741 ret void 3742} 3743 3744 3745define internal spir_func void @Init5(ptr addrspace(4) dead_on_unwind noalias writable sret(%"range") %agg.result) { 3746entry: 3747 call spir_func void @InitSize4(ptr addrspace(4) dead_on_unwind writable sret(%"range") %agg.result) 3748 ret void 3749} 3750 3751 3752define internal spir_func void @Foo23(ptr addrspace(4) dead_on_unwind noalias writable sret(%"group") %agg.result, ptr addrspace(4) %Global, ptr addrspace(4) %Local, ptr addrspace(4) %Group, ptr addrspace(4) %Index) { 3753entry: 3754 %Global.addr = alloca ptr addrspace(4) 3755 %Local.addr = alloca ptr addrspace(4) 3756 %Group.addr = alloca ptr addrspace(4) 3757 %Index.addr = alloca ptr addrspace(4) 3758 %agg.tmp = alloca %"range" 3759 store ptr addrspace(4) %Global, ptr %Global.addr 3760 store ptr addrspace(4) %Local, ptr %Local.addr 3761 store ptr addrspace(4) %Group, ptr %Group.addr 3762 store ptr addrspace(4) %Index, ptr %Index.addr 3763 %0 = load ptr addrspace(4), ptr %Global.addr 3764 %1 = load ptr addrspace(4), ptr %Local.addr 3765 %2 = load ptr addrspace(4), ptr %Group.addr 3766 %3 = load ptr addrspace(4), ptr %Index.addr 3767 call spir_func void @Bar82(ptr addrspace(4) %agg.result, ptr addrspace(4) %0, ptr addrspace(4) %1, ptr byval(%"range") %agg.tmp, ptr addrspace(4) %3) 3768 ret void 3769} 3770 3771 3772define internal spir_func void @Foo24(ptr addrspace(4) dead_on_unwind noalias writable sret(%"item") %agg.result, ptr addrspace(4) %Extent, ptr addrspace(4) %Index, ptr addrspace(4) %Offset) { 3773entry: 3774 %Extent.addr = alloca ptr addrspace(4) 3775 %Index.addr = alloca ptr addrspace(4) 3776 %Offset.addr = alloca ptr addrspace(4) 3777 store ptr addrspace(4) %Extent, ptr %Extent.addr 3778 store ptr addrspace(4) %Index, ptr %Index.addr 3779 store ptr addrspace(4) %Offset, ptr %Offset.addr 3780 %0 = load ptr addrspace(4), ptr %Extent.addr 3781 %1 = load ptr addrspace(4), ptr %Index.addr 3782 %2 = load ptr addrspace(4), ptr %Offset.addr 3783 call spir_func void @Foo29(ptr addrspace(4) %agg.result, ptr addrspace(4) %0, ptr addrspace(4) %1, ptr addrspace(4) %2) 3784 ret void 3785} 3786 3787 3788define internal spir_func void @Foo25(ptr addrspace(4) dead_on_unwind noalias writable sret(%"item.22") %agg.result, ptr addrspace(4) %Extent, ptr addrspace(4) %Index) { 3789entry: 3790 %Extent.addr = alloca ptr addrspace(4) 3791 %Index.addr = alloca ptr addrspace(4) 3792 store ptr addrspace(4) %Extent, ptr %Extent.addr 3793 store ptr addrspace(4) %Index, ptr %Index.addr 3794 %0 = load ptr addrspace(4), ptr %Extent.addr 3795 %1 = load ptr addrspace(4), ptr %Index.addr 3796 call spir_func void @Foo27(ptr addrspace(4) %agg.result, ptr addrspace(4) %0, ptr addrspace(4) %1) 3797 ret void 3798} 3799 3800 3801define internal spir_func void @Foo26(ptr addrspace(4) dead_on_unwind noalias writable sret(%"nd_item") align 1 %agg.result, ptr addrspace(4) %Global, ptr addrspace(4) %Local, ptr addrspace(4) %Group) { 3802entry: 3803 %Global.addr = alloca ptr addrspace(4) 3804 %Local.addr = alloca ptr addrspace(4) 3805 %Group.addr = alloca ptr addrspace(4) 3806 store ptr addrspace(4) %Global, ptr %Global.addr 3807 store ptr addrspace(4) %Local, ptr %Local.addr 3808 store ptr addrspace(4) %Group, ptr %Group.addr 3809 %0 = load ptr addrspace(4), ptr %Global.addr 3810 %1 = load ptr addrspace(4), ptr %Local.addr 3811 %2 = load ptr addrspace(4), ptr %Group.addr 3812 call spir_func void @Foo28(ptr addrspace(4) align 1 %agg.result, ptr addrspace(4) %0, ptr addrspace(4) %1, ptr addrspace(4) %2) 3813 ret void 3814} 3815 3816 3817define internal spir_func void @Foo28(ptr addrspace(4) align 1 %this, ptr addrspace(4) %0, ptr addrspace(4) %1, ptr addrspace(4) %2) unnamed_addr { 3818entry: 3819 %this.addr = alloca ptr addrspace(4) 3820 %.addr = alloca ptr addrspace(4) 3821 %.addr1 = alloca ptr addrspace(4) 3822 %.addr2 = alloca ptr addrspace(4) 3823 store ptr addrspace(4) %this, ptr %this.addr 3824 store ptr addrspace(4) %0, ptr %.addr 3825 store ptr addrspace(4) %1, ptr %.addr1 3826 store ptr addrspace(4) %2, ptr %.addr2 3827 %this3 = load ptr addrspace(4), ptr %this.addr 3828 ret void 3829} 3830 3831 3832define internal spir_func void @Foo27(ptr addrspace(4) %this, ptr addrspace(4) %extent, ptr addrspace(4) %index) unnamed_addr { 3833entry: 3834 %this.addr = alloca ptr addrspace(4) 3835 %extent.addr = alloca ptr addrspace(4) 3836 %index.addr = alloca ptr addrspace(4) 3837 store ptr addrspace(4) %this, ptr %this.addr 3838 store ptr addrspace(4) %extent, ptr %extent.addr 3839 store ptr addrspace(4) %index, ptr %index.addr 3840 %this1 = load ptr addrspace(4), ptr %this.addr 3841 %MImpl1 = bitcast ptr addrspace(4) %this1 to ptr addrspace(4) 3842 %MExtent2 = bitcast ptr addrspace(4) %MImpl1 to ptr addrspace(4) 3843 %0 = load ptr addrspace(4), ptr %extent.addr 3844 %MIndex = getelementptr inbounds nuw %"sd_ItemBase.23", ptr addrspace(4) %MImpl1, i32 0, i32 1 3845 %1 = load ptr addrspace(4), ptr %index.addr 3846 ret void 3847} 3848 3849 3850 3851 3852define internal spir_func void @Foo29(ptr addrspace(4) %this, ptr addrspace(4) %extent, ptr addrspace(4) %index, ptr addrspace(4) %offset) unnamed_addr { 3853entry: 3854 %this.addr = alloca ptr addrspace(4) 3855 %extent.addr = alloca ptr addrspace(4) 3856 %index.addr = alloca ptr addrspace(4) 3857 %offset.addr = alloca ptr addrspace(4) 3858 store ptr addrspace(4) %this, ptr %this.addr 3859 store ptr addrspace(4) %extent, ptr %extent.addr 3860 store ptr addrspace(4) %index, ptr %index.addr 3861 store ptr addrspace(4) %offset, ptr %offset.addr 3862 %this1 = load ptr addrspace(4), ptr %this.addr 3863 %MImpl1 = bitcast ptr addrspace(4) %this1 to ptr addrspace(4) 3864 %MExtent2 = bitcast ptr addrspace(4) %MImpl1 to ptr addrspace(4) 3865 %0 = load ptr addrspace(4), ptr %extent.addr 3866 %MIndex = getelementptr inbounds nuw %"detail::AccessorImplDevice", ptr addrspace(4) %MImpl1, i32 0, i32 1 3867 %1 = load ptr addrspace(4), ptr %index.addr 3868 %MOffset = getelementptr inbounds nuw %"detail::AccessorImplDevice", ptr addrspace(4) %MImpl1, i32 0, i32 2 3869 %2 = load ptr addrspace(4), ptr %offset.addr 3870 ret void 3871} 3872 3873 3874define internal spir_func void @Bar82(ptr addrspace(4) %this, ptr addrspace(4) %G, ptr addrspace(4) %L, ptr byval(%"range") %GroupRange, ptr addrspace(4) %I) unnamed_addr { 3875entry: 3876 %this.addr = alloca ptr addrspace(4) 3877 %G.addr = alloca ptr addrspace(4) 3878 %L.addr = alloca ptr addrspace(4) 3879 %I.addr = alloca ptr addrspace(4) 3880 store ptr addrspace(4) %this, ptr %this.addr 3881 store ptr addrspace(4) %G, ptr %G.addr 3882 store ptr addrspace(4) %L, ptr %L.addr 3883 store ptr addrspace(4) %I, ptr %I.addr 3884 %this1 = load ptr addrspace(4), ptr %this.addr 3885 %globalRange1 = bitcast ptr addrspace(4) %this1 to ptr addrspace(4) 3886 %0 = load ptr addrspace(4), ptr %G.addr 3887 %localRange = getelementptr inbounds nuw %"group", ptr addrspace(4) %this1, i32 0, i32 1 3888 %1 = load ptr addrspace(4), ptr %L.addr 3889 %groupRange = getelementptr inbounds nuw %"group", ptr addrspace(4) %this1, i32 0, i32 2 3890 %index = getelementptr inbounds nuw %"group", ptr addrspace(4) %this1, i32 0, i32 3 3891 %2 = load ptr addrspace(4), ptr %I.addr 3892 ret void 3893} 3894 3895 3896define internal spir_func void @InitSize4(ptr addrspace(4) dead_on_unwind noalias writable sret(%"range") %agg.result) { 3897entry: 3898 %call = call spir_func i64 @_ZN7__spirv15getGlobalOffsetILi0EEEmv() 3899 call spir_func void @Foo46(ptr addrspace(4) %agg.result, i64 %call) 3900 ret void 3901} 3902 3903 3904define internal spir_func i64 @_ZN7__spirv15getGlobalOffsetILi0EEEmv() { 3905entry: 3906 %retval = alloca i64 3907 %retval.ascast = addrspacecast ptr %retval to ptr addrspace(4) 3908 %call = call spir_func i64 @_Z22__spirv_GlobalOffset_xv() 3909 ret i64 %call 3910} 3911 3912 3913define internal spir_func i64 @_Z22__spirv_GlobalOffset_xv() { 3914entry: 3915 %retval = alloca i64 3916 %retval.ascast = addrspacecast ptr %retval to ptr addrspace(4) 3917 %0 = load <3 x i64>, ptr addrspace(1) @__spirv_BuiltInGlobalOffset, align 32 3918 %1 = extractelement <3 x i64> %0, i64 0 3919 ret i64 %1 3920} 3921 3922 3923define internal spir_func void @InitSize3(ptr addrspace(4) dead_on_unwind noalias writable sret(%"range") %agg.result) { 3924entry: 3925 %call = call spir_func i64 @_ZN7__spirv20getLocalInvocationIdILi0EEEmv() 3926 call spir_func void @Foo46(ptr addrspace(4) %agg.result, i64 %call) 3927 ret void 3928} 3929 3930 3931define internal spir_func i64 @_ZN7__spirv20getLocalInvocationIdILi0EEEmv() { 3932entry: 3933 %retval = alloca i64 3934 %retval.ascast = addrspacecast ptr %retval to ptr addrspace(4) 3935 %call = call spir_func i64 @_Z27__spirv_LocalInvocationId_xv() 3936 ret i64 %call 3937} 3938 3939 3940define internal spir_func i64 @_Z27__spirv_LocalInvocationId_xv() { 3941entry: 3942 %retval = alloca i64 3943 %retval.ascast = addrspacecast ptr %retval to ptr addrspace(4) 3944 %0 = load <3 x i64>, ptr addrspace(1) @__spirv_BuiltInLocalInvocationId, align 32 3945 %1 = extractelement <3 x i64> %0, i64 0 3946 ret i64 %1 3947} 3948 3949 3950define internal spir_func void @InitSize2(ptr addrspace(4) dead_on_unwind noalias writable sret(%"range") %agg.result) { 3951entry: 3952 %call = call spir_func i64 @_ZN7__spirv14getWorkgroupIdILi0EEEmv() 3953 call spir_func void @Foo46(ptr addrspace(4) %agg.result, i64 %call) 3954 ret void 3955} 3956 3957 3958define internal spir_func i64 @_ZN7__spirv14getWorkgroupIdILi0EEEmv() { 3959entry: 3960 %retval = alloca i64 3961 %retval.ascast = addrspacecast ptr %retval to ptr addrspace(4) 3962 %call = call spir_func i64 @_Z21__spirv_WorkgroupId_xv() 3963 ret i64 %call 3964} 3965 3966 3967define internal spir_func i64 @_Z21__spirv_WorkgroupId_xv() { 3968entry: 3969 %retval = alloca i64 3970 %retval.ascast = addrspacecast ptr %retval to ptr addrspace(4) 3971 %0 = load <3 x i64>, ptr addrspace(1) @__spirv_BuiltInWorkgroupId, align 32 3972 %1 = extractelement <3 x i64> %0, i64 0 3973 ret i64 %1 3974} 3975 3976 3977define internal spir_func void @InitSize1(ptr addrspace(4) dead_on_unwind noalias writable sret(%"range") %agg.result) { 3978entry: 3979 %call = call spir_func i64 @_ZN7__spirv16getNumWorkgroupsILi0EEEmv() 3980 call spir_func void @Foo9(ptr addrspace(4) %agg.result, i64 %call) 3981 ret void 3982} 3983 3984 3985define internal spir_func i64 @_ZN7__spirv16getNumWorkgroupsILi0EEEmv() { 3986entry: 3987 %retval = alloca i64 3988 %retval.ascast = addrspacecast ptr %retval to ptr addrspace(4) 3989 %call = call spir_func i64 @_Z23__spirv_NumWorkgroups_xv() 3990 ret i64 %call 3991} 3992 3993 3994define internal spir_func i64 @_Z23__spirv_NumWorkgroups_xv() { 3995entry: 3996 %retval = alloca i64 3997 %retval.ascast = addrspacecast ptr %retval to ptr addrspace(4) 3998 %0 = load <3 x i64>, ptr addrspace(1) @__spirv_BuiltInNumWorkgroups, align 32 3999 %1 = extractelement <3 x i64> %0, i64 0 4000 ret i64 %1 4001} 4002 4003 4004define internal spir_func void @Inv3(ptr addrspace(4) dead_on_unwind noalias writable sret(%"range") %agg.result) { 4005entry: 4006 %call = call spir_func i64 @_ZN7__spirv16getWorkgroupSizeILi0EEEmv() 4007 call spir_func void @Foo9(ptr addrspace(4) %agg.result, i64 %call) 4008 ret void 4009} 4010 4011 4012define internal spir_func i64 @_ZN7__spirv16getWorkgroupSizeILi0EEEmv() { 4013entry: 4014 %retval = alloca i64 4015 %retval.ascast = addrspacecast ptr %retval to ptr addrspace(4) 4016 %call = call spir_func i64 @_Z23__spirv_WorkgroupSize_xv() 4017 ret i64 %call 4018} 4019 4020 4021define internal spir_func i64 @_Z23__spirv_WorkgroupSize_xv() { 4022entry: 4023 %retval = alloca i64 4024 %retval.ascast = addrspacecast ptr %retval to ptr addrspace(4) 4025 %0 = load <3 x i64>, ptr addrspace(1) @__spirv_BuiltInWorkgroupSize, align 32 4026 %1 = extractelement <3 x i64> %0, i64 0 4027 ret i64 %1 4028} 4029 4030 4031define internal spir_func void @Foo8(ptr addrspace(4) dead_on_unwind noalias writable sret(%"range") %agg.result) { 4032entry: 4033 %call = call spir_func i64 @_ZN7__spirv13getGlobalSizeILi0EEEmv() 4034 call spir_func void @Foo9(ptr addrspace(4) %agg.result, i64 %call) 4035 ret void 4036} 4037 4038 4039define internal spir_func i64 @_ZN7__spirv13getGlobalSizeILi0EEEmv() { 4040entry: 4041 %retval = alloca i64 4042 %retval.ascast = addrspacecast ptr %retval to ptr addrspace(4) 4043 %call = call spir_func i64 @_Z20__spirv_GlobalSize_xv() 4044 ret i64 %call 4045} 4046 4047 4048define internal spir_func i64 @_Z20__spirv_GlobalSize_xv() { 4049entry: 4050 %retval = alloca i64 4051 %retval.ascast = addrspacecast ptr %retval to ptr addrspace(4) 4052 %0 = load <3 x i64>, ptr addrspace(1) @__spirv_BuiltInGlobalSize, align 32 4053 %1 = extractelement <3 x i64> %0, i64 0 4054 ret i64 %1 4055} 4056 4057 4058define internal spir_func void @Foo30(ptr addrspace(4) %f) { 4059entry: 4060 %f.addr = alloca ptr addrspace(4) 4061 %agg.tmp = alloca %"nd_item", align 1 4062 store ptr addrspace(4) %f, ptr %f.addr 4063 %0 = load ptr addrspace(4), ptr %f.addr 4064 call spir_func void @Foo33(ptr byval(%"nd_item") align 1 %agg.tmp, ptr addrspace(4) %0) 4065 ret void 4066} 4067 4068 4069define internal spir_func i64 @Foo32(ptr addrspace(4) %this) { 4070entry: 4071 %retval = alloca i64 4072 %this.addr = alloca ptr addrspace(4) 4073 %TotalOffset = alloca i64 4074 %ref.tmp = alloca %class.anon.7 4075 %cleanup.dest.slot = alloca i32, align 4 4076 %retval.ascast = addrspacecast ptr %retval to ptr addrspace(4) 4077 %TotalOffset.ascast = addrspacecast ptr %TotalOffset to ptr addrspace(4) 4078 %ref.tmp.ascast = addrspacecast ptr %ref.tmp to ptr addrspace(4) 4079 store ptr addrspace(4) %this, ptr %this.addr 4080 %this1 = load ptr addrspace(4), ptr %this.addr 4081 store i64 0, ptr %TotalOffset 4082 %0 = bitcast ptr %ref.tmp to ptr 4083 store ptr addrspace(4) %this1, ptr %0 4084 %TotalOffset2 = getelementptr inbounds %class.anon.7, ptr %ref.tmp, i32 0, i32 1 4085 store ptr addrspace(4) %TotalOffset.ascast, ptr %TotalOffset2 4086 call spir_func void @Foo34(ptr addrspace(4) %ref.tmp.ascast) 4087 %1 = load i64, ptr %TotalOffset 4088 ret i64 %1 4089} 4090 4091 4092define internal spir_func void @Foo34(ptr addrspace(4) %f) { 4093entry: 4094 %f.addr = alloca ptr addrspace(4) 4095 %agg.tmp = alloca %"nd_item", align 1 4096 store ptr addrspace(4) %f, ptr %f.addr 4097 %0 = load ptr addrspace(4), ptr %f.addr 4098 call spir_func void @Foo35(ptr byval(%"nd_item") align 1 %agg.tmp, ptr addrspace(4) %0) 4099 ret void 4100} 4101 4102 4103define internal spir_func void @Foo35(ptr byval(%"nd_item") align 1 %0, ptr addrspace(4) %f) { 4104entry: 4105 %f.addr = alloca ptr addrspace(4) 4106 %ref.tmp = alloca %"nd_item", align 1 4107 %ref.tmp.ascast = addrspacecast ptr %ref.tmp to ptr addrspace(4) 4108 %1 = addrspacecast ptr %0 to ptr addrspace(4) 4109 store ptr addrspace(4) %f, ptr %f.addr 4110 %2 = load ptr addrspace(4), ptr %f.addr 4111 %call = call spir_func i64 @_ZNKSt17integral_constantImLm0EEcvmEv(ptr addrspace(4) align 1 %ref.tmp.ascast) 4112 call spir_func void @Foo36(ptr addrspace(4) %2, i64 %call) 4113 ret void 4114} 4115 4116 4117define internal spir_func void @Foo36(ptr addrspace(4) %this, i64 %I) align 2 { 4118entry: 4119 %this.addr = alloca ptr addrspace(4) 4120 %I.addr = alloca i64 4121 store ptr addrspace(4) %this, ptr %this.addr 4122 store i64 %I, ptr %I.addr 4123 %this1 = load ptr addrspace(4), ptr %this.addr 4124 %0 = bitcast ptr addrspace(4) %this1 to ptr addrspace(4) 4125 %1 = load ptr addrspace(4), ptr addrspace(4) %0 4126 %TotalOffset = getelementptr inbounds nuw %class.anon.7, ptr addrspace(4) %this1, i32 0, i32 1 4127 %2 = load ptr addrspace(4), ptr addrspace(4) %TotalOffset 4128 %3 = load i64, ptr addrspace(4) %2 4129 %impl1 = bitcast ptr addrspace(4) %1 to ptr addrspace(4) 4130 %MemRange = getelementptr inbounds nuw %"detail::AccessorImplDevice", ptr addrspace(4) %impl1, i32 0, i32 2 4131 %4 = load i64, ptr %I.addr 4132 %conv = trunc i64 %4 to i32 4133 %call = call spir_func i64 @Foo37(ptr addrspace(4) %MemRange, i32 %conv) 4134 %mul = mul i64 %3, %call 4135 %TotalOffset2 = getelementptr inbounds nuw %class.anon.7, ptr addrspace(4) %this1, i32 0, i32 1 4136 %5 = load ptr addrspace(4), ptr addrspace(4) %TotalOffset2 4137 store i64 %mul, ptr addrspace(4) %5 4138 %impl32 = bitcast ptr addrspace(4) %1 to ptr addrspace(4) 4139 %Offset3 = bitcast ptr addrspace(4) %impl32 to ptr addrspace(4) 4140 %6 = load i64, ptr %I.addr 4141 %conv4 = trunc i64 %6 to i32 4142 %call5 = call spir_func i64 @Foo37(ptr addrspace(4) %Offset3, i32 %conv4) 4143 %TotalOffset6 = getelementptr inbounds nuw %class.anon.7, ptr addrspace(4) %this1, i32 0, i32 1 4144 %7 = load ptr addrspace(4), ptr addrspace(4) %TotalOffset6 4145 %8 = load i64, ptr addrspace(4) %7 4146 %add = add i64 %8, %call5 4147 store i64 %add, ptr addrspace(4) %7 4148 ret void 4149} 4150 4151 4152define internal spir_func void @Foo33(ptr byval(%"nd_item") align 1 %0, ptr addrspace(4) %f) { 4153entry: 4154 %f.addr = alloca ptr addrspace(4) 4155 %ref.tmp = alloca %"nd_item", align 1 4156 %ref.tmp.ascast = addrspacecast ptr %ref.tmp to ptr addrspace(4) 4157 %1 = addrspacecast ptr %0 to ptr addrspace(4) 4158 store ptr addrspace(4) %f, ptr %f.addr 4159 %2 = load ptr addrspace(4), ptr %f.addr 4160 %call = call spir_func i64 @_ZNKSt17integral_constantImLm0EEcvmEv(ptr addrspace(4) align 1 %ref.tmp.ascast) 4161 call spir_func void @Foo38(ptr addrspace(4) %2, i64 %call) 4162 ret void 4163} 4164 4165 4166define internal spir_func void @Foo38(ptr addrspace(4) %this, i64 %I) align 2 { 4167entry: 4168 %this.addr = alloca ptr addrspace(4) 4169 %I.addr = alloca i64 4170 store ptr addrspace(4) %this, ptr %this.addr 4171 store i64 %I, ptr %I.addr 4172 %this1 = load ptr addrspace(4), ptr %this.addr 4173 %0 = bitcast ptr addrspace(4) %this1 to ptr addrspace(4) 4174 %1 = load ptr addrspace(4), ptr addrspace(4) %0 4175 %Offset = getelementptr inbounds nuw %class.anon.6, ptr addrspace(4) %this1, i32 0, i32 1 4176 %2 = load ptr addrspace(4), ptr addrspace(4) %Offset 4177 %3 = load i64, ptr %I.addr 4178 %conv = trunc i64 %3 to i32 4179 %call = call spir_func ptr addrspace(4) @Foo16(ptr addrspace(4) %2, i32 %conv) 4180 %4 = load i64, ptr addrspace(4) %call 4181 %call2 = call spir_func ptr addrspace(4) @Foo39(ptr addrspace(4) %1) 4182 %5 = load i64, ptr %I.addr 4183 %conv3 = trunc i64 %5 to i32 4184 %call4 = call spir_func ptr addrspace(4) @Foo16(ptr addrspace(4) %call2, i32 %conv3) 4185 store i64 %4, ptr addrspace(4) %call4 4186 %AccessRange = getelementptr inbounds nuw %class.anon.6, ptr addrspace(4) %this1, i32 0, i32 2 4187 %6 = load ptr addrspace(4), ptr addrspace(4) %AccessRange 4188 %7 = load i64, ptr %I.addr 4189 %conv5 = trunc i64 %7 to i32 4190 %call6 = call spir_func ptr addrspace(4) @Foo16(ptr addrspace(4) %6, i32 %conv5) 4191 %8 = load i64, ptr addrspace(4) %call6 4192 %call7 = call spir_func ptr addrspace(4) @Foo40A(ptr addrspace(4) %1) 4193 %9 = load i64, ptr %I.addr 4194 %conv8 = trunc i64 %9 to i32 4195 %call9 = call spir_func ptr addrspace(4) @Foo16(ptr addrspace(4) %call7, i32 %conv8) 4196 store i64 %8, ptr addrspace(4) %call9 4197 %MemRange = getelementptr inbounds nuw %class.anon.6, ptr addrspace(4) %this1, i32 0, i32 3 4198 %10 = load ptr addrspace(4), ptr addrspace(4) %MemRange 4199 %11 = load i64, ptr %I.addr 4200 %conv10 = trunc i64 %11 to i32 4201 %call11 = call spir_func ptr addrspace(4) @Foo16(ptr addrspace(4) %10, i32 %conv10) 4202 %12 = load i64, ptr addrspace(4) %call11 4203 %call12 = call spir_func ptr addrspace(4) @Foo41A(ptr addrspace(4) %1) 4204 %13 = load i64, ptr %I.addr 4205 %conv13 = trunc i64 %13 to i32 4206 %call14 = call spir_func ptr addrspace(4) @Foo16(ptr addrspace(4) %call12, i32 %conv13) 4207 store i64 %12, ptr addrspace(4) %call14 4208 ret void 4209} 4210 4211 4212define internal spir_func ptr addrspace(4) @Foo39(ptr addrspace(4) %this) { 4213entry: 4214 %retval = alloca ptr addrspace(4) 4215 %this.addr = alloca ptr addrspace(4) 4216 %retval.ascast = addrspacecast ptr %retval to ptr addrspace(4) 4217 store ptr addrspace(4) %this, ptr %this.addr 4218 %this1 = load ptr addrspace(4), ptr %this.addr 4219 %impl1 = bitcast ptr addrspace(4) %this1 to ptr addrspace(4) 4220 %Offset2 = bitcast ptr addrspace(4) %impl1 to ptr addrspace(4) 4221 ret ptr addrspace(4) %Offset2 4222} 4223 4224 4225define internal spir_func ptr addrspace(4) @Foo40A(ptr addrspace(4) %this) { 4226entry: 4227 %retval = alloca ptr addrspace(4) 4228 %this.addr = alloca ptr addrspace(4) 4229 %retval.ascast = addrspacecast ptr %retval to ptr addrspace(4) 4230 store ptr addrspace(4) %this, ptr %this.addr 4231 %this1 = load ptr addrspace(4), ptr %this.addr 4232 %impl1 = bitcast ptr addrspace(4) %this1 to ptr addrspace(4) 4233 %AccessRange = getelementptr inbounds nuw %"detail::AccessorImplDevice", ptr addrspace(4) %impl1, i32 0, i32 1 4234 ret ptr addrspace(4) %AccessRange 4235} 4236 4237 4238define internal spir_func ptr addrspace(4) @Foo41A(ptr addrspace(4) %this) { 4239entry: 4240 %retval = alloca ptr addrspace(4) 4241 %this.addr = alloca ptr addrspace(4) 4242 %retval.ascast = addrspacecast ptr %retval to ptr addrspace(4) 4243 store ptr addrspace(4) %this, ptr %this.addr 4244 %this1 = load ptr addrspace(4), ptr %this.addr 4245 %impl1 = bitcast ptr addrspace(4) %this1 to ptr addrspace(4) 4246 %MemRange = getelementptr inbounds nuw %"detail::AccessorImplDevice", ptr addrspace(4) %impl1, i32 0, i32 2 4247 ret ptr addrspace(4) %MemRange 4248} 4249 4250 4251define internal spir_func void @Foo13(ptr addrspace(4) %f) { 4252entry: 4253 %f.addr = alloca ptr addrspace(4) 4254 %agg.tmp = alloca %"nd_item", align 1 4255 store ptr addrspace(4) %f, ptr %f.addr 4256 %0 = load ptr addrspace(4), ptr %f.addr 4257 call spir_func void @Foo14(ptr byval(%"nd_item") align 1 %agg.tmp, ptr addrspace(4) %0) 4258 ret void 4259} 4260 4261 4262define internal spir_func i64 @Foo21(ptr addrspace(4) %this) { 4263entry: 4264 %retval = alloca i64 4265 %this.addr = alloca ptr addrspace(4) 4266 %TotalOffset = alloca i64 4267 %ref.tmp = alloca %class.anon.7 4268 %cleanup.dest.slot = alloca i32, align 4 4269 %retval.ascast = addrspacecast ptr %retval to ptr addrspace(4) 4270 %TotalOffset.ascast = addrspacecast ptr %TotalOffset to ptr addrspace(4) 4271 %ref.tmp.ascast = addrspacecast ptr %ref.tmp to ptr addrspace(4) 4272 store ptr addrspace(4) %this, ptr %this.addr 4273 %this1 = load ptr addrspace(4), ptr %this.addr 4274 store i64 0, ptr %TotalOffset 4275 %0 = bitcast ptr %ref.tmp to ptr 4276 store ptr addrspace(4) %this1, ptr %0 4277 %TotalOffset2 = getelementptr inbounds %class.anon.7, ptr %ref.tmp, i32 0, i32 1 4278 store ptr addrspace(4) %TotalOffset.ascast, ptr %TotalOffset2 4279 call spir_func void @Bar83(ptr addrspace(4) %ref.tmp.ascast) 4280 %1 = load i64, ptr %TotalOffset 4281 ret i64 %1 4282} 4283 4284 4285define internal spir_func void @Bar83(ptr addrspace(4) %f) { 4286entry: 4287 %f.addr = alloca ptr addrspace(4) 4288 %agg.tmp = alloca %"nd_item", align 1 4289 store ptr addrspace(4) %f, ptr %f.addr 4290 %0 = load ptr addrspace(4), ptr %f.addr 4291 call spir_func void @Bar84(ptr byval(%"nd_item") align 1 %agg.tmp, ptr addrspace(4) %0) 4292 ret void 4293} 4294 4295 4296define internal spir_func void @Bar84(ptr byval(%"nd_item") align 1 %0, ptr addrspace(4) %f) { 4297entry: 4298 %f.addr = alloca ptr addrspace(4) 4299 %ref.tmp = alloca %"nd_item", align 1 4300 %ref.tmp.ascast = addrspacecast ptr %ref.tmp to ptr addrspace(4) 4301 %1 = addrspacecast ptr %0 to ptr addrspace(4) 4302 store ptr addrspace(4) %f, ptr %f.addr 4303 %2 = load ptr addrspace(4), ptr %f.addr 4304 %call = call spir_func i64 @_ZNKSt17integral_constantImLm0EEcvmEv(ptr addrspace(4) align 1 %ref.tmp.ascast) 4305 call spir_func void @Bar85(ptr addrspace(4) %2, i64 %call) 4306 ret void 4307} 4308 4309 4310define internal spir_func void @Bar85(ptr addrspace(4) %this, i64 %I) align 2 { 4311entry: 4312 %this.addr = alloca ptr addrspace(4) 4313 %I.addr = alloca i64 4314 store ptr addrspace(4) %this, ptr %this.addr 4315 store i64 %I, ptr %I.addr 4316 %this1 = load ptr addrspace(4), ptr %this.addr 4317 %0 = bitcast ptr addrspace(4) %this1 to ptr addrspace(4) 4318 %1 = load ptr addrspace(4), ptr addrspace(4) %0 4319 %TotalOffset = getelementptr inbounds nuw %class.anon.7, ptr addrspace(4) %this1, i32 0, i32 1 4320 %2 = load ptr addrspace(4), ptr addrspace(4) %TotalOffset 4321 %3 = load i64, ptr addrspace(4) %2 4322 %impl1 = bitcast ptr addrspace(4) %1 to ptr addrspace(4) 4323 %MemRange = getelementptr inbounds nuw %"detail::AccessorImplDevice", ptr addrspace(4) %impl1, i32 0, i32 2 4324 %4 = load i64, ptr %I.addr 4325 %conv = trunc i64 %4 to i32 4326 %call = call spir_func i64 @Foo37(ptr addrspace(4) %MemRange, i32 %conv) 4327 %mul = mul i64 %3, %call 4328 %TotalOffset2 = getelementptr inbounds nuw %class.anon.7, ptr addrspace(4) %this1, i32 0, i32 1 4329 %5 = load ptr addrspace(4), ptr addrspace(4) %TotalOffset2 4330 store i64 %mul, ptr addrspace(4) %5 4331 %impl32 = bitcast ptr addrspace(4) %1 to ptr addrspace(4) 4332 %Offset3 = bitcast ptr addrspace(4) %impl32 to ptr addrspace(4) 4333 %6 = load i64, ptr %I.addr 4334 %conv4 = trunc i64 %6 to i32 4335 %call5 = call spir_func i64 @Foo37(ptr addrspace(4) %Offset3, i32 %conv4) 4336 %TotalOffset6 = getelementptr inbounds nuw %class.anon.7, ptr addrspace(4) %this1, i32 0, i32 1 4337 %7 = load ptr addrspace(4), ptr addrspace(4) %TotalOffset6 4338 %8 = load i64, ptr addrspace(4) %7 4339 %add = add i64 %8, %call5 4340 store i64 %add, ptr addrspace(4) %7 4341 ret void 4342} 4343 4344 4345define internal spir_func void @Foo14(ptr byval(%"nd_item") align 1 %0, ptr addrspace(4) %f) { 4346entry: 4347 %f.addr = alloca ptr addrspace(4) 4348 %ref.tmp = alloca %"nd_item", align 1 4349 %ref.tmp.ascast = addrspacecast ptr %ref.tmp to ptr addrspace(4) 4350 %1 = addrspacecast ptr %0 to ptr addrspace(4) 4351 store ptr addrspace(4) %f, ptr %f.addr 4352 %2 = load ptr addrspace(4), ptr %f.addr 4353 %call = call spir_func i64 @_ZNKSt17integral_constantImLm0EEcvmEv(ptr addrspace(4) align 1 %ref.tmp.ascast) 4354 call spir_func void @Foo15(ptr addrspace(4) %2, i64 %call) 4355 ret void 4356} 4357 4358 4359define internal spir_func void @Foo15(ptr addrspace(4) %this, i64 %I) align 2 { 4360entry: 4361 %this.addr = alloca ptr addrspace(4) 4362 %I.addr = alloca i64 4363 store ptr addrspace(4) %this, ptr %this.addr 4364 store i64 %I, ptr %I.addr 4365 %this1 = load ptr addrspace(4), ptr %this.addr 4366 %0 = bitcast ptr addrspace(4) %this1 to ptr addrspace(4) 4367 %1 = load ptr addrspace(4), ptr addrspace(4) %0 4368 %Offset = getelementptr inbounds nuw %class.anon.6, ptr addrspace(4) %this1, i32 0, i32 1 4369 %2 = load ptr addrspace(4), ptr addrspace(4) %Offset 4370 %3 = load i64, ptr %I.addr 4371 %conv = trunc i64 %3 to i32 4372 %call = call spir_func ptr addrspace(4) @Foo16(ptr addrspace(4) %2, i32 %conv) 4373 %4 = load i64, ptr addrspace(4) %call 4374 %call2 = call spir_func ptr addrspace(4) @Foo17(ptr addrspace(4) %1) 4375 %5 = load i64, ptr %I.addr 4376 %conv3 = trunc i64 %5 to i32 4377 %call4 = call spir_func ptr addrspace(4) @Foo16(ptr addrspace(4) %call2, i32 %conv3) 4378 store i64 %4, ptr addrspace(4) %call4 4379 %AccessRange = getelementptr inbounds nuw %class.anon.6, ptr addrspace(4) %this1, i32 0, i32 2 4380 %6 = load ptr addrspace(4), ptr addrspace(4) %AccessRange 4381 %7 = load i64, ptr %I.addr 4382 %conv5 = trunc i64 %7 to i32 4383 %call6 = call spir_func ptr addrspace(4) @Foo16(ptr addrspace(4) %6, i32 %conv5) 4384 %8 = load i64, ptr addrspace(4) %call6 4385 %call7 = call spir_func ptr addrspace(4) @Foo18(ptr addrspace(4) %1) 4386 %9 = load i64, ptr %I.addr 4387 %conv8 = trunc i64 %9 to i32 4388 %call9 = call spir_func ptr addrspace(4) @Foo16(ptr addrspace(4) %call7, i32 %conv8) 4389 store i64 %8, ptr addrspace(4) %call9 4390 %MemRange = getelementptr inbounds nuw %class.anon.6, ptr addrspace(4) %this1, i32 0, i32 3 4391 %10 = load ptr addrspace(4), ptr addrspace(4) %MemRange 4392 %11 = load i64, ptr %I.addr 4393 %conv10 = trunc i64 %11 to i32 4394 %call11 = call spir_func ptr addrspace(4) @Foo16(ptr addrspace(4) %10, i32 %conv10) 4395 %12 = load i64, ptr addrspace(4) %call11 4396 %call12 = call spir_func ptr addrspace(4) @Foo19(ptr addrspace(4) %1) 4397 %13 = load i64, ptr %I.addr 4398 %conv13 = trunc i64 %13 to i32 4399 %call14 = call spir_func ptr addrspace(4) @Foo16(ptr addrspace(4) %call12, i32 %conv13) 4400 store i64 %12, ptr addrspace(4) %call14 4401 ret void 4402} 4403 4404 4405define internal spir_func ptr addrspace(4) @Foo17(ptr addrspace(4) %this) { 4406entry: 4407 %retval = alloca ptr addrspace(4) 4408 %this.addr = alloca ptr addrspace(4) 4409 %retval.ascast = addrspacecast ptr %retval to ptr addrspace(4) 4410 store ptr addrspace(4) %this, ptr %this.addr 4411 %this1 = load ptr addrspace(4), ptr %this.addr 4412 %impl1 = bitcast ptr addrspace(4) %this1 to ptr addrspace(4) 4413 %Offset2 = bitcast ptr addrspace(4) %impl1 to ptr addrspace(4) 4414 ret ptr addrspace(4) %Offset2 4415} 4416 4417 4418define internal spir_func ptr addrspace(4) @Foo18(ptr addrspace(4) %this) { 4419entry: 4420 %retval = alloca ptr addrspace(4) 4421 %this.addr = alloca ptr addrspace(4) 4422 %retval.ascast = addrspacecast ptr %retval to ptr addrspace(4) 4423 store ptr addrspace(4) %this, ptr %this.addr 4424 %this1 = load ptr addrspace(4), ptr %this.addr 4425 %impl1 = bitcast ptr addrspace(4) %this1 to ptr addrspace(4) 4426 %AccessRange = getelementptr inbounds nuw %"detail::AccessorImplDevice", ptr addrspace(4) %impl1, i32 0, i32 1 4427 ret ptr addrspace(4) %AccessRange 4428} 4429 4430 4431define internal spir_func ptr addrspace(4) @Foo19(ptr addrspace(4) %this) { 4432entry: 4433 %retval = alloca ptr addrspace(4) 4434 %this.addr = alloca ptr addrspace(4) 4435 %retval.ascast = addrspacecast ptr %retval to ptr addrspace(4) 4436 store ptr addrspace(4) %this, ptr %this.addr 4437 %this1 = load ptr addrspace(4), ptr %this.addr 4438 %impl1 = bitcast ptr addrspace(4) %this1 to ptr addrspace(4) 4439 %MemRange = getelementptr inbounds nuw %"detail::AccessorImplDevice", ptr addrspace(4) %impl1, i32 0, i32 2 4440 ret ptr addrspace(4) %MemRange 4441} 4442 4443 4444declare void @llvm.memset.p0.i64(ptr nocapture writeonly, i8, i64, i1 immarg) 4445 4446 4447define internal spir_func void @Foo12(ptr addrspace(4) dead_on_unwind noalias writable sret(%"range") %agg.result) { 4448entry: 4449 call spir_func void @Foo9(ptr addrspace(4) %agg.result, i64 0) 4450 ret void 4451} 4452 4453 4454define internal spir_func void @Foo10(ptr addrspace(4) %this, ptr byval(%"range") %Offset, ptr byval(%"range") %AccessRange, ptr byval(%"range") %MemoryRange) unnamed_addr { 4455entry: 4456 %this.addr = alloca ptr addrspace(4) 4457 store ptr addrspace(4) %this, ptr %this.addr 4458 %this1 = load ptr addrspace(4), ptr %this.addr 4459 %Offset21 = bitcast ptr addrspace(4) %this1 to ptr addrspace(4) 4460 %AccessRange3 = getelementptr inbounds nuw %"detail::AccessorImplDevice", ptr addrspace(4) %this1, i32 0, i32 1 4461 %MemRange = getelementptr inbounds nuw %"detail::AccessorImplDevice", ptr addrspace(4) %this1, i32 0, i32 2 4462 ret void 4463} 4464 4465 4466define internal spir_func void @__assert_fail(ptr addrspace(4) %expr, ptr addrspace(4) %file, i32 %line, ptr addrspace(4) %func) { 4467entry: 4468 %call = tail call spir_func i64 @_Z28__spirv_GlobalInvocationId_xv() 4469 %call1 = tail call spir_func i64 @_Z28__spirv_GlobalInvocationId_yv() 4470 %call2 = tail call spir_func i64 @_Z28__spirv_GlobalInvocationId_zv() 4471 %call3 = tail call spir_func i64 @_Z27__spirv_LocalInvocationId_xv() 4472 %call4 = tail call spir_func i64 @_Z27__spirv_LocalInvocationId_yv() 4473 %call5 = tail call spir_func i64 @_Z27__spirv_LocalInvocationId_zv() 4474 tail call spir_func void @__devicelib_assert_fail(ptr addrspace(4) %expr, ptr addrspace(4) %file, i32 %line, ptr addrspace(4) %func, i64 %call, i64 %call1, i64 %call2, i64 %call3, i64 %call4, i64 %call5) 4475 ret void 4476} 4477 4478 4479define internal spir_func i64 @_Z28__spirv_GlobalInvocationId_yv() local_unnamed_addr { 4480entry: 4481 %0 = getelementptr inbounds i8, ptr addrspace(1) @__spirv_BuiltInGlobalInvocationId, i64 8 4482 %1 = load i64, ptr addrspace(1) %0 4483 ret i64 %1 4484} 4485 4486 4487define internal spir_func i64 @_Z28__spirv_GlobalInvocationId_zv() local_unnamed_addr { 4488entry: 4489 %0 = getelementptr inbounds i8, ptr addrspace(1) @__spirv_BuiltInGlobalInvocationId, i64 16 4490 %1 = load i64, ptr addrspace(1) %0, align 16 4491 ret i64 %1 4492} 4493 4494 4495define internal spir_func i64 @_Z27__spirv_LocalInvocationId_yv() local_unnamed_addr { 4496entry: 4497 %0 = getelementptr inbounds i8, ptr addrspace(1) @__spirv_BuiltInLocalInvocationId, i64 8 4498 %1 = load i64, ptr addrspace(1) %0 4499 ret i64 %1 4500} 4501 4502 4503define internal spir_func i64 @_Z27__spirv_LocalInvocationId_zv() local_unnamed_addr { 4504entry: 4505 %0 = getelementptr inbounds i8, ptr addrspace(1) @__spirv_BuiltInLocalInvocationId, i64 16 4506 %1 = load i64, ptr addrspace(1) %0, align 16 4507 ret i64 %1 4508} 4509 4510 4511define internal spir_func void @__devicelib_assert_fail(ptr addrspace(4) %expr, ptr addrspace(4) %file, i32 %line, ptr addrspace(4) %func, i64 %gid0, i64 %gid1, i64 %gid2, i64 %lid0, i64 %lid1, i64 %lid2) local_unnamed_addr { 4512entry: 4513 %call.i = tail call spir_func i32 @_Z29__spirv_AtomicCompareExchangePU3AS1iN5__spv5Scope4FlagENS1_19MemorySemanticsMask4FlagES5_ii(ptr addrspace(1) @SPIR_AssertHappenedMem, i32 1, i32 16, i32 16, i32 1, i32 0) 4514 %cmp = icmp eq i32 %call.i, 0 4515 %0 = getelementptr inbounds nuw i8, ptr addrspace(1) @SPIR_AssertHappenedMem, i64 4 4516 %1 = getelementptr inbounds nuw i8, ptr addrspace(1) @SPIR_AssertHappenedMem, i64 261 4517 %2 = getelementptr inbounds nuw i8, ptr addrspace(1) @SPIR_AssertHappenedMem, i64 518 4518 br i1 %cmp, label %if.then, label %if.end82 4519 4520if.then: ; preds = %entry 4521 store i32 %line, ptr addrspace(1) getelementptr inbounds (i8, ptr addrspace(1) @SPIR_AssertHappenedMem, i64 648) 4522 store i64 %gid0, ptr addrspace(1) getelementptr inbounds (i8, ptr addrspace(1) @SPIR_AssertHappenedMem, i64 656) 4523 store i64 %gid1, ptr addrspace(1) getelementptr inbounds (i8, ptr addrspace(1) @SPIR_AssertHappenedMem, i64 664) 4524 store i64 %gid2, ptr addrspace(1) getelementptr inbounds (i8, ptr addrspace(1) @SPIR_AssertHappenedMem, i64 672) 4525 store i64 %lid0, ptr addrspace(1) getelementptr inbounds (i8, ptr addrspace(1) @SPIR_AssertHappenedMem, i64 680) 4526 store i64 %lid1, ptr addrspace(1) getelementptr inbounds (i8, ptr addrspace(1) @SPIR_AssertHappenedMem, i64 688) 4527 store i64 %lid2, ptr addrspace(1) getelementptr inbounds (i8, ptr addrspace(1) @SPIR_AssertHappenedMem, i64 696) 4528 %tobool.not = icmp eq ptr addrspace(4) %expr, null 4529 br i1 %tobool.not, label %if.end, label %for.cond.preheader 4530 4531for.cond.preheader: ; preds = %if.then 4532 br label %for.cond 4533 4534for.cond: ; preds = %for.cond.preheader, %for.inc 4535 %ExprLength.0 = phi i32 [ %inc, %for.inc ], [ 0, %for.cond.preheader ] 4536 %C.0 = phi ptr addrspace(4) [ %incdec.ptr, %for.inc ], [ %expr, %for.cond.preheader ] 4537 %3 = load i8, ptr addrspace(4) %C.0, align 1 4538 %cmp2.not = icmp eq i8 %3, 0 4539 br i1 %cmp2.not, label %if.end, label %for.inc 4540 4541for.inc: ; preds = %for.cond 4542 %incdec.ptr = getelementptr inbounds nuw i8, ptr addrspace(4) %C.0, i64 1 4543 %inc = add nuw nsw i32 %ExprLength.0, 1 4544 br label %for.cond 4545 4546if.end: ; preds = %for.cond, %if.then 4547 %ExprLength.1 = phi i32 [ 0, %if.then ], [ %ExprLength.0, %for.cond ] 4548 %tobool3.not = icmp eq ptr addrspace(4) %file, null 4549 br i1 %tobool3.not, label %if.end16, label %for.cond6.preheader 4550 4551for.cond6.preheader: ; preds = %if.end 4552 br label %for.cond6 4553 4554for.cond6: ; preds = %for.cond6.preheader, %for.inc12 4555 %FileLength.0 = phi i32 [ %inc14, %for.inc12 ], [ 0, %for.cond6.preheader ] 4556 %C5.0 = phi ptr addrspace(4) [ %incdec.ptr13, %for.inc12 ], [ %file, %for.cond6.preheader ] 4557 %4 = load i8, ptr addrspace(4) %C5.0, align 1 4558 %cmp8.not = icmp eq i8 %4, 0 4559 br i1 %cmp8.not, label %if.end16, label %for.inc12 4560 4561for.inc12: ; preds = %for.cond6 4562 %incdec.ptr13 = getelementptr inbounds nuw i8, ptr addrspace(4) %C5.0, i64 1 4563 %inc14 = add nuw nsw i32 %FileLength.0, 1 4564 br label %for.cond6 4565 4566if.end16: ; preds = %for.cond6, %if.end 4567 %FileLength.1 = phi i32 [ 0, %if.end ], [ %FileLength.0, %for.cond6 ] 4568 %tobool17.not = icmp eq ptr addrspace(4) %func, null 4569 br i1 %tobool17.not, label %if.end30.thread, label %for.cond20.preheader 4570 4571for.cond20.preheader: ; preds = %if.end16 4572 br label %for.cond20 4573 4574for.cond20: ; preds = %for.cond20.preheader, %for.inc26 4575 %FuncLength.0 = phi i32 [ %inc28, %for.inc26 ], [ 0, %for.cond20.preheader ] 4576 %C19.0 = phi ptr addrspace(4) [ %incdec.ptr27, %for.inc26 ], [ %func, %for.cond20.preheader ] 4577 %5 = load i8, ptr addrspace(4) %C19.0, align 1 4578 %cmp22.not = icmp eq i8 %5, 0 4579 br i1 %cmp22.not, label %if.end30, label %for.inc26 4580 4581for.inc26: ; preds = %for.cond20 4582 %incdec.ptr27 = getelementptr inbounds nuw i8, ptr addrspace(4) %C19.0, i64 1 4583 %inc28 = add i32 %FuncLength.0, 1 4584 br label %for.cond20 4585 4586if.end30: ; preds = %for.cond20 4587 %spec.select = tail call i32 @llvm.umin.i32(i32 %ExprLength.1, i32 256) 4588 %MaxFileIdx.0 = tail call i32 @llvm.umin.i32(i32 %FileLength.1, i32 256) 4589 %spec.select126 = tail call i32 @llvm.umin.i32(i32 %FuncLength.0, i32 128) 4590 br label %6 4591 4592if.end30.thread: ; preds = %if.end16 4593 %spec.select116 = tail call i32 @llvm.umin.i32(i32 %ExprLength.1, i32 256) 4594 %MaxFileIdx.0118 = tail call i32 @llvm.umin.i32(i32 %FileLength.1, i32 256) 4595 br label %6 4596 45976: ; preds = %if.end30, %if.end30.thread 4598 %MaxFileIdx.0124 = phi i32 [ %MaxFileIdx.0118, %if.end30.thread ], [ %MaxFileIdx.0, %if.end30 ] 4599 %spec.select122 = phi i32 [ %spec.select116, %if.end30.thread ], [ %spec.select, %if.end30 ] 4600 %7 = phi i32 [ 0, %if.end30.thread ], [ %spec.select126, %if.end30 ] 4601 br label %for.cond40 4602 4603for.cond40: ; preds = %for.body44, %6 4604 %lsr.iv9 = phi ptr addrspace(4) [ %scevgep10, %for.body44 ], [ %expr, %6 ] 4605 %lsr.iv7 = phi ptr addrspace(1) [ %scevgep8, %for.body44 ], [ %0, %6 ] 4606 %Idx.0 = phi i32 [ 0, %6 ], [ %inc48, %for.body44 ] 4607 %cmp41 = icmp ult i32 %Idx.0, %spec.select122 4608 br i1 %cmp41, label %for.body44, label %for.cond.cleanup42 4609 4610for.cond.cleanup42: ; preds = %for.cond40 4611 %idxprom50 = zext nneg i32 %spec.select122 to i64 4612 %arrayidx51 = getelementptr inbounds [257 x i8], ptr addrspace(1) %0, i64 0, i64 %idxprom50 4613 store i8 0, ptr addrspace(1) %arrayidx51, align 1 4614 br label %for.cond53 4615 4616for.cond53: ; preds = %for.body57, %for.cond.cleanup42 4617 %lsr.iv5 = phi ptr addrspace(4) [ %scevgep6, %for.body57 ], [ %file, %for.cond.cleanup42 ] 4618 %lsr.iv3 = phi ptr addrspace(1) [ %scevgep4, %for.body57 ], [ %1, %for.cond.cleanup42 ] 4619 %Idx52.0 = phi i32 [ 0, %for.cond.cleanup42 ], [ %inc63, %for.body57 ] 4620 %cmp54 = icmp ult i32 %Idx52.0, %MaxFileIdx.0124 4621 br i1 %cmp54, label %for.body57, label %for.cond.cleanup55 4622 4623for.cond.cleanup55: ; preds = %for.cond53 4624 %idxprom65 = zext nneg i32 %MaxFileIdx.0124 to i64 4625 %arrayidx66 = getelementptr inbounds [257 x i8], ptr addrspace(1) %1, i64 0, i64 %idxprom65 4626 store i8 0, ptr addrspace(1) %arrayidx66, align 1 4627 br label %for.cond68 4628 4629for.cond68: ; preds = %for.body72, %for.cond.cleanup55 4630 %lsr.iv1 = phi ptr addrspace(4) [ %scevgep2, %for.body72 ], [ %func, %for.cond.cleanup55 ] 4631 %lsr.iv = phi ptr addrspace(1) [ %scevgep, %for.body72 ], [ %2, %for.cond.cleanup55 ] 4632 %Idx67.0 = phi i32 [ 0, %for.cond.cleanup55 ], [ %inc78, %for.body72 ] 4633 %cmp69 = icmp ult i32 %Idx67.0, %7 4634 br i1 %cmp69, label %for.body72, label %for.cond.cleanup70 4635 4636for.cond.cleanup70: ; preds = %for.cond68 4637 %idxprom80 = zext nneg i32 %7 to i64 4638 %arrayidx81 = getelementptr inbounds [129 x i8], ptr addrspace(1) %2, i64 0, i64 %idxprom80 4639 store i8 0, ptr addrspace(1) %arrayidx81, align 1 4640 tail call spir_func void @_Z19__spirv_AtomicStorePU3AS1iN5__spv5Scope4FlagENS1_19MemorySemanticsMask4FlagEi(ptr addrspace(1) @SPIR_AssertHappenedMem, i32 1, i32 16, i32 2) 4641 br label %if.end82 4642 4643if.end82: ; preds = %for.cond.cleanup70, %entry 4644 ret void 4645 4646for.body72: ; preds = %for.cond68 4647 %8 = load i8, ptr addrspace(4) %lsr.iv1, align 1 4648 store i8 %8, ptr addrspace(1) %lsr.iv, align 1 4649 %inc78 = add nuw nsw i32 %Idx67.0, 1 4650 %scevgep = getelementptr i8, ptr addrspace(1) %lsr.iv, i64 1 4651 %scevgep2 = getelementptr i8, ptr addrspace(4) %lsr.iv1, i64 1 4652 br label %for.cond68 4653 4654for.body57: ; preds = %for.cond53 4655 %9 = load i8, ptr addrspace(4) %lsr.iv5, align 1 4656 store i8 %9, ptr addrspace(1) %lsr.iv3, align 1 4657 %inc63 = add nuw nsw i32 %Idx52.0, 1 4658 %scevgep4 = getelementptr i8, ptr addrspace(1) %lsr.iv3, i64 1 4659 %scevgep6 = getelementptr i8, ptr addrspace(4) %lsr.iv5, i64 1 4660 br label %for.cond53 4661 4662for.body44: ; preds = %for.cond40 4663 %10 = load i8, ptr addrspace(4) %lsr.iv9, align 1 4664 store i8 %10, ptr addrspace(1) %lsr.iv7, align 1 4665 %inc48 = add nuw nsw i32 %Idx.0, 1 4666 %scevgep8 = getelementptr i8, ptr addrspace(1) %lsr.iv7, i64 1 4667 %scevgep10 = getelementptr i8, ptr addrspace(4) %lsr.iv9, i64 1 4668 br label %for.cond40 4669} 4670 4671declare extern_weak dso_local spir_func i32 @_Z29__spirv_AtomicCompareExchangePU3AS1iN5__spv5Scope4FlagENS1_19MemorySemanticsMask4FlagES5_ii(ptr addrspace(1), i32, i32, i32, i32, i32) local_unnamed_addr 4672declare extern_weak dso_local spir_func void @_Z19__spirv_AtomicStorePU3AS1iN5__spv5Scope4FlagENS1_19MemorySemanticsMask4FlagEi(ptr addrspace(1), i32, i32, i32) local_unnamed_addr 4673declare i32 @llvm.umin.i32(i32, i32) 4674