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