skia2/tests/sksl/shared/VectorScalarMath.asm.frag
Iliyan Dinev f65a8fa59e Fix UnitTest_SkSLVectorScalarMath_GPU FP16 precision-issue
Bug: skia:13420
Change-Id: I4b99a5d75e9fa4ce87b3f0bcb1210d2ec47ae112
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/548996
Commit-Queue: Brian Osman <brianosman@google.com>
Reviewed-by: Brian Osman <brianosman@google.com>
2022-06-10 17:20:59 +00:00

637 lines
20 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 %36 RelaxedPrecision
OpDecorate %37 RelaxedPrecision
OpDecorate %39 RelaxedPrecision
OpDecorate %41 RelaxedPrecision
OpDecorate %43 RelaxedPrecision
OpDecorate %49 RelaxedPrecision
OpDecorate %50 RelaxedPrecision
OpDecorate %52 RelaxedPrecision
OpDecorate %54 RelaxedPrecision
OpDecorate %56 RelaxedPrecision
OpDecorate %_1_inputRed RelaxedPrecision
OpDecorate %209 RelaxedPrecision
OpDecorate %_2_inputGreen RelaxedPrecision
OpDecorate %212 RelaxedPrecision
OpDecorate %_3_x RelaxedPrecision
OpDecorate %216 RelaxedPrecision
OpDecorate %224 RelaxedPrecision
OpDecorate %225 RelaxedPrecision
OpDecorate %234 RelaxedPrecision
OpDecorate %235 RelaxedPrecision
OpDecorate %236 RelaxedPrecision
OpDecorate %244 RelaxedPrecision
OpDecorate %247 RelaxedPrecision
OpDecorate %248 RelaxedPrecision
OpDecorate %249 RelaxedPrecision
OpDecorate %256 RelaxedPrecision
OpDecorate %257 RelaxedPrecision
OpDecorate %258 RelaxedPrecision
OpDecorate %259 RelaxedPrecision
OpDecorate %269 RelaxedPrecision
OpDecorate %270 RelaxedPrecision
OpDecorate %277 RelaxedPrecision
OpDecorate %284 RelaxedPrecision
OpDecorate %286 RelaxedPrecision
OpDecorate %293 RelaxedPrecision
OpDecorate %294 RelaxedPrecision
OpDecorate %295 RelaxedPrecision
OpDecorate %303 RelaxedPrecision
OpDecorate %304 RelaxedPrecision
OpDecorate %305 RelaxedPrecision
OpDecorate %306 RelaxedPrecision
OpDecorate %314 RelaxedPrecision
OpDecorate %316 RelaxedPrecision
OpDecorate %317 RelaxedPrecision
OpDecorate %318 RelaxedPrecision
OpDecorate %327 RelaxedPrecision
OpDecorate %328 RelaxedPrecision
OpDecorate %335 RelaxedPrecision
OpDecorate %336 RelaxedPrecision
OpDecorate %338 RelaxedPrecision
OpDecorate %339 RelaxedPrecision
OpDecorate %340 RelaxedPrecision
OpDecorate %346 RelaxedPrecision
OpDecorate %347 RelaxedPrecision
OpDecorate %348 RelaxedPrecision
OpDecorate %350 RelaxedPrecision
OpDecorate %365 RelaxedPrecision
OpDecorate %367 RelaxedPrecision
OpDecorate %368 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
%float_0 = OpConstant %float 0
%v2float = OpTypeVector %float 2
%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
%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
%61 = OpConstantComposite %v4int %int_2 %int_2 %int_2 %int_2
%false = OpConstantFalse %bool
%int_3 = OpConstant %int 3
%67 = OpConstantComposite %v4int %int_3 %int_2 %int_2 %int_3
%v4bool = OpTypeVector %bool 4
%int_n1 = OpConstant %int -1
%int_n2 = OpConstant %int -2
%78 = OpConstantComposite %v4int %int_n1 %int_n1 %int_n2 %int_n2
%87 = OpConstantComposite %v4int %int_2 %int_1 %int_1 %int_2
%v3int = OpTypeVector %int 3
%int_9 = OpConstant %int 9
%94 = OpConstantComposite %v3int %int_9 %int_9 %int_9
%100 = OpConstantComposite %v4int %int_9 %int_9 %int_9 %int_2
%v2int = OpTypeVector %int 2
%106 = OpConstantComposite %v2int %int_3 %int_3
%112 = OpConstantComposite %v4int %int_3 %int_0 %int_9 %int_2
%int_5 = OpConstant %int 5
%117 = OpConstantComposite %v4int %int_5 %int_5 %int_5 %int_5
%122 = OpConstantComposite %v4int %int_0 %int_5 %int_5 %int_0
%int_10 = OpConstant %int 10
%134 = OpConstantComposite %v4int %int_10 %int_10 %int_10 %int_10
%138 = OpConstantComposite %v4int %int_9 %int_9 %int_10 %int_10
%147 = OpConstantComposite %v4int %int_1 %int_2 %int_1 %int_2
%int_36 = OpConstant %int 36
%162 = OpConstantComposite %v2int %int_36 %int_36
%int_4 = OpConstant %int 4
%int_18 = OpConstant %int 18
%170 = OpConstantComposite %v4int %int_4 %int_18 %int_9 %int_2
%174 = OpConstantComposite %v4int %int_36 %int_36 %int_36 %int_36
%179 = OpConstantComposite %v4int %int_2 %int_9 %int_18 %int_4
%185 = OpConstantComposite %v4int %int_4 %int_4 %int_4 %int_4
%202 = OpTypeFunction %v4float %_ptr_Function_v2float
%_ptr_Function_v4float = OpTypePointer Function %v4float
%float_2 = OpConstant %float 2
%215 = OpConstantComposite %v4float %float_2 %float_2 %float_2 %float_2
%float_3 = OpConstant %float 3
%220 = OpConstantComposite %v4float %float_3 %float_2 %float_2 %float_3
%float_n1 = OpConstant %float -1
%float_n2 = OpConstant %float -2
%230 = OpConstantComposite %v4float %float_n1 %float_n1 %float_n2 %float_n2
%float_1 = OpConstant %float 1
%240 = OpConstantComposite %v4float %float_2 %float_1 %float_1 %float_2
%v3float = OpTypeVector %float 3
%float_9 = OpConstant %float 9
%252 = OpConstantComposite %v4float %float_9 %float_9 %float_9 %float_2
%float_18 = OpConstant %float 18
%float_4 = OpConstant %float 4
%264 = OpConstantComposite %v4float %float_18 %float_4 %float_9 %float_2
%float_5 = OpConstant %float 5
%273 = OpConstantComposite %v4float %float_0 %float_5 %float_5 %float_0
%float_10 = OpConstant %float 10
%285 = OpConstantComposite %v4float %float_10 %float_10 %float_10 %float_10
%289 = OpConstantComposite %v4float %float_9 %float_9 %float_10 %float_10
%298 = OpConstantComposite %v4float %float_1 %float_2 %float_1 %float_2
%float_8 = OpConstant %float 8
%309 = OpConstantComposite %v4float %float_8 %float_8 %float_8 %float_2
%float_32 = OpConstant %float 32
%315 = OpConstantComposite %v2float %float_32 %float_32
%float_16 = OpConstant %float 16
%322 = OpConstantComposite %v4float %float_4 %float_16 %float_8 %float_2
%326 = OpConstantComposite %v4float %float_32 %float_32 %float_32 %float_32
%331 = OpConstantComposite %v4float %float_2 %float_8 %float_16 %float_4
%337 = OpConstantComposite %v4float %float_4 %float_4 %float_4 %float_4
%float_0_5 = OpConstant %float 0.5
%_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_int_b = OpFunction %bool None %24
%25 = 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
%33 = OpAccessChain %_ptr_Uniform_v4float %11 %int_0
%36 = OpLoad %v4float %33
%37 = OpCompositeExtract %float %36 0
%38 = OpConvertFToS %int %37
%39 = OpCompositeExtract %float %36 1
%40 = OpConvertFToS %int %39
%41 = OpCompositeExtract %float %36 2
%42 = OpConvertFToS %int %41
%43 = OpCompositeExtract %float %36 3
%44 = OpConvertFToS %int %43
%45 = OpCompositeConstruct %v4int %38 %40 %42 %44
OpStore %inputRed %45
%47 = OpAccessChain %_ptr_Uniform_v4float %11 %int_1
%49 = OpLoad %v4float %47
%50 = OpCompositeExtract %float %49 0
%51 = OpConvertFToS %int %50
%52 = OpCompositeExtract %float %49 1
%53 = OpConvertFToS %int %52
%54 = OpCompositeExtract %float %49 2
%55 = OpConvertFToS %int %54
%56 = OpCompositeExtract %float %49 3
%57 = OpConvertFToS %int %56
%58 = OpCompositeConstruct %v4int %51 %53 %55 %57
OpStore %inputGreen %58
%62 = OpIAdd %v4int %45 %61
OpStore %x %62
OpSelectionMerge %65 None
OpBranchConditional %true %64 %65
%64 = OpLabel
%68 = OpIEqual %v4bool %62 %67
%70 = OpAll %bool %68
OpBranch %65
%65 = OpLabel
%71 = OpPhi %bool %false %25 %70 %64
OpStore %ok %71
%72 = OpVectorShuffle %v4int %58 %58 1 3 0 2
%73 = OpISub %v4int %72 %61
OpStore %x %73
OpSelectionMerge %75 None
OpBranchConditional %71 %74 %75
%74 = OpLabel
%79 = OpIEqual %v4bool %73 %78
%80 = OpAll %bool %79
OpBranch %75
%75 = OpLabel
%81 = OpPhi %bool %false %65 %80 %74
OpStore %ok %81
%82 = OpCompositeExtract %int %58 1
%83 = OpCompositeConstruct %v4int %82 %82 %82 %82
%84 = OpIAdd %v4int %45 %83
OpStore %x %84
OpSelectionMerge %86 None
OpBranchConditional %81 %85 %86
%85 = OpLabel
%88 = OpIEqual %v4bool %84 %87
%89 = OpAll %bool %88
OpBranch %86
%86 = OpLabel
%90 = OpPhi %bool %false %75 %89 %85
OpStore %ok %90
%91 = OpVectorShuffle %v3int %58 %58 3 1 3
%95 = OpIMul %v3int %91 %94
%96 = OpLoad %v4int %x
%97 = OpVectorShuffle %v4int %96 %95 4 5 6 3
OpStore %x %97
OpSelectionMerge %99 None
OpBranchConditional %90 %98 %99
%98 = OpLabel
%101 = OpIEqual %v4bool %97 %100
%102 = OpAll %bool %101
OpBranch %99
%99 = OpLabel
%103 = OpPhi %bool %false %86 %102 %98
OpStore %ok %103
%104 = OpVectorShuffle %v2int %97 %97 2 3
%107 = OpSDiv %v2int %104 %106
%108 = OpLoad %v4int %x
%109 = OpVectorShuffle %v4int %108 %107 4 5 2 3
OpStore %x %109
OpSelectionMerge %111 None
OpBranchConditional %103 %110 %111
%110 = OpLabel
%113 = OpIEqual %v4bool %109 %112
%114 = OpAll %bool %113
OpBranch %111
%111 = OpLabel
%115 = OpPhi %bool %false %99 %114 %110
OpStore %ok %115
%118 = OpIMul %v4int %45 %117
%119 = OpVectorShuffle %v4int %118 %118 1 0 3 2
OpStore %x %119
OpSelectionMerge %121 None
OpBranchConditional %115 %120 %121
%120 = OpLabel
%123 = OpIEqual %v4bool %119 %122
%124 = OpAll %bool %123
OpBranch %121
%121 = OpLabel
%125 = OpPhi %bool %false %111 %124 %120
OpStore %ok %125
%126 = OpIAdd %v4int %61 %45
OpStore %x %126
OpSelectionMerge %128 None
OpBranchConditional %125 %127 %128
%127 = OpLabel
%129 = OpIEqual %v4bool %126 %67
%130 = OpAll %bool %129
OpBranch %128
%128 = OpLabel
%131 = OpPhi %bool %false %121 %130 %127
OpStore %ok %131
%133 = OpVectorShuffle %v4int %58 %58 1 3 0 2
%135 = OpISub %v4int %134 %133
OpStore %x %135
OpSelectionMerge %137 None
OpBranchConditional %131 %136 %137
%136 = OpLabel
%139 = OpIEqual %v4bool %135 %138
%140 = OpAll %bool %139
OpBranch %137
%137 = OpLabel
%141 = OpPhi %bool %false %128 %140 %136
OpStore %ok %141
%142 = OpCompositeExtract %int %45 0
%143 = OpCompositeConstruct %v4int %142 %142 %142 %142
%144 = OpIAdd %v4int %143 %58
OpStore %x %144
OpSelectionMerge %146 None
OpBranchConditional %141 %145 %146
%145 = OpLabel
%148 = OpIEqual %v4bool %144 %147
%149 = OpAll %bool %148
OpBranch %146
%146 = OpLabel
%150 = OpPhi %bool %false %137 %149 %145
OpStore %ok %150
%151 = OpVectorShuffle %v3int %58 %58 3 1 3
%152 = OpIMul %v3int %94 %151
%153 = OpLoad %v4int %x
%154 = OpVectorShuffle %v4int %153 %152 4 5 6 3
OpStore %x %154
OpSelectionMerge %156 None
OpBranchConditional %150 %155 %156
%155 = OpLabel
%157 = OpIEqual %v4bool %154 %100
%158 = OpAll %bool %157
OpBranch %156
%156 = OpLabel
%159 = OpPhi %bool %false %146 %158 %155
OpStore %ok %159
%161 = OpVectorShuffle %v2int %154 %154 2 3
%163 = OpSDiv %v2int %162 %161
%164 = OpLoad %v4int %x
%165 = OpVectorShuffle %v4int %164 %163 4 5 2 3
OpStore %x %165
OpSelectionMerge %167 None
OpBranchConditional %159 %166 %167
%166 = OpLabel
%171 = OpIEqual %v4bool %165 %170
%172 = OpAll %bool %171
OpBranch %167
%167 = OpLabel
%173 = OpPhi %bool %false %156 %172 %166
OpStore %ok %173
%175 = OpSDiv %v4int %174 %165
%176 = OpVectorShuffle %v4int %175 %175 1 0 3 2
OpStore %x %176
OpSelectionMerge %178 None
OpBranchConditional %173 %177 %178
%177 = OpLabel
%180 = OpIEqual %v4bool %176 %179
%181 = OpAll %bool %180
OpBranch %178
%178 = OpLabel
%182 = OpPhi %bool %false %167 %181 %177
OpStore %ok %182
%183 = OpIAdd %v4int %176 %61
OpStore %x %183
%184 = OpIMul %v4int %183 %61
OpStore %x %184
%186 = OpISub %v4int %184 %185
OpStore %x %186
%187 = OpSDiv %v4int %186 %61
OpStore %x %187
OpSelectionMerge %189 None
OpBranchConditional %182 %188 %189
%188 = OpLabel
%190 = OpIEqual %v4bool %187 %179
%191 = OpAll %bool %190
OpBranch %189
%189 = OpLabel
%192 = OpPhi %bool %false %178 %191 %188
OpStore %ok %192
%193 = OpIAdd %v4int %187 %61
OpStore %x %193
%194 = OpIMul %v4int %193 %61
OpStore %x %194
%195 = OpISub %v4int %194 %185
OpStore %x %195
%196 = OpSDiv %v4int %195 %61
OpStore %x %196
OpSelectionMerge %198 None
OpBranchConditional %192 %197 %198
%197 = OpLabel
%199 = OpIEqual %v4bool %196 %179
%200 = OpAll %bool %199
OpBranch %198
%198 = OpLabel
%201 = OpPhi %bool %false %189 %200 %197
OpStore %ok %201
OpReturnValue %201
OpFunctionEnd
%main = OpFunction %v4float None %202
%203 = OpFunctionParameter %_ptr_Function_v2float
%204 = 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
%360 = OpVariable %_ptr_Function_v4float Function
OpStore %_0_ok %true
%208 = OpAccessChain %_ptr_Uniform_v4float %11 %int_0
%209 = OpLoad %v4float %208
OpStore %_1_inputRed %209
%211 = OpAccessChain %_ptr_Uniform_v4float %11 %int_1
%212 = OpLoad %v4float %211
OpStore %_2_inputGreen %212
%216 = OpFAdd %v4float %209 %215
OpStore %_3_x %216
OpSelectionMerge %218 None
OpBranchConditional %true %217 %218
%217 = OpLabel
%221 = OpFOrdEqual %v4bool %216 %220
%222 = OpAll %bool %221
OpBranch %218
%218 = OpLabel
%223 = OpPhi %bool %false %204 %222 %217
OpStore %_0_ok %223
%224 = OpVectorShuffle %v4float %212 %212 1 3 0 2
%225 = OpFSub %v4float %224 %215
OpStore %_3_x %225
OpSelectionMerge %227 None
OpBranchConditional %223 %226 %227
%226 = OpLabel
%231 = OpFOrdEqual %v4bool %225 %230
%232 = OpAll %bool %231
OpBranch %227
%227 = OpLabel
%233 = OpPhi %bool %false %218 %232 %226
OpStore %_0_ok %233
%234 = OpCompositeExtract %float %212 1
%235 = OpCompositeConstruct %v4float %234 %234 %234 %234
%236 = OpFAdd %v4float %209 %235
OpStore %_3_x %236
OpSelectionMerge %238 None
OpBranchConditional %233 %237 %238
%237 = OpLabel
%241 = OpFOrdEqual %v4bool %236 %240
%242 = OpAll %bool %241
OpBranch %238
%238 = OpLabel
%243 = OpPhi %bool %false %227 %242 %237
OpStore %_0_ok %243
%244 = OpVectorShuffle %v3float %212 %212 3 1 3
%247 = OpVectorTimesScalar %v3float %244 %float_9
%248 = OpLoad %v4float %_3_x
%249 = OpVectorShuffle %v4float %248 %247 4 5 6 3
OpStore %_3_x %249
OpSelectionMerge %251 None
OpBranchConditional %243 %250 %251
%250 = OpLabel
%253 = OpFOrdEqual %v4bool %249 %252
%254 = OpAll %bool %253
OpBranch %251
%251 = OpLabel
%255 = OpPhi %bool %false %238 %254 %250
OpStore %_0_ok %255
%256 = OpVectorShuffle %v2float %249 %249 2 3
%257 = OpVectorTimesScalar %v2float %256 %float_2
%258 = OpLoad %v4float %_3_x
%259 = OpVectorShuffle %v4float %258 %257 4 5 2 3
OpStore %_3_x %259
OpSelectionMerge %261 None
OpBranchConditional %255 %260 %261
%260 = OpLabel
%265 = OpFOrdEqual %v4bool %259 %264
%266 = OpAll %bool %265
OpBranch %261
%261 = OpLabel
%267 = OpPhi %bool %false %251 %266 %260
OpStore %_0_ok %267
%269 = OpVectorTimesScalar %v4float %209 %float_5
%270 = OpVectorShuffle %v4float %269 %269 1 0 3 2
OpStore %_3_x %270
OpSelectionMerge %272 None
OpBranchConditional %267 %271 %272
%271 = OpLabel
%274 = OpFOrdEqual %v4bool %270 %273
%275 = OpAll %bool %274
OpBranch %272
%272 = OpLabel
%276 = OpPhi %bool %false %261 %275 %271
OpStore %_0_ok %276
%277 = OpFAdd %v4float %215 %209
OpStore %_3_x %277
OpSelectionMerge %279 None
OpBranchConditional %276 %278 %279
%278 = OpLabel
%280 = OpFOrdEqual %v4bool %277 %220
%281 = OpAll %bool %280
OpBranch %279
%279 = OpLabel
%282 = OpPhi %bool %false %272 %281 %278
OpStore %_0_ok %282
%284 = OpVectorShuffle %v4float %212 %212 1 3 0 2
%286 = OpFSub %v4float %285 %284
OpStore %_3_x %286
OpSelectionMerge %288 None
OpBranchConditional %282 %287 %288
%287 = OpLabel
%290 = OpFOrdEqual %v4bool %286 %289
%291 = OpAll %bool %290
OpBranch %288
%288 = OpLabel
%292 = OpPhi %bool %false %279 %291 %287
OpStore %_0_ok %292
%293 = OpCompositeExtract %float %209 0
%294 = OpCompositeConstruct %v4float %293 %293 %293 %293
%295 = OpFAdd %v4float %294 %212
OpStore %_3_x %295
OpSelectionMerge %297 None
OpBranchConditional %292 %296 %297
%296 = OpLabel
%299 = OpFOrdEqual %v4bool %295 %298
%300 = OpAll %bool %299
OpBranch %297
%297 = OpLabel
%301 = OpPhi %bool %false %288 %300 %296
OpStore %_0_ok %301
%303 = OpVectorShuffle %v3float %212 %212 3 1 3
%304 = OpVectorTimesScalar %v3float %303 %float_8
%305 = OpLoad %v4float %_3_x
%306 = OpVectorShuffle %v4float %305 %304 4 5 6 3
OpStore %_3_x %306
OpSelectionMerge %308 None
OpBranchConditional %301 %307 %308
%307 = OpLabel
%310 = OpFOrdEqual %v4bool %306 %309
%311 = OpAll %bool %310
OpBranch %308
%308 = OpLabel
%312 = OpPhi %bool %false %297 %311 %307
OpStore %_0_ok %312
%314 = OpVectorShuffle %v2float %306 %306 2 3
%316 = OpFDiv %v2float %315 %314
%317 = OpLoad %v4float %_3_x
%318 = OpVectorShuffle %v4float %317 %316 4 5 2 3
OpStore %_3_x %318
OpSelectionMerge %320 None
OpBranchConditional %312 %319 %320
%319 = OpLabel
%323 = OpFOrdEqual %v4bool %318 %322
%324 = OpAll %bool %323
OpBranch %320
%320 = OpLabel
%325 = OpPhi %bool %false %308 %324 %319
OpStore %_0_ok %325
%327 = OpFDiv %v4float %326 %318
%328 = OpVectorShuffle %v4float %327 %327 1 0 3 2
OpStore %_3_x %328
OpSelectionMerge %330 None
OpBranchConditional %325 %329 %330
%329 = OpLabel
%332 = OpFOrdEqual %v4bool %328 %331
%333 = OpAll %bool %332
OpBranch %330
%330 = OpLabel
%334 = OpPhi %bool %false %320 %333 %329
OpStore %_0_ok %334
%335 = OpFAdd %v4float %328 %215
OpStore %_3_x %335
%336 = OpVectorTimesScalar %v4float %335 %float_2
OpStore %_3_x %336
%338 = OpFSub %v4float %336 %337
OpStore %_3_x %338
%339 = OpFDiv %float %float_1 %float_2
%340 = OpVectorTimesScalar %v4float %338 %339
OpStore %_3_x %340
OpSelectionMerge %342 None
OpBranchConditional %334 %341 %342
%341 = OpLabel
%343 = OpFOrdEqual %v4bool %340 %331
%344 = OpAll %bool %343
OpBranch %342
%342 = OpLabel
%345 = OpPhi %bool %false %330 %344 %341
OpStore %_0_ok %345
%346 = OpFAdd %v4float %340 %215
OpStore %_3_x %346
%347 = OpVectorTimesScalar %v4float %346 %float_2
OpStore %_3_x %347
%348 = OpFSub %v4float %347 %337
OpStore %_3_x %348
%350 = OpVectorTimesScalar %v4float %348 %float_0_5
OpStore %_3_x %350
OpSelectionMerge %352 None
OpBranchConditional %345 %351 %352
%351 = OpLabel
%353 = OpFOrdEqual %v4bool %350 %331
%354 = OpAll %bool %353
OpBranch %352
%352 = OpLabel
%355 = OpPhi %bool %false %342 %354 %351
OpStore %_0_ok %355
OpSelectionMerge %357 None
OpBranchConditional %355 %356 %357
%356 = OpLabel
%358 = OpFunctionCall %bool %test_int_b
OpBranch %357
%357 = OpLabel
%359 = OpPhi %bool %false %352 %358 %356
OpSelectionMerge %363 None
OpBranchConditional %359 %361 %362
%361 = OpLabel
%364 = OpAccessChain %_ptr_Uniform_v4float %11 %int_1
%365 = OpLoad %v4float %364
OpStore %360 %365
OpBranch %363
%362 = OpLabel
%366 = OpAccessChain %_ptr_Uniform_v4float %11 %int_0
%367 = OpLoad %v4float %366
OpStore %360 %367
OpBranch %363
%363 = OpLabel
%368 = OpLoad %v4float %360
OpReturnValue %368
OpFunctionEnd