xref: /aosp_15_r20/external/skia/tests/sksl/shared/Matrices.asm.frag (revision c8dee2aa9b3f27cf6c858bd81872bdeb2c07ed17)
1               OpCapability Shader
2          %1 = OpExtInstImport "GLSL.std.450"
3               OpMemoryModel Logical GLSL450
4               OpEntryPoint Fragment %_entrypoint_v "_entrypoint" %sk_FragColor
5               OpExecutionMode %_entrypoint_v OriginUpperLeft
6               OpName %sk_FragColor "sk_FragColor"
7               OpName %_UniformBuffer "_UniformBuffer"
8               OpMemberName %_UniformBuffer 0 "colorGreen"
9               OpMemberName %_UniformBuffer 1 "colorRed"
10               OpName %_entrypoint_v "_entrypoint_v"
11               OpName %test_half_b "test_half_b"
12               OpName %ok "ok"
13               OpName %m1 "m1"
14               OpName %m3 "m3"
15               OpName %m4 "m4"
16               OpName %m5 "m5"
17               OpName %m7 "m7"
18               OpName %m9 "m9"
19               OpName %m10 "m10"
20               OpName %m11 "m11"
21               OpName %test_comma_b "test_comma_b"
22               OpName %x "x"
23               OpName %y "y"
24               OpName %main "main"
25               OpName %_0_ok "_0_ok"
26               OpName %_1_m1 "_1_m1"
27               OpName %_2_m3 "_2_m3"
28               OpName %_3_m4 "_3_m4"
29               OpName %_4_m5 "_4_m5"
30               OpName %_7_m10 "_7_m10"
31               OpName %_8_m11 "_8_m11"
32               OpDecorate %sk_FragColor RelaxedPrecision
33               OpDecorate %sk_FragColor Location 0
34               OpDecorate %sk_FragColor Index 0
35               OpMemberDecorate %_UniformBuffer 0 Offset 0
36               OpMemberDecorate %_UniformBuffer 0 RelaxedPrecision
37               OpMemberDecorate %_UniformBuffer 1 Offset 16
38               OpMemberDecorate %_UniformBuffer 1 RelaxedPrecision
39               OpDecorate %_UniformBuffer Block
40               OpDecorate %9 Binding 0
41               OpDecorate %9 DescriptorSet 0
42               OpDecorate %m1 RelaxedPrecision
43               OpDecorate %42 RelaxedPrecision
44               OpDecorate %44 RelaxedPrecision
45               OpDecorate %m3 RelaxedPrecision
46               OpDecorate %51 RelaxedPrecision
47               OpDecorate %53 RelaxedPrecision
48               OpDecorate %m4 RelaxedPrecision
49               OpDecorate %64 RelaxedPrecision
50               OpDecorate %66 RelaxedPrecision
51               OpDecorate %70 RelaxedPrecision
52               OpDecorate %79 RelaxedPrecision
53               OpDecorate %80 RelaxedPrecision
54               OpDecorate %82 RelaxedPrecision
55               OpDecorate %83 RelaxedPrecision
56               OpDecorate %m5 RelaxedPrecision
57               OpDecorate %91 RelaxedPrecision
58               OpDecorate %92 RelaxedPrecision
59               OpDecorate %93 RelaxedPrecision
60               OpDecorate %94 RelaxedPrecision
61               OpDecorate %95 RelaxedPrecision
62               OpDecorate %101 RelaxedPrecision
63               OpDecorate %103 RelaxedPrecision
64               OpDecorate %107 RelaxedPrecision
65               OpDecorate %108 RelaxedPrecision
66               OpDecorate %109 RelaxedPrecision
67               OpDecorate %117 RelaxedPrecision
68               OpDecorate %119 RelaxedPrecision
69               OpDecorate %m7 RelaxedPrecision
70               OpDecorate %130 RelaxedPrecision
71               OpDecorate %132 RelaxedPrecision
72               OpDecorate %m9 RelaxedPrecision
73               OpDecorate %148 RelaxedPrecision
74               OpDecorate %150 RelaxedPrecision
75               OpDecorate %153 RelaxedPrecision
76               OpDecorate %m10 RelaxedPrecision
77               OpDecorate %169 RelaxedPrecision
78               OpDecorate %171 RelaxedPrecision
79               OpDecorate %174 RelaxedPrecision
80               OpDecorate %177 RelaxedPrecision
81               OpDecorate %m11 RelaxedPrecision
82               OpDecorate %185 RelaxedPrecision
83               OpDecorate %186 RelaxedPrecision
84               OpDecorate %187 RelaxedPrecision
85               OpDecorate %188 RelaxedPrecision
86               OpDecorate %189 RelaxedPrecision
87               OpDecorate %197 RelaxedPrecision
88               OpDecorate %199 RelaxedPrecision
89               OpDecorate %202 RelaxedPrecision
90               OpDecorate %205 RelaxedPrecision
91               OpDecorate %314 RelaxedPrecision
92               OpDecorate %316 RelaxedPrecision
93               OpDecorate %317 RelaxedPrecision
94      %float = OpTypeFloat 32
95    %v4float = OpTypeVector %float 4
96%_ptr_Output_v4float = OpTypePointer Output %v4float
97%sk_FragColor = OpVariable %_ptr_Output_v4float Output
98%_UniformBuffer = OpTypeStruct %v4float %v4float
99%_ptr_Uniform__UniformBuffer = OpTypePointer Uniform %_UniformBuffer
100          %9 = OpVariable %_ptr_Uniform__UniformBuffer Uniform
101       %void = OpTypeVoid
102         %14 = OpTypeFunction %void
103    %float_0 = OpConstant %float 0
104    %v2float = OpTypeVector %float 2
105         %18 = OpConstantComposite %v2float %float_0 %float_0
106%_ptr_Function_v2float = OpTypePointer Function %v2float
107       %bool = OpTypeBool
108         %23 = OpTypeFunction %bool
109%_ptr_Function_bool = OpTypePointer Function %bool
110       %true = OpConstantTrue %bool
111%mat2v2float = OpTypeMatrix %v2float 2
112%_ptr_Function_mat2v2float = OpTypePointer Function %mat2v2float
113    %float_1 = OpConstant %float 1
114    %float_2 = OpConstant %float 2
115    %float_3 = OpConstant %float 3
116    %float_4 = OpConstant %float 4
117         %35 = OpConstantComposite %v2float %float_1 %float_2
118         %36 = OpConstantComposite %v2float %float_3 %float_4
119         %37 = OpConstantComposite %mat2v2float %35 %36
120      %false = OpConstantFalse %bool
121     %v2bool = OpTypeVector %bool 2
122    %float_6 = OpConstant %float 6
123         %59 = OpConstantComposite %v2float %float_6 %float_0
124         %60 = OpConstantComposite %v2float %float_0 %float_6
125         %61 = OpConstantComposite %mat2v2float %59 %60
126   %float_12 = OpConstant %float 12
127   %float_18 = OpConstant %float 18
128   %float_24 = OpConstant %float 24
129         %76 = OpConstantComposite %v2float %float_6 %float_12
130         %77 = OpConstantComposite %v2float %float_18 %float_24
131         %78 = OpConstantComposite %mat2v2float %76 %77
132        %int = OpTypeInt 32 1
133      %int_1 = OpConstant %int 1
134         %98 = OpConstantComposite %v2float %float_4 %float_0
135         %99 = OpConstantComposite %v2float %float_0 %float_4
136        %100 = OpConstantComposite %mat2v2float %98 %99
137    %float_5 = OpConstant %float 5
138    %float_8 = OpConstant %float 8
139        %114 = OpConstantComposite %v2float %float_5 %float_2
140        %115 = OpConstantComposite %v2float %float_3 %float_8
141        %116 = OpConstantComposite %mat2v2float %114 %115
142    %float_7 = OpConstant %float 7
143        %125 = OpConstantComposite %v2float %float_5 %float_6
144        %126 = OpConstantComposite %v2float %float_7 %float_8
145        %127 = OpConstantComposite %mat2v2float %125 %126
146    %v3float = OpTypeVector %float 3
147%mat3v3float = OpTypeMatrix %v3float 3
148%_ptr_Function_mat3v3float = OpTypePointer Function %mat3v3float
149    %float_9 = OpConstant %float 9
150        %141 = OpConstantComposite %v3float %float_9 %float_0 %float_0
151        %142 = OpConstantComposite %v3float %float_0 %float_9 %float_0
152        %143 = OpConstantComposite %v3float %float_0 %float_0 %float_9
153        %144 = OpConstantComposite %mat3v3float %141 %142 %143
154     %v3bool = OpTypeVector %bool 3
155%mat4v4float = OpTypeMatrix %v4float 4
156%_ptr_Function_mat4v4float = OpTypePointer Function %mat4v4float
157   %float_11 = OpConstant %float 11
158        %161 = OpConstantComposite %v4float %float_11 %float_0 %float_0 %float_0
159        %162 = OpConstantComposite %v4float %float_0 %float_11 %float_0 %float_0
160        %163 = OpConstantComposite %v4float %float_0 %float_0 %float_11 %float_0
161        %164 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_11
162        %165 = OpConstantComposite %mat4v4float %161 %162 %163 %164
163     %v4bool = OpTypeVector %bool 4
164   %float_20 = OpConstant %float 20
165        %183 = OpConstantComposite %v4float %float_20 %float_20 %float_20 %float_20
166        %184 = OpConstantComposite %mat4v4float %183 %183 %183 %183
167        %192 = OpConstantComposite %v4float %float_9 %float_20 %float_20 %float_20
168        %193 = OpConstantComposite %v4float %float_20 %float_9 %float_20 %float_20
169        %194 = OpConstantComposite %v4float %float_20 %float_20 %float_9 %float_20
170        %195 = OpConstantComposite %v4float %float_20 %float_20 %float_20 %float_9
171        %196 = OpConstantComposite %mat4v4float %192 %193 %194 %195
172        %217 = OpTypeFunction %v4float %_ptr_Function_v2float
173%_ptr_Function_v4float = OpTypePointer Function %v4float
174%_ptr_Uniform_v4float = OpTypePointer Uniform %v4float
175      %int_0 = OpConstant %int 0
176%_entrypoint_v = OpFunction %void None %14
177         %15 = OpLabel
178         %19 = OpVariable %_ptr_Function_v2float Function
179               OpStore %19 %18
180         %21 = OpFunctionCall %v4float %main %19
181               OpStore %sk_FragColor %21
182               OpReturn
183               OpFunctionEnd
184%test_half_b = OpFunction %bool None %23
185         %24 = OpLabel
186         %ok = OpVariable %_ptr_Function_bool Function
187         %m1 = OpVariable %_ptr_Function_mat2v2float Function
188         %m3 = OpVariable %_ptr_Function_mat2v2float Function
189         %m4 = OpVariable %_ptr_Function_mat2v2float Function
190         %m5 = OpVariable %_ptr_Function_mat2v2float Function
191         %m7 = OpVariable %_ptr_Function_mat2v2float Function
192         %m9 = OpVariable %_ptr_Function_mat3v3float Function
193        %m10 = OpVariable %_ptr_Function_mat4v4float Function
194        %m11 = OpVariable %_ptr_Function_mat4v4float Function
195               OpStore %ok %true
196               OpStore %m1 %37
197               OpSelectionMerge %40 None
198               OpBranchConditional %true %39 %40
199         %39 = OpLabel
200         %42 = OpFOrdEqual %v2bool %35 %35
201         %43 = OpAll %bool %42
202         %44 = OpFOrdEqual %v2bool %36 %36
203         %45 = OpAll %bool %44
204         %46 = OpLogicalAnd %bool %43 %45
205               OpBranch %40
206         %40 = OpLabel
207         %47 = OpPhi %bool %false %24 %46 %39
208               OpStore %ok %47
209               OpStore %m3 %37
210               OpSelectionMerge %50 None
211               OpBranchConditional %47 %49 %50
212         %49 = OpLabel
213         %51 = OpFOrdEqual %v2bool %35 %35
214         %52 = OpAll %bool %51
215         %53 = OpFOrdEqual %v2bool %36 %36
216         %54 = OpAll %bool %53
217         %55 = OpLogicalAnd %bool %52 %54
218               OpBranch %50
219         %50 = OpLabel
220         %56 = OpPhi %bool %false %40 %55 %49
221               OpStore %ok %56
222               OpStore %m4 %61
223               OpSelectionMerge %63 None
224               OpBranchConditional %56 %62 %63
225         %62 = OpLabel
226         %64 = OpFOrdEqual %v2bool %59 %59
227         %65 = OpAll %bool %64
228         %66 = OpFOrdEqual %v2bool %60 %60
229         %67 = OpAll %bool %66
230         %68 = OpLogicalAnd %bool %65 %67
231               OpBranch %63
232         %63 = OpLabel
233         %69 = OpPhi %bool %false %50 %68 %62
234               OpStore %ok %69
235         %70 = OpMatrixTimesMatrix %mat2v2float %37 %61
236               OpStore %m3 %70
237               OpSelectionMerge %72 None
238               OpBranchConditional %69 %71 %72
239         %71 = OpLabel
240         %79 = OpCompositeExtract %v2float %70 0
241         %80 = OpFOrdEqual %v2bool %79 %76
242         %81 = OpAll %bool %80
243         %82 = OpCompositeExtract %v2float %70 1
244         %83 = OpFOrdEqual %v2bool %82 %77
245         %84 = OpAll %bool %83
246         %85 = OpLogicalAnd %bool %81 %84
247               OpBranch %72
248         %72 = OpLabel
249         %86 = OpPhi %bool %false %63 %85 %71
250               OpStore %ok %86
251         %90 = OpAccessChain %_ptr_Function_v2float %m1 %int_1
252         %91 = OpLoad %v2float %90
253         %92 = OpCompositeExtract %float %91 1
254         %93 = OpCompositeConstruct %v2float %92 %float_0
255         %94 = OpCompositeConstruct %v2float %float_0 %92
256         %95 = OpCompositeConstruct %mat2v2float %93 %94
257               OpStore %m5 %95
258               OpSelectionMerge %97 None
259               OpBranchConditional %86 %96 %97
260         %96 = OpLabel
261        %101 = OpFOrdEqual %v2bool %93 %98
262        %102 = OpAll %bool %101
263        %103 = OpFOrdEqual %v2bool %94 %99
264        %104 = OpAll %bool %103
265        %105 = OpLogicalAnd %bool %102 %104
266               OpBranch %97
267         %97 = OpLabel
268        %106 = OpPhi %bool %false %72 %105 %96
269               OpStore %ok %106
270        %107 = OpFAdd %v2float %35 %93
271        %108 = OpFAdd %v2float %36 %94
272        %109 = OpCompositeConstruct %mat2v2float %107 %108
273               OpStore %m1 %109
274               OpSelectionMerge %111 None
275               OpBranchConditional %106 %110 %111
276        %110 = OpLabel
277        %117 = OpFOrdEqual %v2bool %107 %114
278        %118 = OpAll %bool %117
279        %119 = OpFOrdEqual %v2bool %108 %115
280        %120 = OpAll %bool %119
281        %121 = OpLogicalAnd %bool %118 %120
282               OpBranch %111
283        %111 = OpLabel
284        %122 = OpPhi %bool %false %97 %121 %110
285               OpStore %ok %122
286               OpStore %m7 %127
287               OpSelectionMerge %129 None
288               OpBranchConditional %122 %128 %129
289        %128 = OpLabel
290        %130 = OpFOrdEqual %v2bool %125 %125
291        %131 = OpAll %bool %130
292        %132 = OpFOrdEqual %v2bool %126 %126
293        %133 = OpAll %bool %132
294        %134 = OpLogicalAnd %bool %131 %133
295               OpBranch %129
296        %129 = OpLabel
297        %135 = OpPhi %bool %false %111 %134 %128
298               OpStore %ok %135
299               OpStore %m9 %144
300               OpSelectionMerge %146 None
301               OpBranchConditional %135 %145 %146
302        %145 = OpLabel
303        %148 = OpFOrdEqual %v3bool %141 %141
304        %149 = OpAll %bool %148
305        %150 = OpFOrdEqual %v3bool %142 %142
306        %151 = OpAll %bool %150
307        %152 = OpLogicalAnd %bool %149 %151
308        %153 = OpFOrdEqual %v3bool %143 %143
309        %154 = OpAll %bool %153
310        %155 = OpLogicalAnd %bool %152 %154
311               OpBranch %146
312        %146 = OpLabel
313        %156 = OpPhi %bool %false %129 %155 %145
314               OpStore %ok %156
315               OpStore %m10 %165
316               OpSelectionMerge %167 None
317               OpBranchConditional %156 %166 %167
318        %166 = OpLabel
319        %169 = OpFOrdEqual %v4bool %161 %161
320        %170 = OpAll %bool %169
321        %171 = OpFOrdEqual %v4bool %162 %162
322        %172 = OpAll %bool %171
323        %173 = OpLogicalAnd %bool %170 %172
324        %174 = OpFOrdEqual %v4bool %163 %163
325        %175 = OpAll %bool %174
326        %176 = OpLogicalAnd %bool %173 %175
327        %177 = OpFOrdEqual %v4bool %164 %164
328        %178 = OpAll %bool %177
329        %179 = OpLogicalAnd %bool %176 %178
330               OpBranch %167
331        %167 = OpLabel
332        %180 = OpPhi %bool %false %146 %179 %166
333               OpStore %ok %180
334               OpStore %m11 %184
335        %185 = OpFSub %v4float %183 %161
336        %186 = OpFSub %v4float %183 %162
337        %187 = OpFSub %v4float %183 %163
338        %188 = OpFSub %v4float %183 %164
339        %189 = OpCompositeConstruct %mat4v4float %185 %186 %187 %188
340               OpStore %m11 %189
341               OpSelectionMerge %191 None
342               OpBranchConditional %180 %190 %191
343        %190 = OpLabel
344        %197 = OpFOrdEqual %v4bool %185 %192
345        %198 = OpAll %bool %197
346        %199 = OpFOrdEqual %v4bool %186 %193
347        %200 = OpAll %bool %199
348        %201 = OpLogicalAnd %bool %198 %200
349        %202 = OpFOrdEqual %v4bool %187 %194
350        %203 = OpAll %bool %202
351        %204 = OpLogicalAnd %bool %201 %203
352        %205 = OpFOrdEqual %v4bool %188 %195
353        %206 = OpAll %bool %205
354        %207 = OpLogicalAnd %bool %204 %206
355               OpBranch %191
356        %191 = OpLabel
357        %208 = OpPhi %bool %false %167 %207 %190
358               OpStore %ok %208
359               OpReturnValue %208
360               OpFunctionEnd
361%test_comma_b = OpFunction %bool None %23
362        %209 = OpLabel
363          %x = OpVariable %_ptr_Function_mat2v2float Function
364          %y = OpVariable %_ptr_Function_mat2v2float Function
365               OpStore %x %37
366               OpStore %y %37
367        %212 = OpFOrdEqual %v2bool %35 %35
368        %213 = OpAll %bool %212
369        %214 = OpFOrdEqual %v2bool %36 %36
370        %215 = OpAll %bool %214
371        %216 = OpLogicalAnd %bool %213 %215
372               OpReturnValue %216
373               OpFunctionEnd
374       %main = OpFunction %v4float None %217
375        %218 = OpFunctionParameter %_ptr_Function_v2float
376        %219 = OpLabel
377      %_0_ok = OpVariable %_ptr_Function_bool Function
378      %_1_m1 = OpVariable %_ptr_Function_mat2v2float Function
379      %_2_m3 = OpVariable %_ptr_Function_mat2v2float Function
380      %_3_m4 = OpVariable %_ptr_Function_mat2v2float Function
381      %_4_m5 = OpVariable %_ptr_Function_mat2v2float Function
382     %_7_m10 = OpVariable %_ptr_Function_mat4v4float Function
383     %_8_m11 = OpVariable %_ptr_Function_mat4v4float Function
384        %306 = OpVariable %_ptr_Function_v4float Function
385               OpStore %_0_ok %true
386               OpStore %_1_m1 %37
387               OpSelectionMerge %223 None
388               OpBranchConditional %true %222 %223
389        %222 = OpLabel
390        %224 = OpFOrdEqual %v2bool %35 %35
391        %225 = OpAll %bool %224
392        %226 = OpFOrdEqual %v2bool %36 %36
393        %227 = OpAll %bool %226
394        %228 = OpLogicalAnd %bool %225 %227
395               OpBranch %223
396        %223 = OpLabel
397        %229 = OpPhi %bool %false %219 %228 %222
398               OpStore %_0_ok %229
399               OpStore %_2_m3 %37
400               OpSelectionMerge %232 None
401               OpBranchConditional %229 %231 %232
402        %231 = OpLabel
403        %233 = OpFOrdEqual %v2bool %35 %35
404        %234 = OpAll %bool %233
405        %235 = OpFOrdEqual %v2bool %36 %36
406        %236 = OpAll %bool %235
407        %237 = OpLogicalAnd %bool %234 %236
408               OpBranch %232
409        %232 = OpLabel
410        %238 = OpPhi %bool %false %223 %237 %231
411               OpStore %_0_ok %238
412               OpStore %_3_m4 %61
413        %240 = OpMatrixTimesMatrix %mat2v2float %37 %61
414               OpStore %_2_m3 %240
415               OpSelectionMerge %242 None
416               OpBranchConditional %238 %241 %242
417        %241 = OpLabel
418        %243 = OpCompositeExtract %v2float %240 0
419        %244 = OpFOrdEqual %v2bool %243 %76
420        %245 = OpAll %bool %244
421        %246 = OpCompositeExtract %v2float %240 1
422        %247 = OpFOrdEqual %v2bool %246 %77
423        %248 = OpAll %bool %247
424        %249 = OpLogicalAnd %bool %245 %248
425               OpBranch %242
426        %242 = OpLabel
427        %250 = OpPhi %bool %false %232 %249 %241
428               OpStore %_0_ok %250
429        %252 = OpAccessChain %_ptr_Function_v2float %_1_m1 %int_1
430        %253 = OpLoad %v2float %252
431        %254 = OpCompositeExtract %float %253 1
432        %255 = OpCompositeConstruct %v2float %254 %float_0
433        %256 = OpCompositeConstruct %v2float %float_0 %254
434        %257 = OpCompositeConstruct %mat2v2float %255 %256
435               OpStore %_4_m5 %257
436               OpSelectionMerge %259 None
437               OpBranchConditional %250 %258 %259
438        %258 = OpLabel
439        %260 = OpFOrdEqual %v2bool %255 %98
440        %261 = OpAll %bool %260
441        %262 = OpFOrdEqual %v2bool %256 %99
442        %263 = OpAll %bool %262
443        %264 = OpLogicalAnd %bool %261 %263
444               OpBranch %259
445        %259 = OpLabel
446        %265 = OpPhi %bool %false %242 %264 %258
447               OpStore %_0_ok %265
448        %266 = OpFAdd %v2float %35 %255
449        %267 = OpFAdd %v2float %36 %256
450        %268 = OpCompositeConstruct %mat2v2float %266 %267
451               OpStore %_1_m1 %268
452               OpSelectionMerge %270 None
453               OpBranchConditional %265 %269 %270
454        %269 = OpLabel
455        %271 = OpFOrdEqual %v2bool %266 %114
456        %272 = OpAll %bool %271
457        %273 = OpFOrdEqual %v2bool %267 %115
458        %274 = OpAll %bool %273
459        %275 = OpLogicalAnd %bool %272 %274
460               OpBranch %270
461        %270 = OpLabel
462        %276 = OpPhi %bool %false %259 %275 %269
463               OpStore %_0_ok %276
464               OpStore %_7_m10 %165
465               OpStore %_8_m11 %184
466        %279 = OpFSub %v4float %183 %161
467        %280 = OpFSub %v4float %183 %162
468        %281 = OpFSub %v4float %183 %163
469        %282 = OpFSub %v4float %183 %164
470        %283 = OpCompositeConstruct %mat4v4float %279 %280 %281 %282
471               OpStore %_8_m11 %283
472               OpSelectionMerge %285 None
473               OpBranchConditional %276 %284 %285
474        %284 = OpLabel
475        %286 = OpFOrdEqual %v4bool %279 %192
476        %287 = OpAll %bool %286
477        %288 = OpFOrdEqual %v4bool %280 %193
478        %289 = OpAll %bool %288
479        %290 = OpLogicalAnd %bool %287 %289
480        %291 = OpFOrdEqual %v4bool %281 %194
481        %292 = OpAll %bool %291
482        %293 = OpLogicalAnd %bool %290 %292
483        %294 = OpFOrdEqual %v4bool %282 %195
484        %295 = OpAll %bool %294
485        %296 = OpLogicalAnd %bool %293 %295
486               OpBranch %285
487        %285 = OpLabel
488        %297 = OpPhi %bool %false %270 %296 %284
489               OpStore %_0_ok %297
490               OpSelectionMerge %299 None
491               OpBranchConditional %297 %298 %299
492        %298 = OpLabel
493        %300 = OpFunctionCall %bool %test_half_b
494               OpBranch %299
495        %299 = OpLabel
496        %301 = OpPhi %bool %false %285 %300 %298
497               OpSelectionMerge %303 None
498               OpBranchConditional %301 %302 %303
499        %302 = OpLabel
500        %304 = OpFunctionCall %bool %test_comma_b
501               OpBranch %303
502        %303 = OpLabel
503        %305 = OpPhi %bool %false %299 %304 %302
504               OpSelectionMerge %310 None
505               OpBranchConditional %305 %308 %309
506        %308 = OpLabel
507        %311 = OpAccessChain %_ptr_Uniform_v4float %9 %int_0
508        %314 = OpLoad %v4float %311
509               OpStore %306 %314
510               OpBranch %310
511        %309 = OpLabel
512        %315 = OpAccessChain %_ptr_Uniform_v4float %9 %int_1
513        %316 = OpLoad %v4float %315
514               OpStore %306 %316
515               OpBranch %310
516        %310 = OpLabel
517        %317 = OpLoad %v4float %306
518               OpReturnValue %317
519               OpFunctionEnd
520