xref: /aosp_15_r20/external/skia/tests/sksl/shared/MatrixEquality.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               OpMemberName %_UniformBuffer 2 "testMatrix2x2"
11               OpMemberName %_UniformBuffer 3 "testMatrix3x3"
12               OpName %_entrypoint_v "_entrypoint_v"
13               OpName %main "main"
14               OpName %_0_ok "_0_ok"
15               OpName %_1_zero "_1_zero"
16               OpName %_2_one "_2_one"
17               OpName %_3_two "_3_two"
18               OpName %_4_nine "_4_nine"
19               OpName %_5_m "_5_m"
20               OpDecorate %sk_FragColor RelaxedPrecision
21               OpDecorate %sk_FragColor Location 0
22               OpDecorate %sk_FragColor Index 0
23               OpMemberDecorate %_UniformBuffer 0 Offset 0
24               OpMemberDecorate %_UniformBuffer 0 RelaxedPrecision
25               OpMemberDecorate %_UniformBuffer 1 Offset 16
26               OpMemberDecorate %_UniformBuffer 1 RelaxedPrecision
27               OpMemberDecorate %_UniformBuffer 2 Offset 32
28               OpMemberDecorate %_UniformBuffer 2 ColMajor
29               OpMemberDecorate %_UniformBuffer 2 MatrixStride 16
30               OpMemberDecorate %_UniformBuffer 2 RelaxedPrecision
31               OpMemberDecorate %_UniformBuffer 3 Offset 64
32               OpMemberDecorate %_UniformBuffer 3 ColMajor
33               OpMemberDecorate %_UniformBuffer 3 MatrixStride 16
34               OpMemberDecorate %_UniformBuffer 3 RelaxedPrecision
35               OpDecorate %_UniformBuffer Block
36               OpDecorate %7 Binding 0
37               OpDecorate %7 DescriptorSet 0
38               OpDecorate %37 RelaxedPrecision
39               OpDecorate %46 RelaxedPrecision
40               OpDecorate %47 RelaxedPrecision
41               OpDecorate %49 RelaxedPrecision
42               OpDecorate %50 RelaxedPrecision
43               OpDecorate %59 RelaxedPrecision
44               OpDecorate %70 RelaxedPrecision
45               OpDecorate %71 RelaxedPrecision
46               OpDecorate %73 RelaxedPrecision
47               OpDecorate %74 RelaxedPrecision
48               OpDecorate %77 RelaxedPrecision
49               OpDecorate %78 RelaxedPrecision
50               OpDecorate %85 RelaxedPrecision
51               OpDecorate %90 RelaxedPrecision
52               OpDecorate %91 RelaxedPrecision
53               OpDecorate %93 RelaxedPrecision
54               OpDecorate %94 RelaxedPrecision
55               OpDecorate %101 RelaxedPrecision
56               OpDecorate %106 RelaxedPrecision
57               OpDecorate %107 RelaxedPrecision
58               OpDecorate %109 RelaxedPrecision
59               OpDecorate %110 RelaxedPrecision
60               OpDecorate %113 RelaxedPrecision
61               OpDecorate %114 RelaxedPrecision
62               OpDecorate %123 RelaxedPrecision
63               OpDecorate %124 RelaxedPrecision
64               OpDecorate %127 RelaxedPrecision
65               OpDecorate %128 RelaxedPrecision
66               OpDecorate %421 RelaxedPrecision
67               OpDecorate %422 RelaxedPrecision
68               OpDecorate %423 RelaxedPrecision
69               OpDecorate %424 RelaxedPrecision
70               OpDecorate %425 RelaxedPrecision
71               OpDecorate %426 RelaxedPrecision
72               OpDecorate %437 RelaxedPrecision
73               OpDecorate %438 RelaxedPrecision
74               OpDecorate %439 RelaxedPrecision
75               OpDecorate %440 RelaxedPrecision
76               OpDecorate %441 RelaxedPrecision
77               OpDecorate %442 RelaxedPrecision
78               OpDecorate %446 RelaxedPrecision
79               OpDecorate %447 RelaxedPrecision
80               OpDecorate %448 RelaxedPrecision
81               OpDecorate %449 RelaxedPrecision
82               OpDecorate %450 RelaxedPrecision
83               OpDecorate %451 RelaxedPrecision
84               OpDecorate %458 RelaxedPrecision
85               OpDecorate %459 RelaxedPrecision
86               OpDecorate %460 RelaxedPrecision
87               OpDecorate %461 RelaxedPrecision
88               OpDecorate %462 RelaxedPrecision
89               OpDecorate %463 RelaxedPrecision
90               OpDecorate %567 RelaxedPrecision
91               OpDecorate %569 RelaxedPrecision
92               OpDecorate %570 RelaxedPrecision
93      %float = OpTypeFloat 32
94    %v4float = OpTypeVector %float 4
95%_ptr_Output_v4float = OpTypePointer Output %v4float
96%sk_FragColor = OpVariable %_ptr_Output_v4float Output
97    %v2float = OpTypeVector %float 2
98%mat2v2float = OpTypeMatrix %v2float 2
99    %v3float = OpTypeVector %float 3
100%mat3v3float = OpTypeMatrix %v3float 3
101%_UniformBuffer = OpTypeStruct %v4float %v4float %mat2v2float %mat3v3float
102%_ptr_Uniform__UniformBuffer = OpTypePointer Uniform %_UniformBuffer
103          %7 = OpVariable %_ptr_Uniform__UniformBuffer Uniform
104       %void = OpTypeVoid
105         %16 = OpTypeFunction %void
106    %float_0 = OpConstant %float 0
107         %19 = OpConstantComposite %v2float %float_0 %float_0
108%_ptr_Function_v2float = OpTypePointer Function %v2float
109         %23 = OpTypeFunction %v4float %_ptr_Function_v2float
110       %bool = OpTypeBool
111%_ptr_Function_bool = OpTypePointer Function %bool
112       %true = OpConstantTrue %bool
113      %false = OpConstantFalse %bool
114%_ptr_Uniform_mat2v2float = OpTypePointer Uniform %mat2v2float
115        %int = OpTypeInt 32 1
116      %int_2 = OpConstant %int 2
117    %float_1 = OpConstant %float 1
118    %float_2 = OpConstant %float 2
119    %float_3 = OpConstant %float 3
120    %float_4 = OpConstant %float 4
121         %42 = OpConstantComposite %v2float %float_1 %float_2
122         %43 = OpConstantComposite %v2float %float_3 %float_4
123         %44 = OpConstantComposite %mat2v2float %42 %43
124     %v2bool = OpTypeVector %bool 2
125%_ptr_Uniform_mat3v3float = OpTypePointer Uniform %mat3v3float
126      %int_3 = OpConstant %int 3
127    %float_5 = OpConstant %float 5
128    %float_6 = OpConstant %float 6
129    %float_7 = OpConstant %float 7
130    %float_8 = OpConstant %float 8
131    %float_9 = OpConstant %float 9
132         %65 = OpConstantComposite %v3float %float_1 %float_2 %float_3
133         %66 = OpConstantComposite %v3float %float_4 %float_5 %float_6
134         %67 = OpConstantComposite %v3float %float_7 %float_8 %float_9
135         %68 = OpConstantComposite %mat3v3float %65 %66 %67
136     %v3bool = OpTypeVector %bool 3
137  %float_100 = OpConstant %float 100
138         %87 = OpConstantComposite %v2float %float_100 %float_0
139         %88 = OpConstantComposite %v2float %float_0 %float_100
140         %89 = OpConstantComposite %mat2v2float %87 %88
141        %102 = OpConstantComposite %v3float %float_9 %float_8 %float_7
142        %103 = OpConstantComposite %v3float %float_6 %float_5 %float_4
143        %104 = OpConstantComposite %v3float %float_3 %float_2 %float_1
144        %105 = OpConstantComposite %mat3v3float %102 %103 %104
145%_ptr_Function_float = OpTypePointer Function %float
146%_ptr_Uniform_v4float = OpTypePointer Uniform %v4float
147      %int_0 = OpConstant %int 0
148        %138 = OpConstantComposite %v2float %float_1 %float_0
149        %139 = OpConstantComposite %v2float %float_0 %float_1
150        %140 = OpConstantComposite %mat2v2float %138 %139
151        %174 = OpConstantComposite %mat2v2float %19 %19
152   %float_n1 = OpConstant %float -1
153        %188 = OpConstantComposite %v2float %float_n1 %float_0
154        %189 = OpConstantComposite %v2float %float_0 %float_n1
155        %190 = OpConstantComposite %mat2v2float %188 %189
156   %float_n0 = OpConstant %float -0
157        %203 = OpConstantComposite %v2float %float_n0 %float_0
158        %204 = OpConstantComposite %v2float %float_0 %float_n0
159        %205 = OpConstantComposite %mat2v2float %203 %204
160        %291 = OpConstantComposite %v3float %float_1 %float_0 %float_0
161        %292 = OpConstantComposite %v3float %float_0 %float_1 %float_0
162        %293 = OpConstantComposite %v3float %float_0 %float_0 %float_1
163        %294 = OpConstantComposite %mat3v3float %291 %292 %293
164        %310 = OpConstantComposite %v2float %float_9 %float_0
165        %311 = OpConstantComposite %v2float %float_0 %float_9
166        %312 = OpConstantComposite %mat2v2float %310 %311
167        %313 = OpConstantComposite %v3float %float_9 %float_0 %float_0
168        %314 = OpConstantComposite %v3float %float_0 %float_9 %float_0
169        %315 = OpConstantComposite %mat3v3float %313 %314 %293
170        %429 = OpConstantComposite %v4float %float_1 %float_2 %float_3 %float_4
171     %v4bool = OpTypeVector %bool 4
172        %466 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
173%_ptr_Function_mat3v3float = OpTypePointer Function %mat3v3float
174%_ptr_Function_v3float = OpTypePointer Function %v3float
175      %int_1 = OpConstant %int 1
176%_ptr_Function_v4float = OpTypePointer Function %v4float
177%_entrypoint_v = OpFunction %void None %16
178         %17 = OpLabel
179         %20 = OpVariable %_ptr_Function_v2float Function
180               OpStore %20 %19
181         %22 = OpFunctionCall %v4float %main %20
182               OpStore %sk_FragColor %22
183               OpReturn
184               OpFunctionEnd
185       %main = OpFunction %v4float None %23
186         %24 = OpFunctionParameter %_ptr_Function_v2float
187         %25 = OpLabel
188      %_0_ok = OpVariable %_ptr_Function_bool Function
189    %_1_zero = OpVariable %_ptr_Function_float Function
190     %_2_one = OpVariable %_ptr_Function_float Function
191     %_3_two = OpVariable %_ptr_Function_float Function
192    %_4_nine = OpVariable %_ptr_Function_float Function
193       %_5_m = OpVariable %_ptr_Function_mat3v3float Function
194        %561 = OpVariable %_ptr_Function_v4float Function
195               OpStore %_0_ok %true
196               OpSelectionMerge %32 None
197               OpBranchConditional %true %31 %32
198         %31 = OpLabel
199         %33 = OpAccessChain %_ptr_Uniform_mat2v2float %7 %int_2
200         %37 = OpLoad %mat2v2float %33
201         %46 = OpCompositeExtract %v2float %37 0
202         %47 = OpFOrdEqual %v2bool %46 %42
203         %48 = OpAll %bool %47
204         %49 = OpCompositeExtract %v2float %37 1
205         %50 = OpFOrdEqual %v2bool %49 %43
206         %51 = OpAll %bool %50
207         %52 = OpLogicalAnd %bool %48 %51
208               OpBranch %32
209         %32 = OpLabel
210         %53 = OpPhi %bool %false %25 %52 %31
211               OpStore %_0_ok %53
212               OpSelectionMerge %55 None
213               OpBranchConditional %53 %54 %55
214         %54 = OpLabel
215         %56 = OpAccessChain %_ptr_Uniform_mat3v3float %7 %int_3
216         %59 = OpLoad %mat3v3float %56
217         %70 = OpCompositeExtract %v3float %59 0
218         %71 = OpFOrdEqual %v3bool %70 %65
219         %72 = OpAll %bool %71
220         %73 = OpCompositeExtract %v3float %59 1
221         %74 = OpFOrdEqual %v3bool %73 %66
222         %75 = OpAll %bool %74
223         %76 = OpLogicalAnd %bool %72 %75
224         %77 = OpCompositeExtract %v3float %59 2
225         %78 = OpFOrdEqual %v3bool %77 %67
226         %79 = OpAll %bool %78
227         %80 = OpLogicalAnd %bool %76 %79
228               OpBranch %55
229         %55 = OpLabel
230         %81 = OpPhi %bool %false %32 %80 %54
231               OpStore %_0_ok %81
232               OpSelectionMerge %83 None
233               OpBranchConditional %81 %82 %83
234         %82 = OpLabel
235         %84 = OpAccessChain %_ptr_Uniform_mat2v2float %7 %int_2
236         %85 = OpLoad %mat2v2float %84
237         %90 = OpCompositeExtract %v2float %85 0
238         %91 = OpFUnordNotEqual %v2bool %90 %87
239         %92 = OpAny %bool %91
240         %93 = OpCompositeExtract %v2float %85 1
241         %94 = OpFUnordNotEqual %v2bool %93 %88
242         %95 = OpAny %bool %94
243         %96 = OpLogicalOr %bool %92 %95
244               OpBranch %83
245         %83 = OpLabel
246         %97 = OpPhi %bool %false %55 %96 %82
247               OpStore %_0_ok %97
248               OpSelectionMerge %99 None
249               OpBranchConditional %97 %98 %99
250         %98 = OpLabel
251        %100 = OpAccessChain %_ptr_Uniform_mat3v3float %7 %int_3
252        %101 = OpLoad %mat3v3float %100
253        %106 = OpCompositeExtract %v3float %101 0
254        %107 = OpFUnordNotEqual %v3bool %106 %102
255        %108 = OpAny %bool %107
256        %109 = OpCompositeExtract %v3float %101 1
257        %110 = OpFUnordNotEqual %v3bool %109 %103
258        %111 = OpAny %bool %110
259        %112 = OpLogicalOr %bool %108 %111
260        %113 = OpCompositeExtract %v3float %101 2
261        %114 = OpFUnordNotEqual %v3bool %113 %104
262        %115 = OpAny %bool %114
263        %116 = OpLogicalOr %bool %112 %115
264               OpBranch %99
265         %99 = OpLabel
266        %117 = OpPhi %bool %false %83 %116 %98
267               OpStore %_0_ok %117
268        %120 = OpAccessChain %_ptr_Uniform_v4float %7 %int_0
269        %123 = OpLoad %v4float %120
270        %124 = OpCompositeExtract %float %123 0
271               OpStore %_1_zero %124
272        %126 = OpAccessChain %_ptr_Uniform_v4float %7 %int_0
273        %127 = OpLoad %v4float %126
274        %128 = OpCompositeExtract %float %127 1
275               OpStore %_2_one %128
276        %130 = OpFMul %float %float_2 %128
277               OpStore %_3_two %130
278        %132 = OpFMul %float %float_9 %128
279               OpStore %_4_nine %132
280               OpSelectionMerge %134 None
281               OpBranchConditional %117 %133 %134
282        %133 = OpLabel
283        %135 = OpCompositeConstruct %v2float %128 %124
284        %136 = OpCompositeConstruct %v2float %124 %128
285        %137 = OpCompositeConstruct %mat2v2float %135 %136
286        %141 = OpFOrdEqual %v2bool %135 %138
287        %142 = OpAll %bool %141
288        %143 = OpFOrdEqual %v2bool %136 %139
289        %144 = OpAll %bool %143
290        %145 = OpLogicalAnd %bool %142 %144
291               OpBranch %134
292        %134 = OpLabel
293        %146 = OpPhi %bool %false %99 %145 %133
294               OpStore %_0_ok %146
295               OpSelectionMerge %148 None
296               OpBranchConditional %146 %147 %148
297        %147 = OpLabel
298        %149 = OpCompositeConstruct %v2float %128 %128
299        %150 = OpCompositeConstruct %v2float %128 %124
300        %151 = OpCompositeConstruct %mat2v2float %150 %149
301        %152 = OpFUnordNotEqual %v2bool %150 %138
302        %153 = OpAny %bool %152
303        %154 = OpFUnordNotEqual %v2bool %149 %139
304        %155 = OpAny %bool %154
305        %156 = OpLogicalOr %bool %153 %155
306               OpBranch %148
307        %148 = OpLabel
308        %157 = OpPhi %bool %false %134 %156 %147
309               OpStore %_0_ok %157
310               OpSelectionMerge %159 None
311               OpBranchConditional %157 %158 %159
312        %158 = OpLabel
313        %160 = OpCompositeConstruct %v2float %128 %float_0
314        %161 = OpCompositeConstruct %v2float %float_0 %128
315        %162 = OpCompositeConstruct %mat2v2float %160 %161
316        %163 = OpFOrdEqual %v2bool %160 %138
317        %164 = OpAll %bool %163
318        %165 = OpFOrdEqual %v2bool %161 %139
319        %166 = OpAll %bool %165
320        %167 = OpLogicalAnd %bool %164 %166
321               OpBranch %159
322        %159 = OpLabel
323        %168 = OpPhi %bool %false %148 %167 %158
324               OpStore %_0_ok %168
325               OpSelectionMerge %170 None
326               OpBranchConditional %168 %169 %170
327        %169 = OpLabel
328        %171 = OpCompositeConstruct %v2float %128 %float_0
329        %172 = OpCompositeConstruct %v2float %float_0 %128
330        %173 = OpCompositeConstruct %mat2v2float %171 %172
331        %175 = OpFUnordNotEqual %v2bool %171 %19
332        %176 = OpAny %bool %175
333        %177 = OpFUnordNotEqual %v2bool %172 %19
334        %178 = OpAny %bool %177
335        %179 = OpLogicalOr %bool %176 %178
336               OpBranch %170
337        %170 = OpLabel
338        %180 = OpPhi %bool %false %159 %179 %169
339               OpStore %_0_ok %180
340               OpSelectionMerge %182 None
341               OpBranchConditional %180 %181 %182
342        %181 = OpLabel
343        %183 = OpFNegate %float %128
344        %184 = OpCompositeConstruct %v2float %183 %float_0
345        %185 = OpCompositeConstruct %v2float %float_0 %183
346        %186 = OpCompositeConstruct %mat2v2float %184 %185
347        %191 = OpFOrdEqual %v2bool %184 %188
348        %192 = OpAll %bool %191
349        %193 = OpFOrdEqual %v2bool %185 %189
350        %194 = OpAll %bool %193
351        %195 = OpLogicalAnd %bool %192 %194
352               OpBranch %182
353        %182 = OpLabel
354        %196 = OpPhi %bool %false %170 %195 %181
355               OpStore %_0_ok %196
356               OpSelectionMerge %198 None
357               OpBranchConditional %196 %197 %198
358        %197 = OpLabel
359        %199 = OpCompositeConstruct %v2float %124 %float_0
360        %200 = OpCompositeConstruct %v2float %float_0 %124
361        %201 = OpCompositeConstruct %mat2v2float %199 %200
362        %206 = OpFOrdEqual %v2bool %199 %203
363        %207 = OpAll %bool %206
364        %208 = OpFOrdEqual %v2bool %200 %204
365        %209 = OpAll %bool %208
366        %210 = OpLogicalAnd %bool %207 %209
367               OpBranch %198
368        %198 = OpLabel
369        %211 = OpPhi %bool %false %182 %210 %197
370               OpStore %_0_ok %211
371               OpSelectionMerge %213 None
372               OpBranchConditional %211 %212 %213
373        %212 = OpLabel
374        %214 = OpFNegate %float %128
375        %215 = OpCompositeConstruct %v2float %214 %float_0
376        %216 = OpCompositeConstruct %v2float %float_0 %214
377        %217 = OpCompositeConstruct %mat2v2float %215 %216
378        %218 = OpFNegate %v2float %215
379        %219 = OpFNegate %v2float %216
380        %220 = OpCompositeConstruct %mat2v2float %218 %219
381        %221 = OpFOrdEqual %v2bool %218 %138
382        %222 = OpAll %bool %221
383        %223 = OpFOrdEqual %v2bool %219 %139
384        %224 = OpAll %bool %223
385        %225 = OpLogicalAnd %bool %222 %224
386               OpBranch %213
387        %213 = OpLabel
388        %226 = OpPhi %bool %false %198 %225 %212
389               OpStore %_0_ok %226
390               OpSelectionMerge %228 None
391               OpBranchConditional %226 %227 %228
392        %227 = OpLabel
393        %229 = OpCompositeConstruct %v2float %124 %float_0
394        %230 = OpCompositeConstruct %v2float %float_0 %124
395        %231 = OpCompositeConstruct %mat2v2float %229 %230
396        %232 = OpFNegate %v2float %229
397        %233 = OpFNegate %v2float %230
398        %234 = OpCompositeConstruct %mat2v2float %232 %233
399        %235 = OpFOrdEqual %v2bool %232 %203
400        %236 = OpAll %bool %235
401        %237 = OpFOrdEqual %v2bool %233 %204
402        %238 = OpAll %bool %237
403        %239 = OpLogicalAnd %bool %236 %238
404               OpBranch %228
405        %228 = OpLabel
406        %240 = OpPhi %bool %false %213 %239 %227
407               OpStore %_0_ok %240
408               OpSelectionMerge %242 None
409               OpBranchConditional %240 %241 %242
410        %241 = OpLabel
411        %243 = OpCompositeConstruct %v2float %128 %float_0
412        %244 = OpCompositeConstruct %v2float %float_0 %128
413        %245 = OpCompositeConstruct %mat2v2float %243 %244
414        %246 = OpFOrdEqual %v2bool %243 %138
415        %247 = OpAll %bool %246
416        %248 = OpFOrdEqual %v2bool %244 %139
417        %249 = OpAll %bool %248
418        %250 = OpLogicalAnd %bool %247 %249
419               OpBranch %242
420        %242 = OpLabel
421        %251 = OpPhi %bool %false %228 %250 %241
422               OpStore %_0_ok %251
423               OpSelectionMerge %253 None
424               OpBranchConditional %251 %252 %253
425        %252 = OpLabel
426        %254 = OpCompositeConstruct %v2float %130 %float_0
427        %255 = OpCompositeConstruct %v2float %float_0 %130
428        %256 = OpCompositeConstruct %mat2v2float %254 %255
429        %257 = OpFUnordNotEqual %v2bool %254 %138
430        %258 = OpAny %bool %257
431        %259 = OpFUnordNotEqual %v2bool %255 %139
432        %260 = OpAny %bool %259
433        %261 = OpLogicalOr %bool %258 %260
434               OpBranch %253
435        %253 = OpLabel
436        %262 = OpPhi %bool %false %242 %261 %252
437               OpStore %_0_ok %262
438               OpSelectionMerge %264 None
439               OpBranchConditional %262 %263 %264
440        %263 = OpLabel
441        %265 = OpCompositeConstruct %v2float %128 %float_0
442        %266 = OpCompositeConstruct %v2float %float_0 %128
443        %267 = OpCompositeConstruct %mat2v2float %265 %266
444        %268 = OpFOrdEqual %v2bool %265 %138
445        %269 = OpAll %bool %268
446        %270 = OpFOrdEqual %v2bool %266 %139
447        %271 = OpAll %bool %270
448        %272 = OpLogicalAnd %bool %269 %271
449               OpBranch %264
450        %264 = OpLabel
451        %273 = OpPhi %bool %false %253 %272 %263
452               OpStore %_0_ok %273
453               OpSelectionMerge %275 None
454               OpBranchConditional %273 %274 %275
455        %274 = OpLabel
456        %276 = OpCompositeConstruct %v2float %128 %float_0
457        %277 = OpCompositeConstruct %v2float %float_0 %128
458        %278 = OpCompositeConstruct %mat2v2float %276 %277
459        %279 = OpFUnordNotEqual %v2bool %276 %19
460        %280 = OpAny %bool %279
461        %281 = OpFUnordNotEqual %v2bool %277 %19
462        %282 = OpAny %bool %281
463        %283 = OpLogicalOr %bool %280 %282
464               OpBranch %275
465        %275 = OpLabel
466        %284 = OpPhi %bool %false %264 %283 %274
467               OpStore %_0_ok %284
468               OpSelectionMerge %286 None
469               OpBranchConditional %284 %285 %286
470        %285 = OpLabel
471        %287 = OpCompositeConstruct %v3float %128 %124 %124
472        %288 = OpCompositeConstruct %v3float %124 %128 %124
473        %289 = OpCompositeConstruct %v3float %124 %124 %128
474        %290 = OpCompositeConstruct %mat3v3float %287 %288 %289
475        %295 = OpFOrdEqual %v3bool %287 %291
476        %296 = OpAll %bool %295
477        %297 = OpFOrdEqual %v3bool %288 %292
478        %298 = OpAll %bool %297
479        %299 = OpLogicalAnd %bool %296 %298
480        %300 = OpFOrdEqual %v3bool %289 %293
481        %301 = OpAll %bool %300
482        %302 = OpLogicalAnd %bool %299 %301
483               OpBranch %286
484        %286 = OpLabel
485        %303 = OpPhi %bool %false %275 %302 %285
486               OpStore %_0_ok %303
487               OpSelectionMerge %305 None
488               OpBranchConditional %303 %304 %305
489        %304 = OpLabel
490        %306 = OpCompositeConstruct %v3float %132 %124 %124
491        %307 = OpCompositeConstruct %v3float %124 %132 %124
492        %308 = OpCompositeConstruct %v3float %124 %124 %128
493        %309 = OpCompositeConstruct %mat3v3float %306 %307 %308
494        %316 = OpFOrdEqual %v3bool %306 %313
495        %317 = OpAll %bool %316
496        %318 = OpFOrdEqual %v3bool %307 %314
497        %319 = OpAll %bool %318
498        %320 = OpLogicalAnd %bool %317 %319
499        %321 = OpFOrdEqual %v3bool %308 %293
500        %322 = OpAll %bool %321
501        %323 = OpLogicalAnd %bool %320 %322
502               OpBranch %305
503        %305 = OpLabel
504        %324 = OpPhi %bool %false %286 %323 %304
505               OpStore %_0_ok %324
506               OpSelectionMerge %326 None
507               OpBranchConditional %324 %325 %326
508        %325 = OpLabel
509        %327 = OpCompositeConstruct %v3float %128 %float_0 %float_0
510        %328 = OpCompositeConstruct %v3float %float_0 %128 %float_0
511        %329 = OpCompositeConstruct %v3float %float_0 %float_0 %128
512        %330 = OpCompositeConstruct %mat3v3float %327 %328 %329
513        %331 = OpFOrdEqual %v3bool %327 %291
514        %332 = OpAll %bool %331
515        %333 = OpFOrdEqual %v3bool %328 %292
516        %334 = OpAll %bool %333
517        %335 = OpLogicalAnd %bool %332 %334
518        %336 = OpFOrdEqual %v3bool %329 %293
519        %337 = OpAll %bool %336
520        %338 = OpLogicalAnd %bool %335 %337
521               OpBranch %326
522        %326 = OpLabel
523        %339 = OpPhi %bool %false %305 %338 %325
524               OpStore %_0_ok %339
525               OpSelectionMerge %341 None
526               OpBranchConditional %339 %340 %341
527        %340 = OpLabel
528        %342 = OpCompositeConstruct %v3float %132 %float_0 %float_0
529        %343 = OpCompositeConstruct %v3float %float_0 %132 %float_0
530        %344 = OpCompositeConstruct %v3float %float_0 %float_0 %128
531        %345 = OpCompositeConstruct %mat3v3float %342 %343 %344
532        %346 = OpFOrdEqual %v3bool %342 %313
533        %347 = OpAll %bool %346
534        %348 = OpFOrdEqual %v3bool %343 %314
535        %349 = OpAll %bool %348
536        %350 = OpLogicalAnd %bool %347 %349
537        %351 = OpFOrdEqual %v3bool %344 %293
538        %352 = OpAll %bool %351
539        %353 = OpLogicalAnd %bool %350 %352
540               OpBranch %341
541        %341 = OpLabel
542        %354 = OpPhi %bool %false %326 %353 %340
543               OpStore %_0_ok %354
544               OpSelectionMerge %356 None
545               OpBranchConditional %354 %355 %356
546        %355 = OpLabel
547        %357 = OpCompositeConstruct %v3float %128 %float_0 %float_0
548        %358 = OpCompositeConstruct %v3float %float_0 %128 %float_0
549        %359 = OpCompositeConstruct %v3float %float_0 %float_0 %128
550        %360 = OpCompositeConstruct %mat3v3float %357 %358 %359
551        %361 = OpVectorShuffle %v2float %357 %357 0 1
552        %362 = OpVectorShuffle %v2float %358 %358 0 1
553        %363 = OpCompositeConstruct %mat2v2float %361 %362
554        %364 = OpFOrdEqual %v2bool %361 %138
555        %365 = OpAll %bool %364
556        %366 = OpFOrdEqual %v2bool %362 %139
557        %367 = OpAll %bool %366
558        %368 = OpLogicalAnd %bool %365 %367
559               OpBranch %356
560        %356 = OpLabel
561        %369 = OpPhi %bool %false %341 %368 %355
562               OpStore %_0_ok %369
563               OpSelectionMerge %371 None
564               OpBranchConditional %369 %370 %371
565        %370 = OpLabel
566        %372 = OpCompositeConstruct %v3float %128 %float_0 %float_0
567        %373 = OpCompositeConstruct %v3float %float_0 %128 %float_0
568        %374 = OpCompositeConstruct %v3float %float_0 %float_0 %128
569        %375 = OpCompositeConstruct %mat3v3float %372 %373 %374
570        %376 = OpVectorShuffle %v2float %372 %372 0 1
571        %377 = OpVectorShuffle %v2float %373 %373 0 1
572        %378 = OpCompositeConstruct %mat2v2float %376 %377
573        %379 = OpFOrdEqual %v2bool %376 %138
574        %380 = OpAll %bool %379
575        %381 = OpFOrdEqual %v2bool %377 %139
576        %382 = OpAll %bool %381
577        %383 = OpLogicalAnd %bool %380 %382
578               OpBranch %371
579        %371 = OpLabel
580        %384 = OpPhi %bool %false %356 %383 %370
581               OpStore %_0_ok %384
582               OpSelectionMerge %386 None
583               OpBranchConditional %384 %385 %386
584        %385 = OpLabel
585        %387 = OpCompositeConstruct %v2float %128 %124
586        %388 = OpCompositeConstruct %v2float %124 %128
587        %389 = OpCompositeConstruct %mat2v2float %387 %388
588        %390 = OpFOrdEqual %v2bool %387 %138
589        %391 = OpAll %bool %390
590        %392 = OpFOrdEqual %v2bool %388 %139
591        %393 = OpAll %bool %392
592        %394 = OpLogicalAnd %bool %391 %393
593               OpBranch %386
594        %386 = OpLabel
595        %395 = OpPhi %bool %false %371 %394 %385
596               OpStore %_0_ok %395
597               OpSelectionMerge %397 None
598               OpBranchConditional %395 %396 %397
599        %396 = OpLabel
600        %398 = OpCompositeConstruct %v2float %128 %124
601        %399 = OpCompositeConstruct %v2float %124 %128
602        %400 = OpCompositeConstruct %mat2v2float %398 %399
603        %401 = OpFOrdEqual %v2bool %398 %138
604        %402 = OpAll %bool %401
605        %403 = OpFOrdEqual %v2bool %399 %139
606        %404 = OpAll %bool %403
607        %405 = OpLogicalAnd %bool %402 %404
608               OpBranch %397
609        %397 = OpLabel
610        %406 = OpPhi %bool %false %386 %405 %396
611               OpStore %_0_ok %406
612               OpSelectionMerge %408 None
613               OpBranchConditional %406 %407 %408
614        %407 = OpLabel
615        %409 = OpCompositeConstruct %v2float %128 %124
616        %410 = OpCompositeConstruct %v2float %124 %128
617        %411 = OpCompositeConstruct %mat2v2float %409 %410
618        %412 = OpFOrdEqual %v2bool %409 %138
619        %413 = OpAll %bool %412
620        %414 = OpFOrdEqual %v2bool %410 %139
621        %415 = OpAll %bool %414
622        %416 = OpLogicalAnd %bool %413 %415
623               OpBranch %408
624        %408 = OpLabel
625        %417 = OpPhi %bool %false %397 %416 %407
626               OpStore %_0_ok %417
627               OpSelectionMerge %419 None
628               OpBranchConditional %417 %418 %419
629        %418 = OpLabel
630        %420 = OpAccessChain %_ptr_Uniform_mat2v2float %7 %int_2
631        %421 = OpLoad %mat2v2float %420
632        %422 = OpCompositeExtract %float %421 0 0
633        %423 = OpCompositeExtract %float %421 0 1
634        %424 = OpCompositeExtract %float %421 1 0
635        %425 = OpCompositeExtract %float %421 1 1
636        %426 = OpCompositeConstruct %v4float %422 %423 %424 %425
637        %427 = OpCompositeConstruct %v4float %128 %128 %128 %128
638        %428 = OpFMul %v4float %426 %427
639        %430 = OpFOrdEqual %v4bool %428 %429
640        %432 = OpAll %bool %430
641               OpBranch %419
642        %419 = OpLabel
643        %433 = OpPhi %bool %false %408 %432 %418
644               OpStore %_0_ok %433
645               OpSelectionMerge %435 None
646               OpBranchConditional %433 %434 %435
647        %434 = OpLabel
648        %436 = OpAccessChain %_ptr_Uniform_mat2v2float %7 %int_2
649        %437 = OpLoad %mat2v2float %436
650        %438 = OpCompositeExtract %float %437 0 0
651        %439 = OpCompositeExtract %float %437 0 1
652        %440 = OpCompositeExtract %float %437 1 0
653        %441 = OpCompositeExtract %float %437 1 1
654        %442 = OpCompositeConstruct %v4float %438 %439 %440 %441
655        %443 = OpCompositeConstruct %v4float %128 %128 %128 %128
656        %444 = OpFMul %v4float %442 %443
657        %445 = OpAccessChain %_ptr_Uniform_mat2v2float %7 %int_2
658        %446 = OpLoad %mat2v2float %445
659        %447 = OpCompositeExtract %float %446 0 0
660        %448 = OpCompositeExtract %float %446 0 1
661        %449 = OpCompositeExtract %float %446 1 0
662        %450 = OpCompositeExtract %float %446 1 1
663        %451 = OpCompositeConstruct %v4float %447 %448 %449 %450
664        %452 = OpFOrdEqual %v4bool %444 %451
665        %453 = OpAll %bool %452
666               OpBranch %435
667        %435 = OpLabel
668        %454 = OpPhi %bool %false %419 %453 %434
669               OpStore %_0_ok %454
670               OpSelectionMerge %456 None
671               OpBranchConditional %454 %455 %456
672        %455 = OpLabel
673        %457 = OpAccessChain %_ptr_Uniform_mat2v2float %7 %int_2
674        %458 = OpLoad %mat2v2float %457
675        %459 = OpCompositeExtract %float %458 0 0
676        %460 = OpCompositeExtract %float %458 0 1
677        %461 = OpCompositeExtract %float %458 1 0
678        %462 = OpCompositeExtract %float %458 1 1
679        %463 = OpCompositeConstruct %v4float %459 %460 %461 %462
680        %464 = OpCompositeConstruct %v4float %124 %124 %124 %124
681        %465 = OpFMul %v4float %463 %464
682        %467 = OpFOrdEqual %v4bool %465 %466
683        %468 = OpAll %bool %467
684               OpBranch %456
685        %456 = OpLabel
686        %469 = OpPhi %bool %false %435 %468 %455
687               OpStore %_0_ok %469
688        %472 = OpCompositeConstruct %v3float %128 %130 %float_3
689        %473 = OpCompositeConstruct %v3float %float_7 %float_8 %132
690        %474 = OpCompositeConstruct %mat3v3float %472 %66 %473
691               OpStore %_5_m %474
692               OpSelectionMerge %476 None
693               OpBranchConditional %469 %475 %476
694        %475 = OpLabel
695        %477 = OpAccessChain %_ptr_Function_v3float %_5_m %int_0
696        %479 = OpLoad %v3float %477
697        %480 = OpFOrdEqual %v3bool %479 %65
698        %481 = OpAll %bool %480
699               OpBranch %476
700        %476 = OpLabel
701        %482 = OpPhi %bool %false %456 %481 %475
702               OpStore %_0_ok %482
703               OpSelectionMerge %484 None
704               OpBranchConditional %482 %483 %484
705        %483 = OpLabel
706        %486 = OpAccessChain %_ptr_Function_v3float %_5_m %int_1
707        %487 = OpLoad %v3float %486
708        %488 = OpFOrdEqual %v3bool %487 %66
709        %489 = OpAll %bool %488
710               OpBranch %484
711        %484 = OpLabel
712        %490 = OpPhi %bool %false %476 %489 %483
713               OpStore %_0_ok %490
714               OpSelectionMerge %492 None
715               OpBranchConditional %490 %491 %492
716        %491 = OpLabel
717        %493 = OpAccessChain %_ptr_Function_v3float %_5_m %int_2
718        %494 = OpLoad %v3float %493
719        %495 = OpFOrdEqual %v3bool %494 %67
720        %496 = OpAll %bool %495
721               OpBranch %492
722        %492 = OpLabel
723        %497 = OpPhi %bool %false %484 %496 %491
724               OpStore %_0_ok %497
725               OpSelectionMerge %499 None
726               OpBranchConditional %497 %498 %499
727        %498 = OpLabel
728        %500 = OpAccessChain %_ptr_Function_v3float %_5_m %int_0
729        %501 = OpLoad %v3float %500
730        %502 = OpCompositeExtract %float %501 0
731        %503 = OpFOrdEqual %bool %502 %float_1
732               OpBranch %499
733        %499 = OpLabel
734        %504 = OpPhi %bool %false %492 %503 %498
735               OpStore %_0_ok %504
736               OpSelectionMerge %506 None
737               OpBranchConditional %504 %505 %506
738        %505 = OpLabel
739        %507 = OpAccessChain %_ptr_Function_v3float %_5_m %int_0
740        %508 = OpLoad %v3float %507
741        %509 = OpCompositeExtract %float %508 1
742        %510 = OpFOrdEqual %bool %509 %float_2
743               OpBranch %506
744        %506 = OpLabel
745        %511 = OpPhi %bool %false %499 %510 %505
746               OpStore %_0_ok %511
747               OpSelectionMerge %513 None
748               OpBranchConditional %511 %512 %513
749        %512 = OpLabel
750        %514 = OpAccessChain %_ptr_Function_v3float %_5_m %int_0
751        %515 = OpLoad %v3float %514
752        %516 = OpCompositeExtract %float %515 2
753        %517 = OpFOrdEqual %bool %516 %float_3
754               OpBranch %513
755        %513 = OpLabel
756        %518 = OpPhi %bool %false %506 %517 %512
757               OpStore %_0_ok %518
758               OpSelectionMerge %520 None
759               OpBranchConditional %518 %519 %520
760        %519 = OpLabel
761        %521 = OpAccessChain %_ptr_Function_v3float %_5_m %int_1
762        %522 = OpLoad %v3float %521
763        %523 = OpCompositeExtract %float %522 0
764        %524 = OpFOrdEqual %bool %523 %float_4
765               OpBranch %520
766        %520 = OpLabel
767        %525 = OpPhi %bool %false %513 %524 %519
768               OpStore %_0_ok %525
769               OpSelectionMerge %527 None
770               OpBranchConditional %525 %526 %527
771        %526 = OpLabel
772        %528 = OpAccessChain %_ptr_Function_v3float %_5_m %int_1
773        %529 = OpLoad %v3float %528
774        %530 = OpCompositeExtract %float %529 1
775        %531 = OpFOrdEqual %bool %530 %float_5
776               OpBranch %527
777        %527 = OpLabel
778        %532 = OpPhi %bool %false %520 %531 %526
779               OpStore %_0_ok %532
780               OpSelectionMerge %534 None
781               OpBranchConditional %532 %533 %534
782        %533 = OpLabel
783        %535 = OpAccessChain %_ptr_Function_v3float %_5_m %int_1
784        %536 = OpLoad %v3float %535
785        %537 = OpCompositeExtract %float %536 2
786        %538 = OpFOrdEqual %bool %537 %float_6
787               OpBranch %534
788        %534 = OpLabel
789        %539 = OpPhi %bool %false %527 %538 %533
790               OpStore %_0_ok %539
791               OpSelectionMerge %541 None
792               OpBranchConditional %539 %540 %541
793        %540 = OpLabel
794        %542 = OpAccessChain %_ptr_Function_v3float %_5_m %int_2
795        %543 = OpLoad %v3float %542
796        %544 = OpCompositeExtract %float %543 0
797        %545 = OpFOrdEqual %bool %544 %float_7
798               OpBranch %541
799        %541 = OpLabel
800        %546 = OpPhi %bool %false %534 %545 %540
801               OpStore %_0_ok %546
802               OpSelectionMerge %548 None
803               OpBranchConditional %546 %547 %548
804        %547 = OpLabel
805        %549 = OpAccessChain %_ptr_Function_v3float %_5_m %int_2
806        %550 = OpLoad %v3float %549
807        %551 = OpCompositeExtract %float %550 1
808        %552 = OpFOrdEqual %bool %551 %float_8
809               OpBranch %548
810        %548 = OpLabel
811        %553 = OpPhi %bool %false %541 %552 %547
812               OpStore %_0_ok %553
813               OpSelectionMerge %555 None
814               OpBranchConditional %553 %554 %555
815        %554 = OpLabel
816        %556 = OpAccessChain %_ptr_Function_v3float %_5_m %int_2
817        %557 = OpLoad %v3float %556
818        %558 = OpCompositeExtract %float %557 2
819        %559 = OpFOrdEqual %bool %558 %float_9
820               OpBranch %555
821        %555 = OpLabel
822        %560 = OpPhi %bool %false %548 %559 %554
823               OpStore %_0_ok %560
824               OpSelectionMerge %565 None
825               OpBranchConditional %560 %563 %564
826        %563 = OpLabel
827        %566 = OpAccessChain %_ptr_Uniform_v4float %7 %int_0
828        %567 = OpLoad %v4float %566
829               OpStore %561 %567
830               OpBranch %565
831        %564 = OpLabel
832        %568 = OpAccessChain %_ptr_Uniform_v4float %7 %int_1
833        %569 = OpLoad %v4float %568
834               OpStore %561 %569
835               OpBranch %565
836        %565 = OpLabel
837        %570 = OpLoad %v4float %561
838               OpReturnValue %570
839               OpFunctionEnd
840