xref: /llvm-project/llvm/test/CodeGen/SPIRV/validate/sycl-tangle-group-algorithms.ll (revision 6ada0022ce5703c0c4abbdb25d4cef038b6eef37)
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