skia2/tests/sksl/shared/VectorScalarMath.asm.frag
John Stiles d94bfdd7d8 Fix codegen for integer vector-scalar arithmetic in SPIR-V.
Due to missing type-checks, we would emit `OpVectorTimesScalar` when
multiplying an ivec with an int, or an `OpFDiv` when dividing an ivec
against an int.

Change-Id: Idc214dbe0ec208cb44f28b22e585584ac2ab7dae
Bug: skia:11267, skia:11788
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/388742
Commit-Queue: John Stiles <johnstiles@google.com>
Auto-Submit: John Stiles <johnstiles@google.com>
Reviewed-by: Ethan Nicholas <ethannicholas@google.com>
2021-03-26 02:30:04 +00:00

836 lines
26 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 "colorRed"
OpMemberName %_UniformBuffer 1 "colorGreen"
OpMemberName %_UniformBuffer 2 "unknownInput"
OpName %_entrypoint_v "_entrypoint_v"
OpName %test_int_b "test_int_b"
OpName %ok "ok"
OpName %inputRed "inputRed"
OpName %inputGreen "inputGreen"
OpName %x "x"
OpName %main "main"
OpName %_0_ok "_0_ok"
OpName %_1_inputRed "_1_inputRed"
OpName %_2_inputGreen "_2_inputGreen"
OpName %_3_x "_3_x"
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
OpMemberDecorate %_UniformBuffer 2 Offset 32
OpMemberDecorate %_UniformBuffer 2 RelaxedPrecision
OpDecorate %_UniformBuffer Block
OpDecorate %11 Binding 0
OpDecorate %11 DescriptorSet 0
OpDecorate %31 RelaxedPrecision
OpDecorate %32 RelaxedPrecision
OpDecorate %34 RelaxedPrecision
OpDecorate %36 RelaxedPrecision
OpDecorate %38 RelaxedPrecision
OpDecorate %44 RelaxedPrecision
OpDecorate %45 RelaxedPrecision
OpDecorate %47 RelaxedPrecision
OpDecorate %49 RelaxedPrecision
OpDecorate %51 RelaxedPrecision
OpDecorate %60 RelaxedPrecision
OpDecorate %74 RelaxedPrecision
OpDecorate %89 RelaxedPrecision
OpDecorate %105 RelaxedPrecision
OpDecorate %120 RelaxedPrecision
OpDecorate %133 RelaxedPrecision
OpDecorate %144 RelaxedPrecision
OpDecorate %156 RelaxedPrecision
OpDecorate %169 RelaxedPrecision
OpDecorate %183 RelaxedPrecision
OpDecorate %197 RelaxedPrecision
OpDecorate %211 RelaxedPrecision
OpDecorate %231 RelaxedPrecision
OpDecorate %250 RelaxedPrecision
OpDecorate %257 RelaxedPrecision
OpDecorate %_1_inputRed RelaxedPrecision
OpDecorate %264 RelaxedPrecision
OpDecorate %_2_inputGreen RelaxedPrecision
OpDecorate %267 RelaxedPrecision
OpDecorate %_3_x RelaxedPrecision
OpDecorate %269 RelaxedPrecision
OpDecorate %271 RelaxedPrecision
OpDecorate %272 RelaxedPrecision
OpDecorate %273 RelaxedPrecision
OpDecorate %276 RelaxedPrecision
OpDecorate %278 RelaxedPrecision
OpDecorate %282 RelaxedPrecision
OpDecorate %283 RelaxedPrecision
OpDecorate %284 RelaxedPrecision
OpDecorate %285 RelaxedPrecision
OpDecorate %286 RelaxedPrecision
OpDecorate %289 RelaxedPrecision
OpDecorate %292 RelaxedPrecision
OpDecorate %296 RelaxedPrecision
OpDecorate %297 RelaxedPrecision
OpDecorate %298 RelaxedPrecision
OpDecorate %299 RelaxedPrecision
OpDecorate %300 RelaxedPrecision
OpDecorate %301 RelaxedPrecision
OpDecorate %304 RelaxedPrecision
OpDecorate %306 RelaxedPrecision
OpDecorate %310 RelaxedPrecision
OpDecorate %311 RelaxedPrecision
OpDecorate %314 RelaxedPrecision
OpDecorate %315 RelaxedPrecision
OpDecorate %316 RelaxedPrecision
OpDecorate %317 RelaxedPrecision
OpDecorate %320 RelaxedPrecision
OpDecorate %321 RelaxedPrecision
OpDecorate %325 RelaxedPrecision
OpDecorate %326 RelaxedPrecision
OpDecorate %329 RelaxedPrecision
OpDecorate %330 RelaxedPrecision
OpDecorate %331 RelaxedPrecision
OpDecorate %332 RelaxedPrecision
OpDecorate %333 RelaxedPrecision
OpDecorate %336 RelaxedPrecision
OpDecorate %339 RelaxedPrecision
OpDecorate %343 RelaxedPrecision
OpDecorate %345 RelaxedPrecision
OpDecorate %346 RelaxedPrecision
OpDecorate %347 RelaxedPrecision
OpDecorate %350 RelaxedPrecision
OpDecorate %352 RelaxedPrecision
OpDecorate %356 RelaxedPrecision
OpDecorate %357 RelaxedPrecision
OpDecorate %358 RelaxedPrecision
OpDecorate %359 RelaxedPrecision
OpDecorate %362 RelaxedPrecision
OpDecorate %367 RelaxedPrecision
OpDecorate %368 RelaxedPrecision
OpDecorate %369 RelaxedPrecision
OpDecorate %370 RelaxedPrecision
OpDecorate %371 RelaxedPrecision
OpDecorate %374 RelaxedPrecision
OpDecorate %375 RelaxedPrecision
OpDecorate %379 RelaxedPrecision
OpDecorate %380 RelaxedPrecision
OpDecorate %381 RelaxedPrecision
OpDecorate %382 RelaxedPrecision
OpDecorate %383 RelaxedPrecision
OpDecorate %384 RelaxedPrecision
OpDecorate %387 RelaxedPrecision
OpDecorate %388 RelaxedPrecision
OpDecorate %392 RelaxedPrecision
OpDecorate %393 RelaxedPrecision
OpDecorate %394 RelaxedPrecision
OpDecorate %395 RelaxedPrecision
OpDecorate %396 RelaxedPrecision
OpDecorate %397 RelaxedPrecision
OpDecorate %400 RelaxedPrecision
OpDecorate %405 RelaxedPrecision
OpDecorate %406 RelaxedPrecision
OpDecorate %407 RelaxedPrecision
OpDecorate %408 RelaxedPrecision
OpDecorate %409 RelaxedPrecision
OpDecorate %410 RelaxedPrecision
OpDecorate %411 RelaxedPrecision
OpDecorate %414 RelaxedPrecision
OpDecorate %415 RelaxedPrecision
OpDecorate %419 RelaxedPrecision
OpDecorate %420 RelaxedPrecision
OpDecorate %421 RelaxedPrecision
OpDecorate %422 RelaxedPrecision
OpDecorate %423 RelaxedPrecision
OpDecorate %426 RelaxedPrecision
OpDecorate %427 RelaxedPrecision
OpDecorate %431 RelaxedPrecision
OpDecorate %432 RelaxedPrecision
OpDecorate %433 RelaxedPrecision
OpDecorate %434 RelaxedPrecision
OpDecorate %435 RelaxedPrecision
OpDecorate %436 RelaxedPrecision
OpDecorate %437 RelaxedPrecision
OpDecorate %438 RelaxedPrecision
OpDecorate %439 RelaxedPrecision
OpDecorate %440 RelaxedPrecision
OpDecorate %441 RelaxedPrecision
OpDecorate %442 RelaxedPrecision
OpDecorate %445 RelaxedPrecision
OpDecorate %449 RelaxedPrecision
OpDecorate %450 RelaxedPrecision
OpDecorate %451 RelaxedPrecision
OpDecorate %452 RelaxedPrecision
OpDecorate %453 RelaxedPrecision
OpDecorate %454 RelaxedPrecision
OpDecorate %455 RelaxedPrecision
OpDecorate %456 RelaxedPrecision
OpDecorate %457 RelaxedPrecision
OpDecorate %458 RelaxedPrecision
OpDecorate %459 RelaxedPrecision
OpDecorate %460 RelaxedPrecision
OpDecorate %463 RelaxedPrecision
OpDecorate %467 RelaxedPrecision
OpDecorate %477 RelaxedPrecision
OpDecorate %479 RelaxedPrecision
OpDecorate %480 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 %float
%_ptr_Uniform__UniformBuffer = OpTypePointer Uniform %_UniformBuffer
%11 = OpVariable %_ptr_Uniform__UniformBuffer Uniform
%void = OpTypeVoid
%16 = OpTypeFunction %void
%19 = OpTypeFunction %bool
%_ptr_Function_bool = OpTypePointer Function %bool
%true = OpConstantTrue %bool
%int = OpTypeInt 32 1
%v4int = OpTypeVector %int 4
%_ptr_Function_v4int = OpTypePointer Function %v4int
%_ptr_Uniform_v4float = OpTypePointer Uniform %v4float
%int_0 = OpConstant %int 0
%int_1 = OpConstant %int 1
%int_2 = OpConstant %int 2
%false = OpConstantFalse %bool
%int_3 = OpConstant %int 3
%65 = OpConstantComposite %v4int %int_3 %int_2 %int_2 %int_3
%v4bool = OpTypeVector %bool 4
%int_n1 = OpConstant %int -1
%int_n2 = OpConstant %int -2
%80 = OpConstantComposite %v4int %int_n1 %int_n1 %int_n2 %int_n2
%93 = OpConstantComposite %v4int %int_2 %int_1 %int_1 %int_2
%v3int = OpTypeVector %int 3
%int_9 = OpConstant %int 9
%109 = OpConstantComposite %v4int %int_9 %int_9 %int_9 %int_2
%v2int = OpTypeVector %int 2
%124 = OpConstantComposite %v4int %int_3 %int_0 %int_9 %int_2
%int_5 = OpConstant %int 5
%137 = OpConstantComposite %v4int %int_0 %int_5 %int_5 %int_0
%int_10 = OpConstant %int 10
%160 = OpConstantComposite %v4int %int_9 %int_9 %int_10 %int_10
%173 = OpConstantComposite %v4int %int_1 %int_2 %int_1 %int_2
%int_36 = OpConstant %int 36
%int_4 = OpConstant %int 4
%int_18 = OpConstant %int 18
%203 = OpConstantComposite %v4int %int_4 %int_18 %int_9 %int_2
%215 = OpConstantComposite %v4int %int_2 %int_9 %int_18 %int_4
%258 = OpTypeFunction %v4float
%_ptr_Function_v4float = OpTypePointer Function %v4float
%float_2 = OpConstant %float 2
%float_3 = OpConstant %float 3
%278 = OpConstantComposite %v4float %float_3 %float_2 %float_2 %float_3
%float_n1 = OpConstant %float -1
%float_n2 = OpConstant %float -2
%292 = OpConstantComposite %v4float %float_n1 %float_n1 %float_n2 %float_n2
%float_1 = OpConstant %float 1
%306 = OpConstantComposite %v4float %float_2 %float_1 %float_1 %float_2
%v3float = OpTypeVector %float 3
%float_9 = OpConstant %float 9
%321 = OpConstantComposite %v4float %float_9 %float_9 %float_9 %float_2
%v2float = OpTypeVector %float 2
%float_0_5 = OpConstant %float 0.5
%float_18 = OpConstant %float 18
%float_4 = OpConstant %float 4
%339 = OpConstantComposite %v4float %float_18 %float_4 %float_9 %float_2
%float_5 = OpConstant %float 5
%float_0 = OpConstant %float 0
%352 = OpConstantComposite %v4float %float_0 %float_5 %float_5 %float_0
%float_10 = OpConstant %float 10
%375 = OpConstantComposite %v4float %float_9 %float_9 %float_10 %float_10
%388 = OpConstantComposite %v4float %float_1 %float_2 %float_1 %float_2
%float_36 = OpConstant %float 36
%415 = OpConstantComposite %v4float %float_4 %float_18 %float_9 %float_2
%427 = OpConstantComposite %v4float %float_2 %float_9 %float_18 %float_4
%_entrypoint_v = OpFunction %void None %16
%17 = OpLabel
%18 = OpFunctionCall %v4float %main
OpStore %sk_FragColor %18
OpReturn
OpFunctionEnd
%test_int_b = OpFunction %bool None %19
%20 = OpLabel
%ok = OpVariable %_ptr_Function_bool Function
%inputRed = OpVariable %_ptr_Function_v4int Function
%inputGreen = OpVariable %_ptr_Function_v4int Function
%x = OpVariable %_ptr_Function_v4int Function
OpStore %ok %true
%28 = OpAccessChain %_ptr_Uniform_v4float %11 %int_0
%31 = OpLoad %v4float %28
%32 = OpCompositeExtract %float %31 0
%33 = OpConvertFToS %int %32
%34 = OpCompositeExtract %float %31 1
%35 = OpConvertFToS %int %34
%36 = OpCompositeExtract %float %31 2
%37 = OpConvertFToS %int %36
%38 = OpCompositeExtract %float %31 3
%39 = OpConvertFToS %int %38
%40 = OpCompositeConstruct %v4int %33 %35 %37 %39
OpStore %inputRed %40
%42 = OpAccessChain %_ptr_Uniform_v4float %11 %int_1
%44 = OpLoad %v4float %42
%45 = OpCompositeExtract %float %44 0
%46 = OpConvertFToS %int %45
%47 = OpCompositeExtract %float %44 1
%48 = OpConvertFToS %int %47
%49 = OpCompositeExtract %float %44 2
%50 = OpConvertFToS %int %49
%51 = OpCompositeExtract %float %44 3
%52 = OpConvertFToS %int %51
%53 = OpCompositeConstruct %v4int %46 %48 %50 %52
OpStore %inputGreen %53
%55 = OpLoad %v4int %inputRed
%57 = OpCompositeConstruct %v4int %int_2 %int_2 %int_2 %int_2
%58 = OpIAdd %v4int %55 %57
OpStore %x %58
%60 = OpLoad %bool %ok
OpSelectionMerge %62 None
OpBranchConditional %60 %61 %62
%61 = OpLabel
%63 = OpLoad %v4int %x
%66 = OpIEqual %v4bool %63 %65
%68 = OpAll %bool %66
OpBranch %62
%62 = OpLabel
%69 = OpPhi %bool %false %20 %68 %61
OpStore %ok %69
%70 = OpLoad %v4int %inputGreen
%71 = OpVectorShuffle %v4int %70 %70 1 3 0 2
%72 = OpCompositeConstruct %v4int %int_2 %int_2 %int_2 %int_2
%73 = OpISub %v4int %71 %72
OpStore %x %73
%74 = OpLoad %bool %ok
OpSelectionMerge %76 None
OpBranchConditional %74 %75 %76
%75 = OpLabel
%77 = OpLoad %v4int %x
%81 = OpIEqual %v4bool %77 %80
%82 = OpAll %bool %81
OpBranch %76
%76 = OpLabel
%83 = OpPhi %bool %false %62 %82 %75
OpStore %ok %83
%84 = OpLoad %v4int %inputRed
%85 = OpLoad %v4int %inputGreen
%86 = OpCompositeExtract %int %85 1
%87 = OpCompositeConstruct %v4int %86 %86 %86 %86
%88 = OpIAdd %v4int %84 %87
OpStore %x %88
%89 = OpLoad %bool %ok
OpSelectionMerge %91 None
OpBranchConditional %89 %90 %91
%90 = OpLabel
%92 = OpLoad %v4int %x
%94 = OpIEqual %v4bool %92 %93
%95 = OpAll %bool %94
OpBranch %91
%91 = OpLabel
%96 = OpPhi %bool %false %76 %95 %90
OpStore %ok %96
%97 = OpLoad %v4int %inputGreen
%98 = OpVectorShuffle %v3int %97 %97 3 1 3
%101 = OpCompositeConstruct %v3int %int_9 %int_9 %int_9
%102 = OpIMul %v3int %98 %101
%103 = OpLoad %v4int %x
%104 = OpVectorShuffle %v4int %103 %102 4 5 6 3
OpStore %x %104
%105 = OpLoad %bool %ok
OpSelectionMerge %107 None
OpBranchConditional %105 %106 %107
%106 = OpLabel
%108 = OpLoad %v4int %x
%110 = OpIEqual %v4bool %108 %109
%111 = OpAll %bool %110
OpBranch %107
%107 = OpLabel
%112 = OpPhi %bool %false %91 %111 %106
OpStore %ok %112
%113 = OpLoad %v4int %x
%114 = OpVectorShuffle %v2int %113 %113 2 3
%116 = OpCompositeConstruct %v2int %int_3 %int_3
%117 = OpSDiv %v2int %114 %116
%118 = OpLoad %v4int %x
%119 = OpVectorShuffle %v4int %118 %117 4 5 2 3
OpStore %x %119
%120 = OpLoad %bool %ok
OpSelectionMerge %122 None
OpBranchConditional %120 %121 %122
%121 = OpLabel
%123 = OpLoad %v4int %x
%125 = OpIEqual %v4bool %123 %124
%126 = OpAll %bool %125
OpBranch %122
%122 = OpLabel
%127 = OpPhi %bool %false %107 %126 %121
OpStore %ok %127
%128 = OpLoad %v4int %inputRed
%130 = OpCompositeConstruct %v4int %int_5 %int_5 %int_5 %int_5
%131 = OpIMul %v4int %128 %130
%132 = OpVectorShuffle %v4int %131 %131 1 0 3 2
OpStore %x %132
%133 = OpLoad %bool %ok
OpSelectionMerge %135 None
OpBranchConditional %133 %134 %135
%134 = OpLabel
%136 = OpLoad %v4int %x
%138 = OpIEqual %v4bool %136 %137
%139 = OpAll %bool %138
OpBranch %135
%135 = OpLabel
%140 = OpPhi %bool %false %122 %139 %134
OpStore %ok %140
%141 = OpLoad %v4int %inputRed
%142 = OpCompositeConstruct %v4int %int_2 %int_2 %int_2 %int_2
%143 = OpIAdd %v4int %142 %141
OpStore %x %143
%144 = OpLoad %bool %ok
OpSelectionMerge %146 None
OpBranchConditional %144 %145 %146
%145 = OpLabel
%147 = OpLoad %v4int %x
%148 = OpIEqual %v4bool %147 %65
%149 = OpAll %bool %148
OpBranch %146
%146 = OpLabel
%150 = OpPhi %bool %false %135 %149 %145
OpStore %ok %150
%152 = OpLoad %v4int %inputGreen
%153 = OpVectorShuffle %v4int %152 %152 1 3 0 2
%154 = OpCompositeConstruct %v4int %int_10 %int_10 %int_10 %int_10
%155 = OpISub %v4int %154 %153
OpStore %x %155
%156 = OpLoad %bool %ok
OpSelectionMerge %158 None
OpBranchConditional %156 %157 %158
%157 = OpLabel
%159 = OpLoad %v4int %x
%161 = OpIEqual %v4bool %159 %160
%162 = OpAll %bool %161
OpBranch %158
%158 = OpLabel
%163 = OpPhi %bool %false %146 %162 %157
OpStore %ok %163
%164 = OpLoad %v4int %inputRed
%165 = OpCompositeExtract %int %164 0
%166 = OpLoad %v4int %inputGreen
%167 = OpCompositeConstruct %v4int %165 %165 %165 %165
%168 = OpIAdd %v4int %167 %166
OpStore %x %168
%169 = OpLoad %bool %ok
OpSelectionMerge %171 None
OpBranchConditional %169 %170 %171
%170 = OpLabel
%172 = OpLoad %v4int %x
%174 = OpIEqual %v4bool %172 %173
%175 = OpAll %bool %174
OpBranch %171
%171 = OpLabel
%176 = OpPhi %bool %false %158 %175 %170
OpStore %ok %176
%177 = OpLoad %v4int %inputGreen
%178 = OpVectorShuffle %v3int %177 %177 3 1 3
%179 = OpCompositeConstruct %v3int %int_9 %int_9 %int_9
%180 = OpIMul %v3int %179 %178
%181 = OpLoad %v4int %x
%182 = OpVectorShuffle %v4int %181 %180 4 5 6 3
OpStore %x %182
%183 = OpLoad %bool %ok
OpSelectionMerge %185 None
OpBranchConditional %183 %184 %185
%184 = OpLabel
%186 = OpLoad %v4int %x
%187 = OpIEqual %v4bool %186 %109
%188 = OpAll %bool %187
OpBranch %185
%185 = OpLabel
%189 = OpPhi %bool %false %171 %188 %184
OpStore %ok %189
%191 = OpLoad %v4int %x
%192 = OpVectorShuffle %v2int %191 %191 2 3
%193 = OpCompositeConstruct %v2int %int_36 %int_36
%194 = OpSDiv %v2int %193 %192
%195 = OpLoad %v4int %x
%196 = OpVectorShuffle %v4int %195 %194 4 5 2 3
OpStore %x %196
%197 = OpLoad %bool %ok
OpSelectionMerge %199 None
OpBranchConditional %197 %198 %199
%198 = OpLabel
%200 = OpLoad %v4int %x
%204 = OpIEqual %v4bool %200 %203
%205 = OpAll %bool %204
OpBranch %199
%199 = OpLabel
%206 = OpPhi %bool %false %185 %205 %198
OpStore %ok %206
%207 = OpLoad %v4int %x
%208 = OpCompositeConstruct %v4int %int_36 %int_36 %int_36 %int_36
%209 = OpSDiv %v4int %208 %207
%210 = OpVectorShuffle %v4int %209 %209 1 0 3 2
OpStore %x %210
%211 = OpLoad %bool %ok
OpSelectionMerge %213 None
OpBranchConditional %211 %212 %213
%212 = OpLabel
%214 = OpLoad %v4int %x
%216 = OpIEqual %v4bool %214 %215
%217 = OpAll %bool %216
OpBranch %213
%213 = OpLabel
%218 = OpPhi %bool %false %199 %217 %212
OpStore %ok %218
%219 = OpLoad %v4int %x
%220 = OpCompositeConstruct %v4int %int_2 %int_2 %int_2 %int_2
%221 = OpIAdd %v4int %219 %220
OpStore %x %221
%222 = OpLoad %v4int %x
%223 = OpCompositeConstruct %v4int %int_2 %int_2 %int_2 %int_2
%224 = OpIMul %v4int %222 %223
OpStore %x %224
%225 = OpLoad %v4int %x
%226 = OpCompositeConstruct %v4int %int_4 %int_4 %int_4 %int_4
%227 = OpISub %v4int %225 %226
OpStore %x %227
%228 = OpLoad %v4int %x
%229 = OpCompositeConstruct %v4int %int_2 %int_2 %int_2 %int_2
%230 = OpSDiv %v4int %228 %229
OpStore %x %230
%231 = OpLoad %bool %ok
OpSelectionMerge %233 None
OpBranchConditional %231 %232 %233
%232 = OpLabel
%234 = OpLoad %v4int %x
%235 = OpIEqual %v4bool %234 %215
%236 = OpAll %bool %235
OpBranch %233
%233 = OpLabel
%237 = OpPhi %bool %false %213 %236 %232
OpStore %ok %237
%238 = OpLoad %v4int %x
%239 = OpCompositeConstruct %v4int %int_2 %int_2 %int_2 %int_2
%240 = OpIAdd %v4int %238 %239
OpStore %x %240
%241 = OpLoad %v4int %x
%242 = OpCompositeConstruct %v4int %int_2 %int_2 %int_2 %int_2
%243 = OpIMul %v4int %241 %242
OpStore %x %243
%244 = OpLoad %v4int %x
%245 = OpCompositeConstruct %v4int %int_4 %int_4 %int_4 %int_4
%246 = OpISub %v4int %244 %245
OpStore %x %246
%247 = OpLoad %v4int %x
%248 = OpCompositeConstruct %v4int %int_2 %int_2 %int_2 %int_2
%249 = OpSDiv %v4int %247 %248
OpStore %x %249
%250 = OpLoad %bool %ok
OpSelectionMerge %252 None
OpBranchConditional %250 %251 %252
%251 = OpLabel
%253 = OpLoad %v4int %x
%254 = OpIEqual %v4bool %253 %215
%255 = OpAll %bool %254
OpBranch %252
%252 = OpLabel
%256 = OpPhi %bool %false %233 %255 %251
OpStore %ok %256
%257 = OpLoad %bool %ok
OpReturnValue %257
OpFunctionEnd
%main = OpFunction %v4float None %258
%259 = OpLabel
%_0_ok = OpVariable %_ptr_Function_bool Function
%_1_inputRed = OpVariable %_ptr_Function_v4float Function
%_2_inputGreen = OpVariable %_ptr_Function_v4float Function
%_3_x = OpVariable %_ptr_Function_v4float Function
%472 = OpVariable %_ptr_Function_v4float Function
OpStore %_0_ok %true
%263 = OpAccessChain %_ptr_Uniform_v4float %11 %int_0
%264 = OpLoad %v4float %263
OpStore %_1_inputRed %264
%266 = OpAccessChain %_ptr_Uniform_v4float %11 %int_1
%267 = OpLoad %v4float %266
OpStore %_2_inputGreen %267
%269 = OpLoad %v4float %_1_inputRed
%271 = OpCompositeConstruct %v4float %float_2 %float_2 %float_2 %float_2
%272 = OpFAdd %v4float %269 %271
OpStore %_3_x %272
%273 = OpLoad %bool %_0_ok
OpSelectionMerge %275 None
OpBranchConditional %273 %274 %275
%274 = OpLabel
%276 = OpLoad %v4float %_3_x
%279 = OpFOrdEqual %v4bool %276 %278
%280 = OpAll %bool %279
OpBranch %275
%275 = OpLabel
%281 = OpPhi %bool %false %259 %280 %274
OpStore %_0_ok %281
%282 = OpLoad %v4float %_2_inputGreen
%283 = OpVectorShuffle %v4float %282 %282 1 3 0 2
%284 = OpCompositeConstruct %v4float %float_2 %float_2 %float_2 %float_2
%285 = OpFSub %v4float %283 %284
OpStore %_3_x %285
%286 = OpLoad %bool %_0_ok
OpSelectionMerge %288 None
OpBranchConditional %286 %287 %288
%287 = OpLabel
%289 = OpLoad %v4float %_3_x
%293 = OpFOrdEqual %v4bool %289 %292
%294 = OpAll %bool %293
OpBranch %288
%288 = OpLabel
%295 = OpPhi %bool %false %275 %294 %287
OpStore %_0_ok %295
%296 = OpLoad %v4float %_1_inputRed
%297 = OpLoad %v4float %_2_inputGreen
%298 = OpCompositeExtract %float %297 1
%299 = OpCompositeConstruct %v4float %298 %298 %298 %298
%300 = OpFAdd %v4float %296 %299
OpStore %_3_x %300
%301 = OpLoad %bool %_0_ok
OpSelectionMerge %303 None
OpBranchConditional %301 %302 %303
%302 = OpLabel
%304 = OpLoad %v4float %_3_x
%307 = OpFOrdEqual %v4bool %304 %306
%308 = OpAll %bool %307
OpBranch %303
%303 = OpLabel
%309 = OpPhi %bool %false %288 %308 %302
OpStore %_0_ok %309
%310 = OpLoad %v4float %_2_inputGreen
%311 = OpVectorShuffle %v3float %310 %310 3 1 3
%314 = OpVectorTimesScalar %v3float %311 %float_9
%315 = OpLoad %v4float %_3_x
%316 = OpVectorShuffle %v4float %315 %314 4 5 6 3
OpStore %_3_x %316
%317 = OpLoad %bool %_0_ok
OpSelectionMerge %319 None
OpBranchConditional %317 %318 %319
%318 = OpLabel
%320 = OpLoad %v4float %_3_x
%322 = OpFOrdEqual %v4bool %320 %321
%323 = OpAll %bool %322
OpBranch %319
%319 = OpLabel
%324 = OpPhi %bool %false %303 %323 %318
OpStore %_0_ok %324
%325 = OpLoad %v4float %_3_x
%326 = OpVectorShuffle %v2float %325 %325 2 3
%329 = OpFDiv %float %float_1 %float_0_5
%330 = OpVectorTimesScalar %v2float %326 %329
%331 = OpLoad %v4float %_3_x
%332 = OpVectorShuffle %v4float %331 %330 4 5 2 3
OpStore %_3_x %332
%333 = OpLoad %bool %_0_ok
OpSelectionMerge %335 None
OpBranchConditional %333 %334 %335
%334 = OpLabel
%336 = OpLoad %v4float %_3_x
%340 = OpFOrdEqual %v4bool %336 %339
%341 = OpAll %bool %340
OpBranch %335
%335 = OpLabel
%342 = OpPhi %bool %false %319 %341 %334
OpStore %_0_ok %342
%343 = OpLoad %v4float %_1_inputRed
%345 = OpVectorTimesScalar %v4float %343 %float_5
%346 = OpVectorShuffle %v4float %345 %345 1 0 3 2
OpStore %_3_x %346
%347 = OpLoad %bool %_0_ok
OpSelectionMerge %349 None
OpBranchConditional %347 %348 %349
%348 = OpLabel
%350 = OpLoad %v4float %_3_x
%353 = OpFOrdEqual %v4bool %350 %352
%354 = OpAll %bool %353
OpBranch %349
%349 = OpLabel
%355 = OpPhi %bool %false %335 %354 %348
OpStore %_0_ok %355
%356 = OpLoad %v4float %_1_inputRed
%357 = OpCompositeConstruct %v4float %float_2 %float_2 %float_2 %float_2
%358 = OpFAdd %v4float %357 %356
OpStore %_3_x %358
%359 = OpLoad %bool %_0_ok
OpSelectionMerge %361 None
OpBranchConditional %359 %360 %361
%360 = OpLabel
%362 = OpLoad %v4float %_3_x
%363 = OpFOrdEqual %v4bool %362 %278
%364 = OpAll %bool %363
OpBranch %361
%361 = OpLabel
%365 = OpPhi %bool %false %349 %364 %360
OpStore %_0_ok %365
%367 = OpLoad %v4float %_2_inputGreen
%368 = OpVectorShuffle %v4float %367 %367 1 3 0 2
%369 = OpCompositeConstruct %v4float %float_10 %float_10 %float_10 %float_10
%370 = OpFSub %v4float %369 %368
OpStore %_3_x %370
%371 = OpLoad %bool %_0_ok
OpSelectionMerge %373 None
OpBranchConditional %371 %372 %373
%372 = OpLabel
%374 = OpLoad %v4float %_3_x
%376 = OpFOrdEqual %v4bool %374 %375
%377 = OpAll %bool %376
OpBranch %373
%373 = OpLabel
%378 = OpPhi %bool %false %361 %377 %372
OpStore %_0_ok %378
%379 = OpLoad %v4float %_1_inputRed
%380 = OpCompositeExtract %float %379 0
%381 = OpLoad %v4float %_2_inputGreen
%382 = OpCompositeConstruct %v4float %380 %380 %380 %380
%383 = OpFAdd %v4float %382 %381
OpStore %_3_x %383
%384 = OpLoad %bool %_0_ok
OpSelectionMerge %386 None
OpBranchConditional %384 %385 %386
%385 = OpLabel
%387 = OpLoad %v4float %_3_x
%389 = OpFOrdEqual %v4bool %387 %388
%390 = OpAll %bool %389
OpBranch %386
%386 = OpLabel
%391 = OpPhi %bool %false %373 %390 %385
OpStore %_0_ok %391
%392 = OpLoad %v4float %_2_inputGreen
%393 = OpVectorShuffle %v3float %392 %392 3 1 3
%394 = OpVectorTimesScalar %v3float %393 %float_9
%395 = OpLoad %v4float %_3_x
%396 = OpVectorShuffle %v4float %395 %394 4 5 6 3
OpStore %_3_x %396
%397 = OpLoad %bool %_0_ok
OpSelectionMerge %399 None
OpBranchConditional %397 %398 %399
%398 = OpLabel
%400 = OpLoad %v4float %_3_x
%401 = OpFOrdEqual %v4bool %400 %321
%402 = OpAll %bool %401
OpBranch %399
%399 = OpLabel
%403 = OpPhi %bool %false %386 %402 %398
OpStore %_0_ok %403
%405 = OpLoad %v4float %_3_x
%406 = OpVectorShuffle %v2float %405 %405 2 3
%407 = OpCompositeConstruct %v2float %float_36 %float_36
%408 = OpFDiv %v2float %407 %406
%409 = OpLoad %v4float %_3_x
%410 = OpVectorShuffle %v4float %409 %408 4 5 2 3
OpStore %_3_x %410
%411 = OpLoad %bool %_0_ok
OpSelectionMerge %413 None
OpBranchConditional %411 %412 %413
%412 = OpLabel
%414 = OpLoad %v4float %_3_x
%416 = OpFOrdEqual %v4bool %414 %415
%417 = OpAll %bool %416
OpBranch %413
%413 = OpLabel
%418 = OpPhi %bool %false %399 %417 %412
OpStore %_0_ok %418
%419 = OpLoad %v4float %_3_x
%420 = OpCompositeConstruct %v4float %float_36 %float_36 %float_36 %float_36
%421 = OpFDiv %v4float %420 %419
%422 = OpVectorShuffle %v4float %421 %421 1 0 3 2
OpStore %_3_x %422
%423 = OpLoad %bool %_0_ok
OpSelectionMerge %425 None
OpBranchConditional %423 %424 %425
%424 = OpLabel
%426 = OpLoad %v4float %_3_x
%428 = OpFOrdEqual %v4bool %426 %427
%429 = OpAll %bool %428
OpBranch %425
%425 = OpLabel
%430 = OpPhi %bool %false %413 %429 %424
OpStore %_0_ok %430
%431 = OpLoad %v4float %_3_x
%432 = OpCompositeConstruct %v4float %float_2 %float_2 %float_2 %float_2
%433 = OpFAdd %v4float %431 %432
OpStore %_3_x %433
%434 = OpLoad %v4float %_3_x
%435 = OpVectorTimesScalar %v4float %434 %float_2
OpStore %_3_x %435
%436 = OpLoad %v4float %_3_x
%437 = OpCompositeConstruct %v4float %float_4 %float_4 %float_4 %float_4
%438 = OpFSub %v4float %436 %437
OpStore %_3_x %438
%439 = OpLoad %v4float %_3_x
%440 = OpFDiv %float %float_1 %float_2
%441 = OpVectorTimesScalar %v4float %439 %440
OpStore %_3_x %441
%442 = OpLoad %bool %_0_ok
OpSelectionMerge %444 None
OpBranchConditional %442 %443 %444
%443 = OpLabel
%445 = OpLoad %v4float %_3_x
%446 = OpFOrdEqual %v4bool %445 %427
%447 = OpAll %bool %446
OpBranch %444
%444 = OpLabel
%448 = OpPhi %bool %false %425 %447 %443
OpStore %_0_ok %448
%449 = OpLoad %v4float %_3_x
%450 = OpCompositeConstruct %v4float %float_2 %float_2 %float_2 %float_2
%451 = OpFAdd %v4float %449 %450
OpStore %_3_x %451
%452 = OpLoad %v4float %_3_x
%453 = OpVectorTimesScalar %v4float %452 %float_2
OpStore %_3_x %453
%454 = OpLoad %v4float %_3_x
%455 = OpCompositeConstruct %v4float %float_4 %float_4 %float_4 %float_4
%456 = OpFSub %v4float %454 %455
OpStore %_3_x %456
%457 = OpLoad %v4float %_3_x
%458 = OpFDiv %float %float_1 %float_2
%459 = OpVectorTimesScalar %v4float %457 %458
OpStore %_3_x %459
%460 = OpLoad %bool %_0_ok
OpSelectionMerge %462 None
OpBranchConditional %460 %461 %462
%461 = OpLabel
%463 = OpLoad %v4float %_3_x
%464 = OpFOrdEqual %v4bool %463 %427
%465 = OpAll %bool %464
OpBranch %462
%462 = OpLabel
%466 = OpPhi %bool %false %444 %465 %461
OpStore %_0_ok %466
%467 = OpLoad %bool %_0_ok
OpSelectionMerge %469 None
OpBranchConditional %467 %468 %469
%468 = OpLabel
%470 = OpFunctionCall %bool %test_int_b
OpBranch %469
%469 = OpLabel
%471 = OpPhi %bool %false %462 %470 %468
OpSelectionMerge %475 None
OpBranchConditional %471 %473 %474
%473 = OpLabel
%476 = OpAccessChain %_ptr_Uniform_v4float %11 %int_1
%477 = OpLoad %v4float %476
OpStore %472 %477
OpBranch %475
%474 = OpLabel
%478 = OpAccessChain %_ptr_Uniform_v4float %11 %int_0
%479 = OpLoad %v4float %478
OpStore %472 %479
OpBranch %475
%475 = OpLabel
%480 = OpLoad %v4float %472
OpReturnValue %480
OpFunctionEnd