skia2/tests/sksl/shared/MatricesNonsquare.asm.frag
John Stiles 21fe518fbb Revert "Disallow matrix ctors which overflow a column."
This reverts commit eb68973c2f.

Reason for revert: ES2 conformance test checks this

Original change's description:
> Disallow matrix ctors which overflow a column.
>
> The GLSL spec allows matrix constructors containing vectors that would
> split between multiple columns of the matrix. However, in practice, this
> does not actually work well on a lot of GPUs!
>
> - "cast not allowed", "internal error":
> 	Tegra 3
> 	Quadro P400
> 	GTX 660
> 	GTX 960
> - Compiles, but generates wrong result:
> 	RadeonR9M470X
> 	RadeonHD7770
>
> Since this isn't a pattern we expect to see in user code, we now report
> it as an error at compile time. mat2(vec4) is treated as an exceptional
> case and still allowed.
>
> Change-Id: Id6925984a2d1ec948aec4defcc790a197a96cf86
> Bug: skia:12443
> Reviewed-on: https://skia-review.googlesource.com/c/skia/+/449518
> Commit-Queue: John Stiles <johnstiles@google.com>
> Auto-Submit: John Stiles <johnstiles@google.com>
> Reviewed-by: Ethan Nicholas <ethannicholas@google.com>

Bug: skia:12443
Change-Id: I5a32744c88b9b830ad657488824c8c7dd0b0a652
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/458056
Commit-Queue: John Stiles <johnstiles@google.com>
Reviewed-by: Leon Scroggins <scroggo@google.com>
2021-10-14 01:30:08 +00:00

1017 lines
36 KiB
JavaScript

OpCapability Shader
%1 = OpExtInstImport "GLSL.std.450"
OpMemoryModel Logical GLSL450
OpEntryPoint Fragment %_entrypoint_v "_entrypoint" %sk_FragColor %sk_Clockwise
OpExecutionMode %_entrypoint_v OriginUpperLeft
OpName %sk_FragColor "sk_FragColor"
OpName %sk_Clockwise "sk_Clockwise"
OpName %_UniformBuffer "_UniformBuffer"
OpMemberName %_UniformBuffer 0 "colorGreen"
OpMemberName %_UniformBuffer 1 "colorRed"
OpName %_entrypoint_v "_entrypoint_v"
OpName %test_half_b "test_half_b"
OpName %ok "ok"
OpName %m23 "m23"
OpName %m24 "m24"
OpName %m32 "m32"
OpName %m34 "m34"
OpName %m42 "m42"
OpName %m43 "m43"
OpName %m22 "m22"
OpName %m33 "m33"
OpName %main "main"
OpName %_0_ok "_0_ok"
OpName %_1_m23 "_1_m23"
OpName %_2_m24 "_2_m24"
OpName %_3_m32 "_3_m32"
OpName %_4_m34 "_4_m34"
OpName %_5_m42 "_5_m42"
OpName %_6_m43 "_6_m43"
OpName %_7_m22 "_7_m22"
OpName %_8_m33 "_8_m33"
OpDecorate %sk_FragColor RelaxedPrecision
OpDecorate %sk_FragColor Location 0
OpDecorate %sk_FragColor Index 0
OpDecorate %sk_Clockwise BuiltIn FrontFacing
OpMemberDecorate %_UniformBuffer 0 Offset 0
OpMemberDecorate %_UniformBuffer 0 RelaxedPrecision
OpMemberDecorate %_UniformBuffer 1 Offset 16
OpMemberDecorate %_UniformBuffer 1 RelaxedPrecision
OpDecorate %_UniformBuffer Block
OpDecorate %11 Binding 0
OpDecorate %11 DescriptorSet 0
OpDecorate %m23 RelaxedPrecision
OpDecorate %34 RelaxedPrecision
OpDecorate %35 RelaxedPrecision
OpDecorate %36 RelaxedPrecision
OpDecorate %38 RelaxedPrecision
OpDecorate %41 RelaxedPrecision
OpDecorate %42 RelaxedPrecision
OpDecorate %43 RelaxedPrecision
OpDecorate %44 RelaxedPrecision
OpDecorate %m24 RelaxedPrecision
OpDecorate %60 RelaxedPrecision
OpDecorate %61 RelaxedPrecision
OpDecorate %62 RelaxedPrecision
OpDecorate %63 RelaxedPrecision
OpDecorate %66 RelaxedPrecision
OpDecorate %67 RelaxedPrecision
OpDecorate %68 RelaxedPrecision
OpDecorate %69 RelaxedPrecision
OpDecorate %m32 RelaxedPrecision
OpDecorate %85 RelaxedPrecision
OpDecorate %86 RelaxedPrecision
OpDecorate %87 RelaxedPrecision
OpDecorate %88 RelaxedPrecision
OpDecorate %89 RelaxedPrecision
OpDecorate %92 RelaxedPrecision
OpDecorate %93 RelaxedPrecision
OpDecorate %94 RelaxedPrecision
OpDecorate %95 RelaxedPrecision
OpDecorate %96 RelaxedPrecision
OpDecorate %m34 RelaxedPrecision
OpDecorate %117 RelaxedPrecision
OpDecorate %118 RelaxedPrecision
OpDecorate %119 RelaxedPrecision
OpDecorate %120 RelaxedPrecision
OpDecorate %121 RelaxedPrecision
OpDecorate %124 RelaxedPrecision
OpDecorate %125 RelaxedPrecision
OpDecorate %126 RelaxedPrecision
OpDecorate %127 RelaxedPrecision
OpDecorate %128 RelaxedPrecision
OpDecorate %m42 RelaxedPrecision
OpDecorate %148 RelaxedPrecision
OpDecorate %149 RelaxedPrecision
OpDecorate %150 RelaxedPrecision
OpDecorate %151 RelaxedPrecision
OpDecorate %152 RelaxedPrecision
OpDecorate %153 RelaxedPrecision
OpDecorate %156 RelaxedPrecision
OpDecorate %157 RelaxedPrecision
OpDecorate %158 RelaxedPrecision
OpDecorate %159 RelaxedPrecision
OpDecorate %160 RelaxedPrecision
OpDecorate %161 RelaxedPrecision
OpDecorate %m43 RelaxedPrecision
OpDecorate %186 RelaxedPrecision
OpDecorate %187 RelaxedPrecision
OpDecorate %188 RelaxedPrecision
OpDecorate %189 RelaxedPrecision
OpDecorate %190 RelaxedPrecision
OpDecorate %191 RelaxedPrecision
OpDecorate %194 RelaxedPrecision
OpDecorate %195 RelaxedPrecision
OpDecorate %196 RelaxedPrecision
OpDecorate %197 RelaxedPrecision
OpDecorate %198 RelaxedPrecision
OpDecorate %199 RelaxedPrecision
OpDecorate %m22 RelaxedPrecision
OpDecorate %223 RelaxedPrecision
OpDecorate %224 RelaxedPrecision
OpDecorate %225 RelaxedPrecision
OpDecorate %226 RelaxedPrecision
OpDecorate %229 RelaxedPrecision
OpDecorate %231 RelaxedPrecision
OpDecorate %232 RelaxedPrecision
OpDecorate %233 RelaxedPrecision
OpDecorate %m33 RelaxedPrecision
OpDecorate %247 RelaxedPrecision
OpDecorate %248 RelaxedPrecision
OpDecorate %249 RelaxedPrecision
OpDecorate %250 RelaxedPrecision
OpDecorate %253 RelaxedPrecision
OpDecorate %255 RelaxedPrecision
OpDecorate %256 RelaxedPrecision
OpDecorate %257 RelaxedPrecision
OpDecorate %258 RelaxedPrecision
OpDecorate %274 RelaxedPrecision
OpDecorate %276 RelaxedPrecision
OpDecorate %277 RelaxedPrecision
OpDecorate %278 RelaxedPrecision
OpDecorate %279 RelaxedPrecision
OpDecorate %280 RelaxedPrecision
OpDecorate %281 RelaxedPrecision
OpDecorate %282 RelaxedPrecision
OpDecorate %283 RelaxedPrecision
OpDecorate %284 RelaxedPrecision
OpDecorate %285 RelaxedPrecision
OpDecorate %288 RelaxedPrecision
OpDecorate %289 RelaxedPrecision
OpDecorate %290 RelaxedPrecision
OpDecorate %291 RelaxedPrecision
OpDecorate %302 RelaxedPrecision
OpDecorate %303 RelaxedPrecision
OpDecorate %304 RelaxedPrecision
OpDecorate %305 RelaxedPrecision
OpDecorate %306 RelaxedPrecision
OpDecorate %307 RelaxedPrecision
OpDecorate %308 RelaxedPrecision
OpDecorate %309 RelaxedPrecision
OpDecorate %310 RelaxedPrecision
OpDecorate %311 RelaxedPrecision
OpDecorate %312 RelaxedPrecision
OpDecorate %313 RelaxedPrecision
OpDecorate %314 RelaxedPrecision
OpDecorate %315 RelaxedPrecision
OpDecorate %318 RelaxedPrecision
OpDecorate %320 RelaxedPrecision
OpDecorate %321 RelaxedPrecision
OpDecorate %322 RelaxedPrecision
OpDecorate %323 RelaxedPrecision
OpDecorate %339 RelaxedPrecision
OpDecorate %340 RelaxedPrecision
OpDecorate %341 RelaxedPrecision
OpDecorate %342 RelaxedPrecision
OpDecorate %343 RelaxedPrecision
OpDecorate %344 RelaxedPrecision
OpDecorate %345 RelaxedPrecision
OpDecorate %346 RelaxedPrecision
OpDecorate %347 RelaxedPrecision
OpDecorate %348 RelaxedPrecision
OpDecorate %349 RelaxedPrecision
OpDecorate %352 RelaxedPrecision
OpDecorate %354 RelaxedPrecision
OpDecorate %355 RelaxedPrecision
OpDecorate %356 RelaxedPrecision
OpDecorate %367 RelaxedPrecision
OpDecorate %376 RelaxedPrecision
OpDecorate %397 RelaxedPrecision
OpDecorate %419 RelaxedPrecision
OpDecorate %447 RelaxedPrecision
OpDecorate %476 RelaxedPrecision
OpDecorate %511 RelaxedPrecision
OpDecorate %544 RelaxedPrecision
OpDecorate %565 RelaxedPrecision
OpDecorate %598 RelaxedPrecision
OpDecorate %628 RelaxedPrecision
OpDecorate %661 RelaxedPrecision
OpDecorate %678 RelaxedPrecision
OpDecorate %692 RelaxedPrecision
OpDecorate %695 RelaxedPrecision
OpDecorate %696 RelaxedPrecision
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%sk_FragColor = OpVariable %_ptr_Output_v4float Output
%bool = OpTypeBool
%_ptr_Input_bool = OpTypePointer Input %bool
%sk_Clockwise = OpVariable %_ptr_Input_bool Input
%_UniformBuffer = OpTypeStruct %v4float %v4float
%_ptr_Uniform__UniformBuffer = OpTypePointer Uniform %_UniformBuffer
%11 = OpVariable %_ptr_Uniform__UniformBuffer Uniform
%void = OpTypeVoid
%16 = OpTypeFunction %void
%v2float = OpTypeVector %float 2
%float_0 = OpConstant %float 0
%20 = OpConstantComposite %v2float %float_0 %float_0
%_ptr_Function_v2float = OpTypePointer Function %v2float
%24 = OpTypeFunction %bool
%_ptr_Function_bool = OpTypePointer Function %bool
%true = OpConstantTrue %bool
%v3float = OpTypeVector %float 3
%mat2v3float = OpTypeMatrix %v3float 2
%_ptr_Function_mat2v3float = OpTypePointer Function %mat2v3float
%float_2 = OpConstant %float 2
%false = OpConstantFalse %bool
%v3bool = OpTypeVector %bool 3
%mat2v4float = OpTypeMatrix %v4float 2
%_ptr_Function_mat2v4float = OpTypePointer Function %mat2v4float
%float_3 = OpConstant %float 3
%v4bool = OpTypeVector %bool 4
%mat3v2float = OpTypeMatrix %v2float 3
%_ptr_Function_mat3v2float = OpTypePointer Function %mat3v2float
%float_4 = OpConstant %float 4
%v2bool = OpTypeVector %bool 2
%mat3v4float = OpTypeMatrix %v4float 3
%_ptr_Function_mat3v4float = OpTypePointer Function %mat3v4float
%float_5 = OpConstant %float 5
%mat4v2float = OpTypeMatrix %v2float 4
%_ptr_Function_mat4v2float = OpTypePointer Function %mat4v2float
%float_6 = OpConstant %float 6
%mat4v3float = OpTypeMatrix %v3float 4
%_ptr_Function_mat4v3float = OpTypePointer Function %mat4v3float
%float_7 = OpConstant %float 7
%mat2v2float = OpTypeMatrix %v2float 2
%_ptr_Function_mat2v2float = OpTypePointer Function %mat2v2float
%float_8 = OpConstant %float 8
%mat3v3float = OpTypeMatrix %v3float 3
%_ptr_Function_mat3v3float = OpTypePointer Function %mat3v3float
%float_35 = OpConstant %float 35
%float_1 = OpConstant %float 1
%float_n2 = OpConstant %float -2
%float_0_75 = OpConstant %float 0.75
%368 = OpTypeFunction %v4float %_ptr_Function_v2float
%_ptr_Function_v4float = OpTypePointer Function %v4float
%_ptr_Uniform_v4float = OpTypePointer Uniform %v4float
%int = OpTypeInt 32 1
%int_0 = OpConstant %int 0
%int_1 = OpConstant %int 1
%_entrypoint_v = OpFunction %void None %16
%17 = OpLabel
%21 = OpVariable %_ptr_Function_v2float Function
OpStore %21 %20
%23 = OpFunctionCall %v4float %main %21
OpStore %sk_FragColor %23
OpReturn
OpFunctionEnd
%test_half_b = OpFunction %bool None %24
%25 = OpLabel
%ok = OpVariable %_ptr_Function_bool Function
%m23 = OpVariable %_ptr_Function_mat2v3float Function
%m24 = OpVariable %_ptr_Function_mat2v4float Function
%m32 = OpVariable %_ptr_Function_mat3v2float Function
%m34 = OpVariable %_ptr_Function_mat3v4float Function
%m42 = OpVariable %_ptr_Function_mat4v2float Function
%m43 = OpVariable %_ptr_Function_mat4v3float Function
%m22 = OpVariable %_ptr_Function_mat2v2float Function
%m33 = OpVariable %_ptr_Function_mat3v3float Function
OpStore %ok %true
%35 = OpCompositeConstruct %v3float %float_2 %float_0 %float_0
%36 = OpCompositeConstruct %v3float %float_0 %float_2 %float_0
%34 = OpCompositeConstruct %mat2v3float %35 %36
OpStore %m23 %34
%38 = OpLoad %bool %ok
OpSelectionMerge %40 None
OpBranchConditional %38 %39 %40
%39 = OpLabel
%41 = OpLoad %mat2v3float %m23
%42 = OpCompositeConstruct %v3float %float_2 %float_0 %float_0
%43 = OpCompositeConstruct %v3float %float_0 %float_2 %float_0
%44 = OpCompositeConstruct %mat2v3float %42 %43
%46 = OpCompositeExtract %v3float %41 0
%47 = OpCompositeExtract %v3float %44 0
%48 = OpFOrdEqual %v3bool %46 %47
%49 = OpAll %bool %48
%50 = OpCompositeExtract %v3float %41 1
%51 = OpCompositeExtract %v3float %44 1
%52 = OpFOrdEqual %v3bool %50 %51
%53 = OpAll %bool %52
%54 = OpLogicalAnd %bool %49 %53
OpBranch %40
%40 = OpLabel
%55 = OpPhi %bool %false %25 %54 %39
OpStore %ok %55
%61 = OpCompositeConstruct %v4float %float_3 %float_0 %float_0 %float_0
%62 = OpCompositeConstruct %v4float %float_0 %float_3 %float_0 %float_0
%60 = OpCompositeConstruct %mat2v4float %61 %62
OpStore %m24 %60
%63 = OpLoad %bool %ok
OpSelectionMerge %65 None
OpBranchConditional %63 %64 %65
%64 = OpLabel
%66 = OpLoad %mat2v4float %m24
%67 = OpCompositeConstruct %v4float %float_3 %float_0 %float_0 %float_0
%68 = OpCompositeConstruct %v4float %float_0 %float_3 %float_0 %float_0
%69 = OpCompositeConstruct %mat2v4float %67 %68
%71 = OpCompositeExtract %v4float %66 0
%72 = OpCompositeExtract %v4float %69 0
%73 = OpFOrdEqual %v4bool %71 %72
%74 = OpAll %bool %73
%75 = OpCompositeExtract %v4float %66 1
%76 = OpCompositeExtract %v4float %69 1
%77 = OpFOrdEqual %v4bool %75 %76
%78 = OpAll %bool %77
%79 = OpLogicalAnd %bool %74 %78
OpBranch %65
%65 = OpLabel
%80 = OpPhi %bool %false %40 %79 %64
OpStore %ok %80
%86 = OpCompositeConstruct %v2float %float_4 %float_0
%87 = OpCompositeConstruct %v2float %float_0 %float_4
%88 = OpCompositeConstruct %v2float %float_0 %float_0
%85 = OpCompositeConstruct %mat3v2float %86 %87 %88
OpStore %m32 %85
%89 = OpLoad %bool %ok
OpSelectionMerge %91 None
OpBranchConditional %89 %90 %91
%90 = OpLabel
%92 = OpLoad %mat3v2float %m32
%93 = OpCompositeConstruct %v2float %float_4 %float_0
%94 = OpCompositeConstruct %v2float %float_0 %float_4
%95 = OpCompositeConstruct %v2float %float_0 %float_0
%96 = OpCompositeConstruct %mat3v2float %93 %94 %95
%98 = OpCompositeExtract %v2float %92 0
%99 = OpCompositeExtract %v2float %96 0
%100 = OpFOrdEqual %v2bool %98 %99
%101 = OpAll %bool %100
%102 = OpCompositeExtract %v2float %92 1
%103 = OpCompositeExtract %v2float %96 1
%104 = OpFOrdEqual %v2bool %102 %103
%105 = OpAll %bool %104
%106 = OpLogicalAnd %bool %101 %105
%107 = OpCompositeExtract %v2float %92 2
%108 = OpCompositeExtract %v2float %96 2
%109 = OpFOrdEqual %v2bool %107 %108
%110 = OpAll %bool %109
%111 = OpLogicalAnd %bool %106 %110
OpBranch %91
%91 = OpLabel
%112 = OpPhi %bool %false %65 %111 %90
OpStore %ok %112
%118 = OpCompositeConstruct %v4float %float_5 %float_0 %float_0 %float_0
%119 = OpCompositeConstruct %v4float %float_0 %float_5 %float_0 %float_0
%120 = OpCompositeConstruct %v4float %float_0 %float_0 %float_5 %float_0
%117 = OpCompositeConstruct %mat3v4float %118 %119 %120
OpStore %m34 %117
%121 = OpLoad %bool %ok
OpSelectionMerge %123 None
OpBranchConditional %121 %122 %123
%122 = OpLabel
%124 = OpLoad %mat3v4float %m34
%125 = OpCompositeConstruct %v4float %float_5 %float_0 %float_0 %float_0
%126 = OpCompositeConstruct %v4float %float_0 %float_5 %float_0 %float_0
%127 = OpCompositeConstruct %v4float %float_0 %float_0 %float_5 %float_0
%128 = OpCompositeConstruct %mat3v4float %125 %126 %127
%129 = OpCompositeExtract %v4float %124 0
%130 = OpCompositeExtract %v4float %128 0
%131 = OpFOrdEqual %v4bool %129 %130
%132 = OpAll %bool %131
%133 = OpCompositeExtract %v4float %124 1
%134 = OpCompositeExtract %v4float %128 1
%135 = OpFOrdEqual %v4bool %133 %134
%136 = OpAll %bool %135
%137 = OpLogicalAnd %bool %132 %136
%138 = OpCompositeExtract %v4float %124 2
%139 = OpCompositeExtract %v4float %128 2
%140 = OpFOrdEqual %v4bool %138 %139
%141 = OpAll %bool %140
%142 = OpLogicalAnd %bool %137 %141
OpBranch %123
%123 = OpLabel
%143 = OpPhi %bool %false %91 %142 %122
OpStore %ok %143
%149 = OpCompositeConstruct %v2float %float_6 %float_0
%150 = OpCompositeConstruct %v2float %float_0 %float_6
%151 = OpCompositeConstruct %v2float %float_0 %float_0
%152 = OpCompositeConstruct %v2float %float_0 %float_0
%148 = OpCompositeConstruct %mat4v2float %149 %150 %151 %152
OpStore %m42 %148
%153 = OpLoad %bool %ok
OpSelectionMerge %155 None
OpBranchConditional %153 %154 %155
%154 = OpLabel
%156 = OpLoad %mat4v2float %m42
%157 = OpCompositeConstruct %v2float %float_6 %float_0
%158 = OpCompositeConstruct %v2float %float_0 %float_6
%159 = OpCompositeConstruct %v2float %float_0 %float_0
%160 = OpCompositeConstruct %v2float %float_0 %float_0
%161 = OpCompositeConstruct %mat4v2float %157 %158 %159 %160
%162 = OpCompositeExtract %v2float %156 0
%163 = OpCompositeExtract %v2float %161 0
%164 = OpFOrdEqual %v2bool %162 %163
%165 = OpAll %bool %164
%166 = OpCompositeExtract %v2float %156 1
%167 = OpCompositeExtract %v2float %161 1
%168 = OpFOrdEqual %v2bool %166 %167
%169 = OpAll %bool %168
%170 = OpLogicalAnd %bool %165 %169
%171 = OpCompositeExtract %v2float %156 2
%172 = OpCompositeExtract %v2float %161 2
%173 = OpFOrdEqual %v2bool %171 %172
%174 = OpAll %bool %173
%175 = OpLogicalAnd %bool %170 %174
%176 = OpCompositeExtract %v2float %156 3
%177 = OpCompositeExtract %v2float %161 3
%178 = OpFOrdEqual %v2bool %176 %177
%179 = OpAll %bool %178
%180 = OpLogicalAnd %bool %175 %179
OpBranch %155
%155 = OpLabel
%181 = OpPhi %bool %false %123 %180 %154
OpStore %ok %181
%187 = OpCompositeConstruct %v3float %float_7 %float_0 %float_0
%188 = OpCompositeConstruct %v3float %float_0 %float_7 %float_0
%189 = OpCompositeConstruct %v3float %float_0 %float_0 %float_7
%190 = OpCompositeConstruct %v3float %float_0 %float_0 %float_0
%186 = OpCompositeConstruct %mat4v3float %187 %188 %189 %190
OpStore %m43 %186
%191 = OpLoad %bool %ok
OpSelectionMerge %193 None
OpBranchConditional %191 %192 %193
%192 = OpLabel
%194 = OpLoad %mat4v3float %m43
%195 = OpCompositeConstruct %v3float %float_7 %float_0 %float_0
%196 = OpCompositeConstruct %v3float %float_0 %float_7 %float_0
%197 = OpCompositeConstruct %v3float %float_0 %float_0 %float_7
%198 = OpCompositeConstruct %v3float %float_0 %float_0 %float_0
%199 = OpCompositeConstruct %mat4v3float %195 %196 %197 %198
%200 = OpCompositeExtract %v3float %194 0
%201 = OpCompositeExtract %v3float %199 0
%202 = OpFOrdEqual %v3bool %200 %201
%203 = OpAll %bool %202
%204 = OpCompositeExtract %v3float %194 1
%205 = OpCompositeExtract %v3float %199 1
%206 = OpFOrdEqual %v3bool %204 %205
%207 = OpAll %bool %206
%208 = OpLogicalAnd %bool %203 %207
%209 = OpCompositeExtract %v3float %194 2
%210 = OpCompositeExtract %v3float %199 2
%211 = OpFOrdEqual %v3bool %209 %210
%212 = OpAll %bool %211
%213 = OpLogicalAnd %bool %208 %212
%214 = OpCompositeExtract %v3float %194 3
%215 = OpCompositeExtract %v3float %199 3
%216 = OpFOrdEqual %v3bool %214 %215
%217 = OpAll %bool %216
%218 = OpLogicalAnd %bool %213 %217
OpBranch %193
%193 = OpLabel
%219 = OpPhi %bool %false %155 %218 %192
OpStore %ok %219
%223 = OpLoad %mat3v2float %m32
%224 = OpLoad %mat2v3float %m23
%225 = OpMatrixTimesMatrix %mat2v2float %223 %224
OpStore %m22 %225
%226 = OpLoad %bool %ok
OpSelectionMerge %228 None
OpBranchConditional %226 %227 %228
%227 = OpLabel
%229 = OpLoad %mat2v2float %m22
%232 = OpCompositeConstruct %v2float %float_8 %float_0
%233 = OpCompositeConstruct %v2float %float_0 %float_8
%231 = OpCompositeConstruct %mat2v2float %232 %233
%234 = OpCompositeExtract %v2float %229 0
%235 = OpCompositeExtract %v2float %231 0
%236 = OpFOrdEqual %v2bool %234 %235
%237 = OpAll %bool %236
%238 = OpCompositeExtract %v2float %229 1
%239 = OpCompositeExtract %v2float %231 1
%240 = OpFOrdEqual %v2bool %238 %239
%241 = OpAll %bool %240
%242 = OpLogicalAnd %bool %237 %241
OpBranch %228
%228 = OpLabel
%243 = OpPhi %bool %false %193 %242 %227
OpStore %ok %243
%247 = OpLoad %mat4v3float %m43
%248 = OpLoad %mat3v4float %m34
%249 = OpMatrixTimesMatrix %mat3v3float %247 %248
OpStore %m33 %249
%250 = OpLoad %bool %ok
OpSelectionMerge %252 None
OpBranchConditional %250 %251 %252
%251 = OpLabel
%253 = OpLoad %mat3v3float %m33
%256 = OpCompositeConstruct %v3float %float_35 %float_0 %float_0
%257 = OpCompositeConstruct %v3float %float_0 %float_35 %float_0
%258 = OpCompositeConstruct %v3float %float_0 %float_0 %float_35
%255 = OpCompositeConstruct %mat3v3float %256 %257 %258
%259 = OpCompositeExtract %v3float %253 0
%260 = OpCompositeExtract %v3float %255 0
%261 = OpFOrdEqual %v3bool %259 %260
%262 = OpAll %bool %261
%263 = OpCompositeExtract %v3float %253 1
%264 = OpCompositeExtract %v3float %255 1
%265 = OpFOrdEqual %v3bool %263 %264
%266 = OpAll %bool %265
%267 = OpLogicalAnd %bool %262 %266
%268 = OpCompositeExtract %v3float %253 2
%269 = OpCompositeExtract %v3float %255 2
%270 = OpFOrdEqual %v3bool %268 %269
%271 = OpAll %bool %270
%272 = OpLogicalAnd %bool %267 %271
OpBranch %252
%252 = OpLabel
%273 = OpPhi %bool %false %228 %272 %251
OpStore %ok %273
%274 = OpLoad %mat2v3float %m23
%276 = OpCompositeConstruct %v3float %float_1 %float_1 %float_1
%277 = OpCompositeConstruct %mat2v3float %276 %276
%278 = OpCompositeExtract %v3float %274 0
%279 = OpCompositeExtract %v3float %277 0
%280 = OpFAdd %v3float %278 %279
%281 = OpCompositeExtract %v3float %274 1
%282 = OpCompositeExtract %v3float %277 1
%283 = OpFAdd %v3float %281 %282
%284 = OpCompositeConstruct %mat2v3float %280 %283
OpStore %m23 %284
%285 = OpLoad %bool %ok
OpSelectionMerge %287 None
OpBranchConditional %285 %286 %287
%286 = OpLabel
%288 = OpLoad %mat2v3float %m23
%289 = OpCompositeConstruct %v3float %float_3 %float_1 %float_1
%290 = OpCompositeConstruct %v3float %float_1 %float_3 %float_1
%291 = OpCompositeConstruct %mat2v3float %289 %290
%292 = OpCompositeExtract %v3float %288 0
%293 = OpCompositeExtract %v3float %291 0
%294 = OpFOrdEqual %v3bool %292 %293
%295 = OpAll %bool %294
%296 = OpCompositeExtract %v3float %288 1
%297 = OpCompositeExtract %v3float %291 1
%298 = OpFOrdEqual %v3bool %296 %297
%299 = OpAll %bool %298
%300 = OpLogicalAnd %bool %295 %299
OpBranch %287
%287 = OpLabel
%301 = OpPhi %bool %false %252 %300 %286
OpStore %ok %301
%302 = OpLoad %mat3v2float %m32
%303 = OpCompositeConstruct %v2float %float_2 %float_2
%304 = OpCompositeConstruct %mat3v2float %303 %303 %303
%305 = OpCompositeExtract %v2float %302 0
%306 = OpCompositeExtract %v2float %304 0
%307 = OpFSub %v2float %305 %306
%308 = OpCompositeExtract %v2float %302 1
%309 = OpCompositeExtract %v2float %304 1
%310 = OpFSub %v2float %308 %309
%311 = OpCompositeExtract %v2float %302 2
%312 = OpCompositeExtract %v2float %304 2
%313 = OpFSub %v2float %311 %312
%314 = OpCompositeConstruct %mat3v2float %307 %310 %313
OpStore %m32 %314
%315 = OpLoad %bool %ok
OpSelectionMerge %317 None
OpBranchConditional %315 %316 %317
%316 = OpLabel
%318 = OpLoad %mat3v2float %m32
%320 = OpCompositeConstruct %v2float %float_2 %float_n2
%321 = OpCompositeConstruct %v2float %float_n2 %float_2
%322 = OpCompositeConstruct %v2float %float_n2 %float_n2
%323 = OpCompositeConstruct %mat3v2float %320 %321 %322
%324 = OpCompositeExtract %v2float %318 0
%325 = OpCompositeExtract %v2float %323 0
%326 = OpFOrdEqual %v2bool %324 %325
%327 = OpAll %bool %326
%328 = OpCompositeExtract %v2float %318 1
%329 = OpCompositeExtract %v2float %323 1
%330 = OpFOrdEqual %v2bool %328 %329
%331 = OpAll %bool %330
%332 = OpLogicalAnd %bool %327 %331
%333 = OpCompositeExtract %v2float %318 2
%334 = OpCompositeExtract %v2float %323 2
%335 = OpFOrdEqual %v2bool %333 %334
%336 = OpAll %bool %335
%337 = OpLogicalAnd %bool %332 %336
OpBranch %317
%317 = OpLabel
%338 = OpPhi %bool %false %287 %337 %316
OpStore %ok %338
%339 = OpLoad %mat2v4float %m24
%340 = OpCompositeConstruct %v4float %float_4 %float_4 %float_4 %float_4
%341 = OpCompositeConstruct %mat2v4float %340 %340
%342 = OpCompositeExtract %v4float %339 0
%343 = OpCompositeExtract %v4float %341 0
%344 = OpFDiv %v4float %342 %343
%345 = OpCompositeExtract %v4float %339 1
%346 = OpCompositeExtract %v4float %341 1
%347 = OpFDiv %v4float %345 %346
%348 = OpCompositeConstruct %mat2v4float %344 %347
OpStore %m24 %348
%349 = OpLoad %bool %ok
OpSelectionMerge %351 None
OpBranchConditional %349 %350 %351
%350 = OpLabel
%352 = OpLoad %mat2v4float %m24
%354 = OpCompositeConstruct %v4float %float_0_75 %float_0 %float_0 %float_0
%355 = OpCompositeConstruct %v4float %float_0 %float_0_75 %float_0 %float_0
%356 = OpCompositeConstruct %mat2v4float %354 %355
%357 = OpCompositeExtract %v4float %352 0
%358 = OpCompositeExtract %v4float %356 0
%359 = OpFOrdEqual %v4bool %357 %358
%360 = OpAll %bool %359
%361 = OpCompositeExtract %v4float %352 1
%362 = OpCompositeExtract %v4float %356 1
%363 = OpFOrdEqual %v4bool %361 %362
%364 = OpAll %bool %363
%365 = OpLogicalAnd %bool %360 %364
OpBranch %351
%351 = OpLabel
%366 = OpPhi %bool %false %317 %365 %350
OpStore %ok %366
%367 = OpLoad %bool %ok
OpReturnValue %367
OpFunctionEnd
%main = OpFunction %v4float None %368
%369 = OpFunctionParameter %_ptr_Function_v2float
%370 = OpLabel
%_0_ok = OpVariable %_ptr_Function_bool Function
%_1_m23 = OpVariable %_ptr_Function_mat2v3float Function
%_2_m24 = OpVariable %_ptr_Function_mat2v4float Function
%_3_m32 = OpVariable %_ptr_Function_mat3v2float Function
%_4_m34 = OpVariable %_ptr_Function_mat3v4float Function
%_5_m42 = OpVariable %_ptr_Function_mat4v2float Function
%_6_m43 = OpVariable %_ptr_Function_mat4v3float Function
%_7_m22 = OpVariable %_ptr_Function_mat2v2float Function
%_8_m33 = OpVariable %_ptr_Function_mat3v3float Function
%683 = OpVariable %_ptr_Function_v4float Function
OpStore %_0_ok %true
%374 = OpCompositeConstruct %v3float %float_2 %float_0 %float_0
%375 = OpCompositeConstruct %v3float %float_0 %float_2 %float_0
%373 = OpCompositeConstruct %mat2v3float %374 %375
OpStore %_1_m23 %373
%376 = OpLoad %bool %_0_ok
OpSelectionMerge %378 None
OpBranchConditional %376 %377 %378
%377 = OpLabel
%379 = OpLoad %mat2v3float %_1_m23
%380 = OpCompositeConstruct %v3float %float_2 %float_0 %float_0
%381 = OpCompositeConstruct %v3float %float_0 %float_2 %float_0
%382 = OpCompositeConstruct %mat2v3float %380 %381
%383 = OpCompositeExtract %v3float %379 0
%384 = OpCompositeExtract %v3float %382 0
%385 = OpFOrdEqual %v3bool %383 %384
%386 = OpAll %bool %385
%387 = OpCompositeExtract %v3float %379 1
%388 = OpCompositeExtract %v3float %382 1
%389 = OpFOrdEqual %v3bool %387 %388
%390 = OpAll %bool %389
%391 = OpLogicalAnd %bool %386 %390
OpBranch %378
%378 = OpLabel
%392 = OpPhi %bool %false %370 %391 %377
OpStore %_0_ok %392
%395 = OpCompositeConstruct %v4float %float_3 %float_0 %float_0 %float_0
%396 = OpCompositeConstruct %v4float %float_0 %float_3 %float_0 %float_0
%394 = OpCompositeConstruct %mat2v4float %395 %396
OpStore %_2_m24 %394
%397 = OpLoad %bool %_0_ok
OpSelectionMerge %399 None
OpBranchConditional %397 %398 %399
%398 = OpLabel
%400 = OpLoad %mat2v4float %_2_m24
%401 = OpCompositeConstruct %v4float %float_3 %float_0 %float_0 %float_0
%402 = OpCompositeConstruct %v4float %float_0 %float_3 %float_0 %float_0
%403 = OpCompositeConstruct %mat2v4float %401 %402
%404 = OpCompositeExtract %v4float %400 0
%405 = OpCompositeExtract %v4float %403 0
%406 = OpFOrdEqual %v4bool %404 %405
%407 = OpAll %bool %406
%408 = OpCompositeExtract %v4float %400 1
%409 = OpCompositeExtract %v4float %403 1
%410 = OpFOrdEqual %v4bool %408 %409
%411 = OpAll %bool %410
%412 = OpLogicalAnd %bool %407 %411
OpBranch %399
%399 = OpLabel
%413 = OpPhi %bool %false %378 %412 %398
OpStore %_0_ok %413
%416 = OpCompositeConstruct %v2float %float_4 %float_0
%417 = OpCompositeConstruct %v2float %float_0 %float_4
%418 = OpCompositeConstruct %v2float %float_0 %float_0
%415 = OpCompositeConstruct %mat3v2float %416 %417 %418
OpStore %_3_m32 %415
%419 = OpLoad %bool %_0_ok
OpSelectionMerge %421 None
OpBranchConditional %419 %420 %421
%420 = OpLabel
%422 = OpLoad %mat3v2float %_3_m32
%423 = OpCompositeConstruct %v2float %float_4 %float_0
%424 = OpCompositeConstruct %v2float %float_0 %float_4
%425 = OpCompositeConstruct %v2float %float_0 %float_0
%426 = OpCompositeConstruct %mat3v2float %423 %424 %425
%427 = OpCompositeExtract %v2float %422 0
%428 = OpCompositeExtract %v2float %426 0
%429 = OpFOrdEqual %v2bool %427 %428
%430 = OpAll %bool %429
%431 = OpCompositeExtract %v2float %422 1
%432 = OpCompositeExtract %v2float %426 1
%433 = OpFOrdEqual %v2bool %431 %432
%434 = OpAll %bool %433
%435 = OpLogicalAnd %bool %430 %434
%436 = OpCompositeExtract %v2float %422 2
%437 = OpCompositeExtract %v2float %426 2
%438 = OpFOrdEqual %v2bool %436 %437
%439 = OpAll %bool %438
%440 = OpLogicalAnd %bool %435 %439
OpBranch %421
%421 = OpLabel
%441 = OpPhi %bool %false %399 %440 %420
OpStore %_0_ok %441
%444 = OpCompositeConstruct %v4float %float_5 %float_0 %float_0 %float_0
%445 = OpCompositeConstruct %v4float %float_0 %float_5 %float_0 %float_0
%446 = OpCompositeConstruct %v4float %float_0 %float_0 %float_5 %float_0
%443 = OpCompositeConstruct %mat3v4float %444 %445 %446
OpStore %_4_m34 %443
%447 = OpLoad %bool %_0_ok
OpSelectionMerge %449 None
OpBranchConditional %447 %448 %449
%448 = OpLabel
%450 = OpLoad %mat3v4float %_4_m34
%451 = OpCompositeConstruct %v4float %float_5 %float_0 %float_0 %float_0
%452 = OpCompositeConstruct %v4float %float_0 %float_5 %float_0 %float_0
%453 = OpCompositeConstruct %v4float %float_0 %float_0 %float_5 %float_0
%454 = OpCompositeConstruct %mat3v4float %451 %452 %453
%455 = OpCompositeExtract %v4float %450 0
%456 = OpCompositeExtract %v4float %454 0
%457 = OpFOrdEqual %v4bool %455 %456
%458 = OpAll %bool %457
%459 = OpCompositeExtract %v4float %450 1
%460 = OpCompositeExtract %v4float %454 1
%461 = OpFOrdEqual %v4bool %459 %460
%462 = OpAll %bool %461
%463 = OpLogicalAnd %bool %458 %462
%464 = OpCompositeExtract %v4float %450 2
%465 = OpCompositeExtract %v4float %454 2
%466 = OpFOrdEqual %v4bool %464 %465
%467 = OpAll %bool %466
%468 = OpLogicalAnd %bool %463 %467
OpBranch %449
%449 = OpLabel
%469 = OpPhi %bool %false %421 %468 %448
OpStore %_0_ok %469
%472 = OpCompositeConstruct %v2float %float_6 %float_0
%473 = OpCompositeConstruct %v2float %float_0 %float_6
%474 = OpCompositeConstruct %v2float %float_0 %float_0
%475 = OpCompositeConstruct %v2float %float_0 %float_0
%471 = OpCompositeConstruct %mat4v2float %472 %473 %474 %475
OpStore %_5_m42 %471
%476 = OpLoad %bool %_0_ok
OpSelectionMerge %478 None
OpBranchConditional %476 %477 %478
%477 = OpLabel
%479 = OpLoad %mat4v2float %_5_m42
%480 = OpCompositeConstruct %v2float %float_6 %float_0
%481 = OpCompositeConstruct %v2float %float_0 %float_6
%482 = OpCompositeConstruct %v2float %float_0 %float_0
%483 = OpCompositeConstruct %v2float %float_0 %float_0
%484 = OpCompositeConstruct %mat4v2float %480 %481 %482 %483
%485 = OpCompositeExtract %v2float %479 0
%486 = OpCompositeExtract %v2float %484 0
%487 = OpFOrdEqual %v2bool %485 %486
%488 = OpAll %bool %487
%489 = OpCompositeExtract %v2float %479 1
%490 = OpCompositeExtract %v2float %484 1
%491 = OpFOrdEqual %v2bool %489 %490
%492 = OpAll %bool %491
%493 = OpLogicalAnd %bool %488 %492
%494 = OpCompositeExtract %v2float %479 2
%495 = OpCompositeExtract %v2float %484 2
%496 = OpFOrdEqual %v2bool %494 %495
%497 = OpAll %bool %496
%498 = OpLogicalAnd %bool %493 %497
%499 = OpCompositeExtract %v2float %479 3
%500 = OpCompositeExtract %v2float %484 3
%501 = OpFOrdEqual %v2bool %499 %500
%502 = OpAll %bool %501
%503 = OpLogicalAnd %bool %498 %502
OpBranch %478
%478 = OpLabel
%504 = OpPhi %bool %false %449 %503 %477
OpStore %_0_ok %504
%507 = OpCompositeConstruct %v3float %float_7 %float_0 %float_0
%508 = OpCompositeConstruct %v3float %float_0 %float_7 %float_0
%509 = OpCompositeConstruct %v3float %float_0 %float_0 %float_7
%510 = OpCompositeConstruct %v3float %float_0 %float_0 %float_0
%506 = OpCompositeConstruct %mat4v3float %507 %508 %509 %510
OpStore %_6_m43 %506
%511 = OpLoad %bool %_0_ok
OpSelectionMerge %513 None
OpBranchConditional %511 %512 %513
%512 = OpLabel
%514 = OpLoad %mat4v3float %_6_m43
%515 = OpCompositeConstruct %v3float %float_7 %float_0 %float_0
%516 = OpCompositeConstruct %v3float %float_0 %float_7 %float_0
%517 = OpCompositeConstruct %v3float %float_0 %float_0 %float_7
%518 = OpCompositeConstruct %v3float %float_0 %float_0 %float_0
%519 = OpCompositeConstruct %mat4v3float %515 %516 %517 %518
%520 = OpCompositeExtract %v3float %514 0
%521 = OpCompositeExtract %v3float %519 0
%522 = OpFOrdEqual %v3bool %520 %521
%523 = OpAll %bool %522
%524 = OpCompositeExtract %v3float %514 1
%525 = OpCompositeExtract %v3float %519 1
%526 = OpFOrdEqual %v3bool %524 %525
%527 = OpAll %bool %526
%528 = OpLogicalAnd %bool %523 %527
%529 = OpCompositeExtract %v3float %514 2
%530 = OpCompositeExtract %v3float %519 2
%531 = OpFOrdEqual %v3bool %529 %530
%532 = OpAll %bool %531
%533 = OpLogicalAnd %bool %528 %532
%534 = OpCompositeExtract %v3float %514 3
%535 = OpCompositeExtract %v3float %519 3
%536 = OpFOrdEqual %v3bool %534 %535
%537 = OpAll %bool %536
%538 = OpLogicalAnd %bool %533 %537
OpBranch %513
%513 = OpLabel
%539 = OpPhi %bool %false %478 %538 %512
OpStore %_0_ok %539
%541 = OpLoad %mat3v2float %_3_m32
%542 = OpLoad %mat2v3float %_1_m23
%543 = OpMatrixTimesMatrix %mat2v2float %541 %542
OpStore %_7_m22 %543
%544 = OpLoad %bool %_0_ok
OpSelectionMerge %546 None
OpBranchConditional %544 %545 %546
%545 = OpLabel
%547 = OpLoad %mat2v2float %_7_m22
%549 = OpCompositeConstruct %v2float %float_8 %float_0
%550 = OpCompositeConstruct %v2float %float_0 %float_8
%548 = OpCompositeConstruct %mat2v2float %549 %550
%551 = OpCompositeExtract %v2float %547 0
%552 = OpCompositeExtract %v2float %548 0
%553 = OpFOrdEqual %v2bool %551 %552
%554 = OpAll %bool %553
%555 = OpCompositeExtract %v2float %547 1
%556 = OpCompositeExtract %v2float %548 1
%557 = OpFOrdEqual %v2bool %555 %556
%558 = OpAll %bool %557
%559 = OpLogicalAnd %bool %554 %558
OpBranch %546
%546 = OpLabel
%560 = OpPhi %bool %false %513 %559 %545
OpStore %_0_ok %560
%562 = OpLoad %mat4v3float %_6_m43
%563 = OpLoad %mat3v4float %_4_m34
%564 = OpMatrixTimesMatrix %mat3v3float %562 %563
OpStore %_8_m33 %564
%565 = OpLoad %bool %_0_ok
OpSelectionMerge %567 None
OpBranchConditional %565 %566 %567
%566 = OpLabel
%568 = OpLoad %mat3v3float %_8_m33
%570 = OpCompositeConstruct %v3float %float_35 %float_0 %float_0
%571 = OpCompositeConstruct %v3float %float_0 %float_35 %float_0
%572 = OpCompositeConstruct %v3float %float_0 %float_0 %float_35
%569 = OpCompositeConstruct %mat3v3float %570 %571 %572
%573 = OpCompositeExtract %v3float %568 0
%574 = OpCompositeExtract %v3float %569 0
%575 = OpFOrdEqual %v3bool %573 %574
%576 = OpAll %bool %575
%577 = OpCompositeExtract %v3float %568 1
%578 = OpCompositeExtract %v3float %569 1
%579 = OpFOrdEqual %v3bool %577 %578
%580 = OpAll %bool %579
%581 = OpLogicalAnd %bool %576 %580
%582 = OpCompositeExtract %v3float %568 2
%583 = OpCompositeExtract %v3float %569 2
%584 = OpFOrdEqual %v3bool %582 %583
%585 = OpAll %bool %584
%586 = OpLogicalAnd %bool %581 %585
OpBranch %567
%567 = OpLabel
%587 = OpPhi %bool %false %546 %586 %566
OpStore %_0_ok %587
%588 = OpLoad %mat2v3float %_1_m23
%589 = OpCompositeConstruct %v3float %float_1 %float_1 %float_1
%590 = OpCompositeConstruct %mat2v3float %589 %589
%591 = OpCompositeExtract %v3float %588 0
%592 = OpCompositeExtract %v3float %590 0
%593 = OpFAdd %v3float %591 %592
%594 = OpCompositeExtract %v3float %588 1
%595 = OpCompositeExtract %v3float %590 1
%596 = OpFAdd %v3float %594 %595
%597 = OpCompositeConstruct %mat2v3float %593 %596
OpStore %_1_m23 %597
%598 = OpLoad %bool %_0_ok
OpSelectionMerge %600 None
OpBranchConditional %598 %599 %600
%599 = OpLabel
%601 = OpLoad %mat2v3float %_1_m23
%602 = OpCompositeConstruct %v3float %float_3 %float_1 %float_1
%603 = OpCompositeConstruct %v3float %float_1 %float_3 %float_1
%604 = OpCompositeConstruct %mat2v3float %602 %603
%605 = OpCompositeExtract %v3float %601 0
%606 = OpCompositeExtract %v3float %604 0
%607 = OpFOrdEqual %v3bool %605 %606
%608 = OpAll %bool %607
%609 = OpCompositeExtract %v3float %601 1
%610 = OpCompositeExtract %v3float %604 1
%611 = OpFOrdEqual %v3bool %609 %610
%612 = OpAll %bool %611
%613 = OpLogicalAnd %bool %608 %612
OpBranch %600
%600 = OpLabel
%614 = OpPhi %bool %false %567 %613 %599
OpStore %_0_ok %614
%615 = OpLoad %mat3v2float %_3_m32
%616 = OpCompositeConstruct %v2float %float_2 %float_2
%617 = OpCompositeConstruct %mat3v2float %616 %616 %616
%618 = OpCompositeExtract %v2float %615 0
%619 = OpCompositeExtract %v2float %617 0
%620 = OpFSub %v2float %618 %619
%621 = OpCompositeExtract %v2float %615 1
%622 = OpCompositeExtract %v2float %617 1
%623 = OpFSub %v2float %621 %622
%624 = OpCompositeExtract %v2float %615 2
%625 = OpCompositeExtract %v2float %617 2
%626 = OpFSub %v2float %624 %625
%627 = OpCompositeConstruct %mat3v2float %620 %623 %626
OpStore %_3_m32 %627
%628 = OpLoad %bool %_0_ok
OpSelectionMerge %630 None
OpBranchConditional %628 %629 %630
%629 = OpLabel
%631 = OpLoad %mat3v2float %_3_m32
%632 = OpCompositeConstruct %v2float %float_2 %float_n2
%633 = OpCompositeConstruct %v2float %float_n2 %float_2
%634 = OpCompositeConstruct %v2float %float_n2 %float_n2
%635 = OpCompositeConstruct %mat3v2float %632 %633 %634
%636 = OpCompositeExtract %v2float %631 0
%637 = OpCompositeExtract %v2float %635 0
%638 = OpFOrdEqual %v2bool %636 %637
%639 = OpAll %bool %638
%640 = OpCompositeExtract %v2float %631 1
%641 = OpCompositeExtract %v2float %635 1
%642 = OpFOrdEqual %v2bool %640 %641
%643 = OpAll %bool %642
%644 = OpLogicalAnd %bool %639 %643
%645 = OpCompositeExtract %v2float %631 2
%646 = OpCompositeExtract %v2float %635 2
%647 = OpFOrdEqual %v2bool %645 %646
%648 = OpAll %bool %647
%649 = OpLogicalAnd %bool %644 %648
OpBranch %630
%630 = OpLabel
%650 = OpPhi %bool %false %600 %649 %629
OpStore %_0_ok %650
%651 = OpLoad %mat2v4float %_2_m24
%652 = OpCompositeConstruct %v4float %float_4 %float_4 %float_4 %float_4
%653 = OpCompositeConstruct %mat2v4float %652 %652
%654 = OpCompositeExtract %v4float %651 0
%655 = OpCompositeExtract %v4float %653 0
%656 = OpFDiv %v4float %654 %655
%657 = OpCompositeExtract %v4float %651 1
%658 = OpCompositeExtract %v4float %653 1
%659 = OpFDiv %v4float %657 %658
%660 = OpCompositeConstruct %mat2v4float %656 %659
OpStore %_2_m24 %660
%661 = OpLoad %bool %_0_ok
OpSelectionMerge %663 None
OpBranchConditional %661 %662 %663
%662 = OpLabel
%664 = OpLoad %mat2v4float %_2_m24
%665 = OpCompositeConstruct %v4float %float_0_75 %float_0 %float_0 %float_0
%666 = OpCompositeConstruct %v4float %float_0 %float_0_75 %float_0 %float_0
%667 = OpCompositeConstruct %mat2v4float %665 %666
%668 = OpCompositeExtract %v4float %664 0
%669 = OpCompositeExtract %v4float %667 0
%670 = OpFOrdEqual %v4bool %668 %669
%671 = OpAll %bool %670
%672 = OpCompositeExtract %v4float %664 1
%673 = OpCompositeExtract %v4float %667 1
%674 = OpFOrdEqual %v4bool %672 %673
%675 = OpAll %bool %674
%676 = OpLogicalAnd %bool %671 %675
OpBranch %663
%663 = OpLabel
%677 = OpPhi %bool %false %630 %676 %662
OpStore %_0_ok %677
%678 = OpLoad %bool %_0_ok
OpSelectionMerge %680 None
OpBranchConditional %678 %679 %680
%679 = OpLabel
%681 = OpFunctionCall %bool %test_half_b
OpBranch %680
%680 = OpLabel
%682 = OpPhi %bool %false %663 %681 %679
OpSelectionMerge %687 None
OpBranchConditional %682 %685 %686
%685 = OpLabel
%688 = OpAccessChain %_ptr_Uniform_v4float %11 %int_0
%692 = OpLoad %v4float %688
OpStore %683 %692
OpBranch %687
%686 = OpLabel
%693 = OpAccessChain %_ptr_Uniform_v4float %11 %int_1
%695 = OpLoad %v4float %693
OpStore %683 %695
OpBranch %687
%687 = OpLabel
%696 = OpLoad %v4float %683
OpReturnValue %696
OpFunctionEnd