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