blob: a2c10185f08d3589465eefc2ab728d601c4e4f3d [file] [log] [blame]
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
; Bound: 372
; Schema: 0
OpCapability Shader
OpMemoryModel Logical GLSL450
OpEntryPoint GLCompute %main "main" %tint_symbol_2 %tint_symbol %tint_symbol_1
OpExecutionMode %main LocalSize 16 16 1
OpName %Matrix "Matrix"
OpMemberName %Matrix 0 "numbers"
OpName %firstMatrix "firstMatrix"
OpName %secondMatrix "secondMatrix"
OpName %resultMatrix "resultMatrix"
OpName %Uniforms "Uniforms"
OpMemberName %Uniforms 0 "dimAOuter"
OpMemberName %Uniforms 1 "dimInner"
OpMemberName %Uniforms 2 "dimBOuter"
OpName %uniforms "uniforms"
OpName %RowPerThread "RowPerThread"
OpName %RowPerThread "ColPerThread"
OpName %TileAOuter "TileAOuter"
OpName %TileAOuter "TileBOuter"
OpName %TileAOuter "TileInner"
OpName %mm_Asub "mm_Asub"
OpName %mm_Bsub "mm_Bsub"
OpName %tint_symbol "tint_symbol"
OpName %tint_symbol_1 "tint_symbol_1"
OpName %tint_symbol_2 "tint_symbol_2"
OpName %mm_readA "mm_readA"
OpName %row "row"
OpName %col "col"
OpName %mm_readB "mm_readB"
OpName %row_0 "row"
OpName %col_0 "col"
OpName %mm_write "mm_write"
OpName %row_1 "row"
OpName %col_1 "col"
OpName %value "value"
OpName %main "main"
OpName %idx "idx"
OpName %acc "acc"
OpName %ACached "ACached"
OpName %BCached "BCached"
OpName %index "index"
OpName %t "t"
OpName %innerRow "innerRow"
OpName %innerCol "innerCol"
OpName %innerRow_0 "innerRow"
OpName %innerCol_0 "innerCol"
OpName %k "k"
OpName %inner "inner"
OpName %innerRow_1 "innerRow"
OpName %innerCol_1 "innerCol"
OpName %innerRow_2 "innerRow"
OpName %innerCol_2 "innerCol"
OpDecorate %Matrix Block
OpMemberDecorate %Matrix 0 Offset 0
OpDecorate %_runtimearr_float ArrayStride 4
OpDecorate %firstMatrix NonWritable
OpDecorate %firstMatrix DescriptorSet 0
OpDecorate %firstMatrix Binding 0
OpDecorate %secondMatrix NonWritable
OpDecorate %secondMatrix DescriptorSet 0
OpDecorate %secondMatrix Binding 1
OpDecorate %resultMatrix NonReadable
OpDecorate %resultMatrix DescriptorSet 0
OpDecorate %resultMatrix Binding 2
OpDecorate %Uniforms Block
OpMemberDecorate %Uniforms 0 Offset 0
OpMemberDecorate %Uniforms 1 Offset 4
OpMemberDecorate %Uniforms 2 Offset 8
OpDecorate %uniforms NonWritable
OpDecorate %uniforms DescriptorSet 0
OpDecorate %uniforms Binding 3
OpDecorate %_arr_float_TileAOuter ArrayStride 4
OpDecorate %_arr__arr_float_TileAOuter_TileAOuter ArrayStride 256
OpDecorate %tint_symbol BuiltIn LocalInvocationId
OpDecorate %tint_symbol_1 BuiltIn GlobalInvocationId
OpDecorate %tint_symbol_2 BuiltIn LocalInvocationIndex
OpDecorate %_arr_float_uint_16 ArrayStride 4
OpDecorate %_arr_float_RowPerThread ArrayStride 4
%float = OpTypeFloat 32
%_runtimearr_float = OpTypeRuntimeArray %float
%Matrix = OpTypeStruct %_runtimearr_float
%_ptr_StorageBuffer_Matrix = OpTypePointer StorageBuffer %Matrix
%firstMatrix = OpVariable %_ptr_StorageBuffer_Matrix StorageBuffer
%secondMatrix = OpVariable %_ptr_StorageBuffer_Matrix StorageBuffer
%resultMatrix = OpVariable %_ptr_StorageBuffer_Matrix StorageBuffer
%uint = OpTypeInt 32 0
%Uniforms = OpTypeStruct %uint %uint %uint
%_ptr_Uniform_Uniforms = OpTypePointer Uniform %Uniforms
%uniforms = OpVariable %_ptr_Uniform_Uniforms Uniform
%RowPerThread = OpConstant %uint 4
%TileAOuter = OpConstant %uint 64
%_arr_float_TileAOuter = OpTypeArray %float %TileAOuter
%_arr__arr_float_TileAOuter_TileAOuter = OpTypeArray %_arr_float_TileAOuter %TileAOuter
%_ptr_Workgroup__arr__arr_float_TileAOuter_TileAOuter = OpTypePointer Workgroup %_arr__arr_float_TileAOuter_TileAOuter
%mm_Asub = OpVariable %_ptr_Workgroup__arr__arr_float_TileAOuter_TileAOuter Workgroup
%mm_Bsub = OpVariable %_ptr_Workgroup__arr__arr_float_TileAOuter_TileAOuter Workgroup
%v3uint = OpTypeVector %uint 3
%_ptr_Input_v3uint = OpTypePointer Input %v3uint
%tint_symbol = OpVariable %_ptr_Input_v3uint Input
%tint_symbol_1 = OpVariable %_ptr_Input_v3uint Input
%_ptr_Input_uint = OpTypePointer Input %uint
%tint_symbol_2 = OpVariable %_ptr_Input_uint Input
%25 = OpTypeFunction %float %uint %uint
%uint_0 = OpConstant %uint 0
%_ptr_Uniform_uint = OpTypePointer Uniform %uint
%bool = OpTypeBool
%uint_1 = OpConstant %uint 1
%_ptr_StorageBuffer_float = OpTypePointer StorageBuffer %float
%float_0 = OpConstant %float 0
%uint_2 = OpConstant %uint 2
%void = OpTypeVoid
%75 = OpTypeFunction %void %uint %uint %float
%98 = OpTypeFunction %void
%_ptr_Function_uint = OpTypePointer Function %uint
%104 = OpConstantNull %uint
%uint_4096 = OpConstant %uint 4096
%_ptr_Workgroup_float = OpTypePointer Workgroup %float
%121 = OpConstantNull %float
%uint_256 = OpConstant %uint 256
%uint_264 = OpConstant %uint 264
%uint_16 = OpConstant %uint 16
%_arr_float_uint_16 = OpTypeArray %float %uint_16
%_ptr_Function__arr_float_uint_16 = OpTypePointer Function %_arr_float_uint_16
%149 = OpConstantNull %_arr_float_uint_16
%_ptr_Function_float = OpTypePointer Function %float
%_arr_float_RowPerThread = OpTypeArray %float %RowPerThread
%_ptr_Function__arr_float_RowPerThread = OpTypePointer Function %_arr_float_RowPerThread
%155 = OpConstantNull %_arr_float_RowPerThread
%mm_readA = OpFunction %float None %25
%row = OpFunctionParameter %uint
%col = OpFunctionParameter %uint
%29 = OpLabel
%32 = OpAccessChain %_ptr_Uniform_uint %uniforms %uint_0
%33 = OpLoad %uint %32
%34 = OpULessThan %bool %row %33
OpSelectionMerge %36 None
OpBranchConditional %34 %37 %36
%37 = OpLabel
%39 = OpAccessChain %_ptr_Uniform_uint %uniforms %uint_1
%40 = OpLoad %uint %39
%41 = OpULessThan %bool %col %40
OpBranch %36
%36 = OpLabel
%42 = OpPhi %bool %34 %29 %41 %37
OpSelectionMerge %43 None
OpBranchConditional %42 %44 %43
%44 = OpLabel
%45 = OpAccessChain %_ptr_Uniform_uint %uniforms %uint_1
%46 = OpLoad %uint %45
%47 = OpIMul %uint %row %46
%48 = OpIAdd %uint %47 %col
%50 = OpAccessChain %_ptr_StorageBuffer_float %firstMatrix %uint_0 %48
%51 = OpLoad %float %50
OpReturnValue %51
%43 = OpLabel
OpReturnValue %float_0
OpFunctionEnd
%mm_readB = OpFunction %float None %25
%row_0 = OpFunctionParameter %uint
%col_0 = OpFunctionParameter %uint
%56 = OpLabel
%57 = OpAccessChain %_ptr_Uniform_uint %uniforms %uint_1
%58 = OpLoad %uint %57
%59 = OpULessThan %bool %row_0 %58
OpSelectionMerge %60 None
OpBranchConditional %59 %61 %60
%61 = OpLabel
%63 = OpAccessChain %_ptr_Uniform_uint %uniforms %uint_2
%64 = OpLoad %uint %63
%65 = OpULessThan %bool %col_0 %64
OpBranch %60
%60 = OpLabel
%66 = OpPhi %bool %59 %56 %65 %61
OpSelectionMerge %67 None
OpBranchConditional %66 %68 %67
%68 = OpLabel
%69 = OpAccessChain %_ptr_Uniform_uint %uniforms %uint_2
%70 = OpLoad %uint %69
%71 = OpIMul %uint %row_0 %70
%72 = OpIAdd %uint %71 %col_0
%73 = OpAccessChain %_ptr_StorageBuffer_float %secondMatrix %uint_0 %72
%74 = OpLoad %float %73
OpReturnValue %74
%67 = OpLabel
OpReturnValue %float_0
OpFunctionEnd
%mm_write = OpFunction %void None %75
%row_1 = OpFunctionParameter %uint
%col_1 = OpFunctionParameter %uint
%value = OpFunctionParameter %float
%81 = OpLabel
%82 = OpAccessChain %_ptr_Uniform_uint %uniforms %uint_0
%83 = OpLoad %uint %82
%84 = OpULessThan %bool %row_1 %83
OpSelectionMerge %85 None
OpBranchConditional %84 %86 %85
%86 = OpLabel
%87 = OpAccessChain %_ptr_Uniform_uint %uniforms %uint_2
%88 = OpLoad %uint %87
%89 = OpULessThan %bool %col_1 %88
OpBranch %85
%85 = OpLabel
%90 = OpPhi %bool %84 %81 %89 %86
OpSelectionMerge %91 None
OpBranchConditional %90 %92 %91
%92 = OpLabel
%93 = OpAccessChain %_ptr_Uniform_uint %uniforms %uint_2
%94 = OpLoad %uint %93
%95 = OpIMul %uint %row_1 %94
%96 = OpIAdd %uint %col_1 %95
%97 = OpAccessChain %_ptr_StorageBuffer_float %resultMatrix %uint_0 %96
OpStore %97 %value
OpBranch %91
%91 = OpLabel
OpReturn
OpFunctionEnd
%main = OpFunction %void None %98
%100 = OpLabel
%idx = OpVariable %_ptr_Function_uint Function %104
%acc = OpVariable %_ptr_Function__arr_float_uint_16 Function %149
%ACached = OpVariable %_ptr_Function_float Function %121
%BCached = OpVariable %_ptr_Function__arr_float_RowPerThread Function %155
%index = OpVariable %_ptr_Function_uint Function %104
%t = OpVariable %_ptr_Function_uint Function %104
%innerRow = OpVariable %_ptr_Function_uint Function %104
%innerCol = OpVariable %_ptr_Function_uint Function %104
%innerRow_0 = OpVariable %_ptr_Function_uint Function %104
%innerCol_0 = OpVariable %_ptr_Function_uint Function %104
%k = OpVariable %_ptr_Function_uint Function %104
%inner = OpVariable %_ptr_Function_uint Function %104
%innerRow_1 = OpVariable %_ptr_Function_uint Function %104
%innerCol_1 = OpVariable %_ptr_Function_uint Function %104
%innerRow_2 = OpVariable %_ptr_Function_uint Function %104
%innerCol_2 = OpVariable %_ptr_Function_uint Function %104
%101 = OpLoad %uint %tint_symbol_2
OpStore %idx %101
OpBranch %105
%105 = OpLabel
OpLoopMerge %106 %107 None
OpBranch %108
%108 = OpLabel
%110 = OpLoad %uint %idx
%112 = OpULessThan %bool %110 %uint_4096
%109 = OpLogicalNot %bool %112
OpSelectionMerge %113 None
OpBranchConditional %109 %114 %113
%114 = OpLabel
OpBranch %106
%113 = OpLabel
%115 = OpLoad %uint %idx
%116 = OpUDiv %uint %115 %TileAOuter
%117 = OpLoad %uint %idx
%118 = OpUMod %uint %117 %TileAOuter
%120 = OpAccessChain %_ptr_Workgroup_float %mm_Asub %116 %118
OpStore %120 %121
%122 = OpAccessChain %_ptr_Workgroup_float %mm_Bsub %116 %118
OpStore %122 %121
OpBranch %107
%107 = OpLabel
%123 = OpLoad %uint %idx
%125 = OpIAdd %uint %123 %uint_256
OpStore %idx %125
OpBranch %105
%106 = OpLabel
OpControlBarrier %uint_2 %uint_2 %uint_264
%128 = OpAccessChain %_ptr_Input_uint %tint_symbol %uint_1
%129 = OpLoad %uint %128
%130 = OpIMul %uint %129 %RowPerThread
%131 = OpAccessChain %_ptr_Input_uint %tint_symbol %uint_0
%132 = OpLoad %uint %131
%133 = OpIMul %uint %132 %RowPerThread
%134 = OpAccessChain %_ptr_Input_uint %tint_symbol_1 %uint_1
%135 = OpLoad %uint %134
%136 = OpIMul %uint %135 %RowPerThread
%137 = OpAccessChain %_ptr_Input_uint %tint_symbol_1 %uint_0
%138 = OpLoad %uint %137
%139 = OpIMul %uint %138 %RowPerThread
%140 = OpAccessChain %_ptr_Uniform_uint %uniforms %uint_1
%141 = OpLoad %uint %140
%142 = OpISub %uint %141 %uint_1
%143 = OpUDiv %uint %142 %TileAOuter
%144 = OpIAdd %uint %143 %uint_1
OpStore %index %uint_0
OpBranch %157
%157 = OpLabel
OpLoopMerge %158 %159 None
OpBranch %160
%160 = OpLabel
%162 = OpLoad %uint %index
%163 = OpIMul %uint %RowPerThread %RowPerThread
%164 = OpULessThan %bool %162 %163
%161 = OpLogicalNot %bool %164
OpSelectionMerge %165 None
OpBranchConditional %161 %166 %165
%166 = OpLabel
OpBranch %158
%165 = OpLabel
%167 = OpLoad %uint %index
%168 = OpAccessChain %_ptr_Function_float %acc %167
OpStore %168 %float_0
OpBranch %159
%159 = OpLabel
%169 = OpLoad %uint %index
%170 = OpIAdd %uint %169 %uint_1
OpStore %index %170
OpBranch %157
%158 = OpLabel
%171 = OpUDiv %uint %TileAOuter %uint_16
%172 = OpAccessChain %_ptr_Input_uint %tint_symbol %uint_0
%173 = OpLoad %uint %172
%174 = OpIMul %uint %173 %171
%175 = OpUDiv %uint %TileAOuter %uint_16
%176 = OpAccessChain %_ptr_Input_uint %tint_symbol %uint_1
%177 = OpLoad %uint %176
%178 = OpIMul %uint %177 %175
OpStore %t %uint_0
OpBranch %180
%180 = OpLabel
OpLoopMerge %181 %182 None
OpBranch %183
%183 = OpLabel
%185 = OpLoad %uint %t
%186 = OpULessThan %bool %185 %144
%184 = OpLogicalNot %bool %186
OpSelectionMerge %187 None
OpBranchConditional %184 %188 %187
%188 = OpLabel
OpBranch %181
%187 = OpLabel
OpStore %innerRow %uint_0
OpBranch %190
%190 = OpLabel
OpLoopMerge %191 %192 None
OpBranch %193
%193 = OpLabel
%195 = OpLoad %uint %innerRow
%196 = OpULessThan %bool %195 %RowPerThread
%194 = OpLogicalNot %bool %196
OpSelectionMerge %197 None
OpBranchConditional %194 %198 %197
%198 = OpLabel
OpBranch %191
%197 = OpLabel
OpStore %innerCol %uint_0
OpBranch %200
%200 = OpLabel
OpLoopMerge %201 %202 None
OpBranch %203
%203 = OpLabel
%205 = OpLoad %uint %innerCol
%206 = OpULessThan %bool %205 %171
%204 = OpLogicalNot %bool %206
OpSelectionMerge %207 None
OpBranchConditional %204 %208 %207
%208 = OpLabel
OpBranch %201
%207 = OpLabel
%209 = OpLoad %uint %innerRow
%210 = OpIAdd %uint %130 %209
%211 = OpLoad %uint %innerCol
%212 = OpIAdd %uint %174 %211
%213 = OpAccessChain %_ptr_Workgroup_float %mm_Asub %210 %212
%215 = OpLoad %uint %innerRow
%216 = OpIAdd %uint %136 %215
%217 = OpLoad %uint %t
%218 = OpIMul %uint %217 %TileAOuter
%219 = OpIAdd %uint %218 %212
%214 = OpFunctionCall %float %mm_readA %216 %219
OpStore %213 %214
OpBranch %202
%202 = OpLabel
%220 = OpLoad %uint %innerCol
%221 = OpIAdd %uint %220 %uint_1
OpStore %innerCol %221
OpBranch %200
%201 = OpLabel
OpBranch %192
%192 = OpLabel
%222 = OpLoad %uint %innerRow
%223 = OpIAdd %uint %222 %uint_1
OpStore %innerRow %223
OpBranch %190
%191 = OpLabel
OpStore %innerRow_0 %uint_0
OpBranch %225
%225 = OpLabel
OpLoopMerge %226 %227 None
OpBranch %228
%228 = OpLabel
%230 = OpLoad %uint %innerRow_0
%231 = OpULessThan %bool %230 %175
%229 = OpLogicalNot %bool %231
OpSelectionMerge %232 None
OpBranchConditional %229 %233 %232
%233 = OpLabel
OpBranch %226
%232 = OpLabel
OpStore %innerCol_0 %uint_0
OpBranch %235
%235 = OpLabel
OpLoopMerge %236 %237 None
OpBranch %238
%238 = OpLabel
%240 = OpLoad %uint %innerCol_0
%241 = OpULessThan %bool %240 %RowPerThread
%239 = OpLogicalNot %bool %241
OpSelectionMerge %242 None
OpBranchConditional %239 %243 %242
%243 = OpLabel
OpBranch %236
%242 = OpLabel
%244 = OpLoad %uint %innerRow_0
%245 = OpIAdd %uint %178 %244
%246 = OpLoad %uint %innerCol_0
%247 = OpIAdd %uint %133 %246
%248 = OpLoad %uint %innerCol_0
%249 = OpAccessChain %_ptr_Workgroup_float %mm_Bsub %248 %247
%251 = OpLoad %uint %t
%252 = OpIMul %uint %251 %TileAOuter
%253 = OpIAdd %uint %252 %245
%254 = OpLoad %uint %innerCol_0
%255 = OpIAdd %uint %139 %254
%250 = OpFunctionCall %float %mm_readB %253 %255
OpStore %249 %250
OpBranch %237
%237 = OpLabel
%256 = OpLoad %uint %innerCol_0
%257 = OpIAdd %uint %256 %uint_1
OpStore %innerCol_0 %257
OpBranch %235
%236 = OpLabel
OpBranch %227
%227 = OpLabel
%258 = OpLoad %uint %innerRow_0
%259 = OpIAdd %uint %258 %uint_1
OpStore %innerRow_0 %259
OpBranch %225
%226 = OpLabel
OpControlBarrier %uint_2 %uint_2 %uint_264
OpStore %k %uint_0
OpBranch %262
%262 = OpLabel
OpLoopMerge %263 %264 None
OpBranch %265
%265 = OpLabel
%267 = OpLoad %uint %k
%268 = OpULessThan %bool %267 %TileAOuter
%266 = OpLogicalNot %bool %268
OpSelectionMerge %269 None
OpBranchConditional %266 %270 %269
%270 = OpLabel
OpBranch %263
%269 = OpLabel
OpStore %inner %uint_0
OpBranch %272
%272 = OpLabel
OpLoopMerge %273 %274 None
OpBranch %275
%275 = OpLabel
%277 = OpLoad %uint %inner
%278 = OpULessThan %bool %277 %RowPerThread
%276 = OpLogicalNot %bool %278
OpSelectionMerge %279 None
OpBranchConditional %276 %280 %279
%280 = OpLabel
OpBranch %273
%279 = OpLabel
%281 = OpLoad %uint %inner
%282 = OpAccessChain %_ptr_Function_float %BCached %281
%283 = OpLoad %uint %k
%284 = OpLoad %uint %inner
%285 = OpIAdd %uint %133 %284
%286 = OpAccessChain %_ptr_Workgroup_float %mm_Bsub %283 %285
%287 = OpLoad %float %286
OpStore %282 %287
OpBranch %274
%274 = OpLabel
%288 = OpLoad %uint %inner
%289 = OpIAdd %uint %288 %uint_1
OpStore %inner %289
OpBranch %272
%273 = OpLabel
OpStore %innerRow_1 %uint_0
OpBranch %291
%291 = OpLabel
OpLoopMerge %292 %293 None
OpBranch %294
%294 = OpLabel
%296 = OpLoad %uint %innerRow_1
%297 = OpULessThan %bool %296 %RowPerThread
%295 = OpLogicalNot %bool %297
OpSelectionMerge %298 None
OpBranchConditional %295 %299 %298
%299 = OpLabel
OpBranch %292
%298 = OpLabel
%300 = OpLoad %uint %innerRow_1
%301 = OpIAdd %uint %130 %300
%302 = OpLoad %uint %k
%303 = OpAccessChain %_ptr_Workgroup_float %mm_Asub %301 %302
%304 = OpLoad %float %303
OpStore %ACached %304
OpStore %innerCol_1 %uint_0
OpBranch %306
%306 = OpLabel
OpLoopMerge %307 %308 None
OpBranch %309
%309 = OpLabel
%311 = OpLoad %uint %innerCol_1
%312 = OpULessThan %bool %311 %RowPerThread
%310 = OpLogicalNot %bool %312
OpSelectionMerge %313 None
OpBranchConditional %310 %314 %313
%314 = OpLabel
OpBranch %307
%313 = OpLabel
%315 = OpLoad %uint %innerRow_1
%316 = OpIMul %uint %315 %RowPerThread
%317 = OpLoad %uint %innerCol_1
%318 = OpIAdd %uint %316 %317
%319 = OpAccessChain %_ptr_Function_float %acc %318
%320 = OpAccessChain %_ptr_Function_float %acc %318
%321 = OpLoad %float %320
%322 = OpLoad %float %ACached
%323 = OpLoad %uint %innerCol_1
%324 = OpAccessChain %_ptr_Function_float %BCached %323
%325 = OpLoad %float %324
%326 = OpFMul %float %322 %325
%327 = OpFAdd %float %321 %326
OpStore %319 %327
OpBranch %308
%308 = OpLabel
%328 = OpLoad %uint %innerCol_1
%329 = OpIAdd %uint %328 %uint_1
OpStore %innerCol_1 %329
OpBranch %306
%307 = OpLabel
OpBranch %293
%293 = OpLabel
%330 = OpLoad %uint %innerRow_1
%331 = OpIAdd %uint %330 %uint_1
OpStore %innerRow_1 %331
OpBranch %291
%292 = OpLabel
OpBranch %264
%264 = OpLabel
%332 = OpLoad %uint %k
%333 = OpIAdd %uint %332 %uint_1
OpStore %k %333
OpBranch %262
%263 = OpLabel
OpControlBarrier %uint_2 %uint_2 %uint_264
OpBranch %182
%182 = OpLabel
%335 = OpLoad %uint %t
%336 = OpIAdd %uint %335 %uint_1
OpStore %t %336
OpBranch %180
%181 = OpLabel
OpStore %innerRow_2 %uint_0
OpBranch %338
%338 = OpLabel
OpLoopMerge %339 %340 None
OpBranch %341
%341 = OpLabel
%343 = OpLoad %uint %innerRow_2
%344 = OpULessThan %bool %343 %RowPerThread
%342 = OpLogicalNot %bool %344
OpSelectionMerge %345 None
OpBranchConditional %342 %346 %345
%346 = OpLabel
OpBranch %339
%345 = OpLabel
OpStore %innerCol_2 %uint_0
OpBranch %348
%348 = OpLabel
OpLoopMerge %349 %350 None
OpBranch %351
%351 = OpLabel
%353 = OpLoad %uint %innerCol_2
%354 = OpULessThan %bool %353 %RowPerThread
%352 = OpLogicalNot %bool %354
OpSelectionMerge %355 None
OpBranchConditional %352 %356 %355
%356 = OpLabel
OpBranch %349
%355 = OpLabel
%357 = OpLoad %uint %innerRow_2
%358 = OpIMul %uint %357 %RowPerThread
%359 = OpLoad %uint %innerCol_2
%360 = OpIAdd %uint %358 %359
%362 = OpLoad %uint %innerRow_2
%363 = OpIAdd %uint %136 %362
%364 = OpLoad %uint %innerCol_2
%365 = OpIAdd %uint %139 %364
%366 = OpAccessChain %_ptr_Function_float %acc %360
%367 = OpLoad %float %366
%361 = OpFunctionCall %void %mm_write %363 %365 %367
OpBranch %350
%350 = OpLabel
%368 = OpLoad %uint %innerCol_2
%369 = OpIAdd %uint %368 %uint_1
OpStore %innerCol_2 %369
OpBranch %348
%349 = OpLabel
OpBranch %340
%340 = OpLabel
%370 = OpLoad %uint %innerRow_2
%371 = OpIAdd %uint %370 %uint_1
OpStore %innerRow_2 %371
OpBranch %338
%339 = OpLabel
OpReturn
OpFunctionEnd