blob: 5c4ef4447e52da7c3b1bd4c3f63461f9e125bb3a [file] [log] [blame] [edit]
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
; Bound: 375
; Schema: 0
OpCapability Shader
OpMemoryModel Logical GLSL450
OpEntryPoint GLCompute %main "main" %local_id_1 %global_id_1 %local_invocation_index_1
OpExecutionMode %main LocalSize 16 16 1
OpName %local_id_1 "local_id_1"
OpName %global_id_1 "global_id_1"
OpName %local_invocation_index_1 "local_invocation_index_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 %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_inner "main_inner"
OpName %local_id "local_id"
OpName %global_id "global_id"
OpName %local_invocation_index "local_invocation_index"
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"
OpName %main "main"
OpDecorate %local_id_1 BuiltIn LocalInvocationId
OpDecorate %global_id_1 BuiltIn GlobalInvocationId
OpDecorate %local_invocation_index_1 BuiltIn LocalInvocationIndex
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 %_arr_float_uint_16 ArrayStride 4
OpDecorate %_arr_float_RowPerThread ArrayStride 4
%uint = OpTypeInt 32 0
%v3uint = OpTypeVector %uint 3
%_ptr_Input_v3uint = OpTypePointer Input %v3uint
%local_id_1 = OpVariable %_ptr_Input_v3uint Input
%global_id_1 = OpVariable %_ptr_Input_v3uint Input
%_ptr_Input_uint = OpTypePointer Input %uint
%local_invocation_index_1 = OpVariable %_ptr_Input_uint Input
%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
%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
%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 %v3uint %v3uint %uint
%_ptr_Function_uint = OpTypePointer Function %uint
%106 = OpConstantNull %uint
%uint_4096 = OpConstant %uint 4096
%_ptr_Workgroup_float = OpTypePointer Workgroup %float
%123 = 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
%147 = 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
%153 = OpConstantNull %_arr_float_RowPerThread
%368 = OpTypeFunction %void
%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_inner = OpFunction %void None %98
%local_id = OpFunctionParameter %v3uint
%global_id = OpFunctionParameter %v3uint
%local_invocation_index = OpFunctionParameter %uint
%103 = OpLabel
%idx = OpVariable %_ptr_Function_uint Function %106
%acc = OpVariable %_ptr_Function__arr_float_uint_16 Function %147
%ACached = OpVariable %_ptr_Function_float Function %123
%BCached = OpVariable %_ptr_Function__arr_float_RowPerThread Function %153
%index = OpVariable %_ptr_Function_uint Function %106
%t = OpVariable %_ptr_Function_uint Function %106
%innerRow = OpVariable %_ptr_Function_uint Function %106
%innerCol = OpVariable %_ptr_Function_uint Function %106
%innerRow_0 = OpVariable %_ptr_Function_uint Function %106
%innerCol_0 = OpVariable %_ptr_Function_uint Function %106
%k = OpVariable %_ptr_Function_uint Function %106
%inner = OpVariable %_ptr_Function_uint Function %106
%innerRow_1 = OpVariable %_ptr_Function_uint Function %106
%innerCol_1 = OpVariable %_ptr_Function_uint Function %106
%innerRow_2 = OpVariable %_ptr_Function_uint Function %106
%innerCol_2 = OpVariable %_ptr_Function_uint Function %106
OpStore %idx %local_invocation_index
OpBranch %107
%107 = OpLabel
OpLoopMerge %108 %109 None
OpBranch %110
%110 = OpLabel
%112 = OpLoad %uint %idx
%114 = OpULessThan %bool %112 %uint_4096
%111 = OpLogicalNot %bool %114
OpSelectionMerge %115 None
OpBranchConditional %111 %116 %115
%116 = OpLabel
OpBranch %108
%115 = OpLabel
%117 = OpLoad %uint %idx
%118 = OpUDiv %uint %117 %TileAOuter
%119 = OpLoad %uint %idx
%120 = OpUMod %uint %119 %TileAOuter
%122 = OpAccessChain %_ptr_Workgroup_float %mm_Asub %118 %120
OpStore %122 %123
%124 = OpAccessChain %_ptr_Workgroup_float %mm_Bsub %118 %120
OpStore %124 %123
OpBranch %109
%109 = OpLabel
%125 = OpLoad %uint %idx
%127 = OpIAdd %uint %125 %uint_256
OpStore %idx %127
OpBranch %107
%108 = OpLabel
OpControlBarrier %uint_2 %uint_2 %uint_264
%130 = OpCompositeExtract %uint %local_id 1
%131 = OpIMul %uint %130 %RowPerThread
%132 = OpCompositeExtract %uint %local_id 0
%133 = OpIMul %uint %132 %RowPerThread
%134 = OpCompositeExtract %uint %global_id 1
%135 = OpIMul %uint %134 %RowPerThread
%136 = OpCompositeExtract %uint %global_id 0
%137 = OpIMul %uint %136 %RowPerThread
%138 = OpAccessChain %_ptr_Uniform_uint %uniforms %uint_1
%139 = OpLoad %uint %138
%140 = OpISub %uint %139 %uint_1
%141 = OpUDiv %uint %140 %TileAOuter
%142 = OpIAdd %uint %141 %uint_1
OpStore %index %uint_0
OpBranch %155
%155 = OpLabel
OpLoopMerge %156 %157 None
OpBranch %158
%158 = OpLabel
%160 = OpLoad %uint %index
%161 = OpIMul %uint %RowPerThread %RowPerThread
%162 = OpULessThan %bool %160 %161
%159 = OpLogicalNot %bool %162
OpSelectionMerge %163 None
OpBranchConditional %159 %164 %163
%164 = OpLabel
OpBranch %156
%163 = OpLabel
%165 = OpLoad %uint %index
%166 = OpAccessChain %_ptr_Function_float %acc %165
OpStore %166 %float_0
OpBranch %157
%157 = OpLabel
%167 = OpLoad %uint %index
%168 = OpIAdd %uint %167 %uint_1
OpStore %index %168
OpBranch %155
%156 = OpLabel
%169 = OpUDiv %uint %TileAOuter %uint_16
%170 = OpCompositeExtract %uint %local_id 0
%171 = OpIMul %uint %170 %169
%172 = OpUDiv %uint %TileAOuter %uint_16
%173 = OpCompositeExtract %uint %local_id 1
%174 = OpIMul %uint %173 %172
OpStore %t %uint_0
OpBranch %176
%176 = OpLabel
OpLoopMerge %177 %178 None
OpBranch %179
%179 = OpLabel
%181 = OpLoad %uint %t
%182 = OpULessThan %bool %181 %142
%180 = OpLogicalNot %bool %182
OpSelectionMerge %183 None
OpBranchConditional %180 %184 %183
%184 = OpLabel
OpBranch %177
%183 = OpLabel
OpStore %innerRow %uint_0
OpBranch %186
%186 = OpLabel
OpLoopMerge %187 %188 None
OpBranch %189
%189 = OpLabel
%191 = OpLoad %uint %innerRow
%192 = OpULessThan %bool %191 %RowPerThread
%190 = OpLogicalNot %bool %192
OpSelectionMerge %193 None
OpBranchConditional %190 %194 %193
%194 = OpLabel
OpBranch %187
%193 = OpLabel
OpStore %innerCol %uint_0
OpBranch %196
%196 = OpLabel
OpLoopMerge %197 %198 None
OpBranch %199
%199 = OpLabel
%201 = OpLoad %uint %innerCol
%202 = OpULessThan %bool %201 %169
%200 = OpLogicalNot %bool %202
OpSelectionMerge %203 None
OpBranchConditional %200 %204 %203
%204 = OpLabel
OpBranch %197
%203 = OpLabel
%205 = OpLoad %uint %innerRow
%206 = OpIAdd %uint %131 %205
%207 = OpLoad %uint %innerCol
%208 = OpIAdd %uint %171 %207
%209 = OpAccessChain %_ptr_Workgroup_float %mm_Asub %206 %208
%211 = OpLoad %uint %innerRow
%212 = OpIAdd %uint %135 %211
%213 = OpLoad %uint %t
%214 = OpIMul %uint %213 %TileAOuter
%215 = OpIAdd %uint %214 %208
%210 = OpFunctionCall %float %mm_readA %212 %215
OpStore %209 %210
OpBranch %198
%198 = OpLabel
%216 = OpLoad %uint %innerCol
%217 = OpIAdd %uint %216 %uint_1
OpStore %innerCol %217
OpBranch %196
%197 = OpLabel
OpBranch %188
%188 = OpLabel
%218 = OpLoad %uint %innerRow
%219 = OpIAdd %uint %218 %uint_1
OpStore %innerRow %219
OpBranch %186
%187 = OpLabel
OpStore %innerRow_0 %uint_0
OpBranch %221
%221 = OpLabel
OpLoopMerge %222 %223 None
OpBranch %224
%224 = OpLabel
%226 = OpLoad %uint %innerRow_0
%227 = OpULessThan %bool %226 %172
%225 = OpLogicalNot %bool %227
OpSelectionMerge %228 None
OpBranchConditional %225 %229 %228
%229 = OpLabel
OpBranch %222
%228 = OpLabel
OpStore %innerCol_0 %uint_0
OpBranch %231
%231 = OpLabel
OpLoopMerge %232 %233 None
OpBranch %234
%234 = OpLabel
%236 = OpLoad %uint %innerCol_0
%237 = OpULessThan %bool %236 %RowPerThread
%235 = OpLogicalNot %bool %237
OpSelectionMerge %238 None
OpBranchConditional %235 %239 %238
%239 = OpLabel
OpBranch %232
%238 = OpLabel
%240 = OpLoad %uint %innerRow_0
%241 = OpIAdd %uint %174 %240
%242 = OpLoad %uint %innerCol_0
%243 = OpIAdd %uint %133 %242
%244 = OpLoad %uint %innerCol_0
%245 = OpAccessChain %_ptr_Workgroup_float %mm_Bsub %244 %243
%247 = OpLoad %uint %t
%248 = OpIMul %uint %247 %TileAOuter
%249 = OpIAdd %uint %248 %241
%250 = OpLoad %uint %innerCol_0
%251 = OpIAdd %uint %137 %250
%246 = OpFunctionCall %float %mm_readB %249 %251
OpStore %245 %246
OpBranch %233
%233 = OpLabel
%252 = OpLoad %uint %innerCol_0
%253 = OpIAdd %uint %252 %uint_1
OpStore %innerCol_0 %253
OpBranch %231
%232 = OpLabel
OpBranch %223
%223 = OpLabel
%254 = OpLoad %uint %innerRow_0
%255 = OpIAdd %uint %254 %uint_1
OpStore %innerRow_0 %255
OpBranch %221
%222 = OpLabel
OpControlBarrier %uint_2 %uint_2 %uint_264
OpStore %k %uint_0
OpBranch %258
%258 = OpLabel
OpLoopMerge %259 %260 None
OpBranch %261
%261 = OpLabel
%263 = OpLoad %uint %k
%264 = OpULessThan %bool %263 %TileAOuter
%262 = OpLogicalNot %bool %264
OpSelectionMerge %265 None
OpBranchConditional %262 %266 %265
%266 = OpLabel
OpBranch %259
%265 = OpLabel
OpStore %inner %uint_0
OpBranch %268
%268 = OpLabel
OpLoopMerge %269 %270 None
OpBranch %271
%271 = OpLabel
%273 = OpLoad %uint %inner
%274 = OpULessThan %bool %273 %RowPerThread
%272 = OpLogicalNot %bool %274
OpSelectionMerge %275 None
OpBranchConditional %272 %276 %275
%276 = OpLabel
OpBranch %269
%275 = OpLabel
%277 = OpLoad %uint %inner
%278 = OpAccessChain %_ptr_Function_float %BCached %277
%279 = OpLoad %uint %k
%280 = OpLoad %uint %inner
%281 = OpIAdd %uint %133 %280
%282 = OpAccessChain %_ptr_Workgroup_float %mm_Bsub %279 %281
%283 = OpLoad %float %282
OpStore %278 %283
OpBranch %270
%270 = OpLabel
%284 = OpLoad %uint %inner
%285 = OpIAdd %uint %284 %uint_1
OpStore %inner %285
OpBranch %268
%269 = OpLabel
OpStore %innerRow_1 %uint_0
OpBranch %287
%287 = OpLabel
OpLoopMerge %288 %289 None
OpBranch %290
%290 = OpLabel
%292 = OpLoad %uint %innerRow_1
%293 = OpULessThan %bool %292 %RowPerThread
%291 = OpLogicalNot %bool %293
OpSelectionMerge %294 None
OpBranchConditional %291 %295 %294
%295 = OpLabel
OpBranch %288
%294 = OpLabel
%296 = OpLoad %uint %innerRow_1
%297 = OpIAdd %uint %131 %296
%298 = OpLoad %uint %k
%299 = OpAccessChain %_ptr_Workgroup_float %mm_Asub %297 %298
%300 = OpLoad %float %299
OpStore %ACached %300
OpStore %innerCol_1 %uint_0
OpBranch %302
%302 = OpLabel
OpLoopMerge %303 %304 None
OpBranch %305
%305 = OpLabel
%307 = OpLoad %uint %innerCol_1
%308 = OpULessThan %bool %307 %RowPerThread
%306 = OpLogicalNot %bool %308
OpSelectionMerge %309 None
OpBranchConditional %306 %310 %309
%310 = OpLabel
OpBranch %303
%309 = OpLabel
%311 = OpLoad %uint %innerRow_1
%312 = OpIMul %uint %311 %RowPerThread
%313 = OpLoad %uint %innerCol_1
%314 = OpIAdd %uint %312 %313
%315 = OpAccessChain %_ptr_Function_float %acc %314
%316 = OpAccessChain %_ptr_Function_float %acc %314
%317 = OpLoad %float %316
%318 = OpLoad %float %ACached
%319 = OpLoad %uint %innerCol_1
%320 = OpAccessChain %_ptr_Function_float %BCached %319
%321 = OpLoad %float %320
%322 = OpFMul %float %318 %321
%323 = OpFAdd %float %317 %322
OpStore %315 %323
OpBranch %304
%304 = OpLabel
%324 = OpLoad %uint %innerCol_1
%325 = OpIAdd %uint %324 %uint_1
OpStore %innerCol_1 %325
OpBranch %302
%303 = OpLabel
OpBranch %289
%289 = OpLabel
%326 = OpLoad %uint %innerRow_1
%327 = OpIAdd %uint %326 %uint_1
OpStore %innerRow_1 %327
OpBranch %287
%288 = OpLabel
OpBranch %260
%260 = OpLabel
%328 = OpLoad %uint %k
%329 = OpIAdd %uint %328 %uint_1
OpStore %k %329
OpBranch %258
%259 = OpLabel
OpControlBarrier %uint_2 %uint_2 %uint_264
OpBranch %178
%178 = OpLabel
%331 = OpLoad %uint %t
%332 = OpIAdd %uint %331 %uint_1
OpStore %t %332
OpBranch %176
%177 = OpLabel
OpStore %innerRow_2 %uint_0
OpBranch %334
%334 = OpLabel
OpLoopMerge %335 %336 None
OpBranch %337
%337 = OpLabel
%339 = OpLoad %uint %innerRow_2
%340 = OpULessThan %bool %339 %RowPerThread
%338 = OpLogicalNot %bool %340
OpSelectionMerge %341 None
OpBranchConditional %338 %342 %341
%342 = OpLabel
OpBranch %335
%341 = OpLabel
OpStore %innerCol_2 %uint_0
OpBranch %344
%344 = OpLabel
OpLoopMerge %345 %346 None
OpBranch %347
%347 = OpLabel
%349 = OpLoad %uint %innerCol_2
%350 = OpULessThan %bool %349 %RowPerThread
%348 = OpLogicalNot %bool %350
OpSelectionMerge %351 None
OpBranchConditional %348 %352 %351
%352 = OpLabel
OpBranch %345
%351 = OpLabel
%353 = OpLoad %uint %innerRow_2
%354 = OpIMul %uint %353 %RowPerThread
%355 = OpLoad %uint %innerCol_2
%356 = OpIAdd %uint %354 %355
%358 = OpLoad %uint %innerRow_2
%359 = OpIAdd %uint %135 %358
%360 = OpLoad %uint %innerCol_2
%361 = OpIAdd %uint %137 %360
%362 = OpAccessChain %_ptr_Function_float %acc %356
%363 = OpLoad %float %362
%357 = OpFunctionCall %void %mm_write %359 %361 %363
OpBranch %346
%346 = OpLabel
%364 = OpLoad %uint %innerCol_2
%365 = OpIAdd %uint %364 %uint_1
OpStore %innerCol_2 %365
OpBranch %344
%345 = OpLabel
OpBranch %336
%336 = OpLabel
%366 = OpLoad %uint %innerRow_2
%367 = OpIAdd %uint %366 %uint_1
OpStore %innerRow_2 %367
OpBranch %334
%335 = OpLabel
OpReturn
OpFunctionEnd
%main = OpFunction %void None %368
%370 = OpLabel
%372 = OpLoad %v3uint %local_id_1
%373 = OpLoad %v3uint %global_id_1
%374 = OpLoad %uint %local_invocation_index_1
%371 = OpFunctionCall %void %main_inner %372 %373 %374
OpReturn
OpFunctionEnd