| ; SPIR-V |
| ; Version: 1.3 |
| ; Generator: Google Tint Compiler; 0 |
| ; Bound: 402 |
| ; 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_block "uniforms_block" |
| OpMemberName %uniforms_block 0 "inner" |
| OpName %Uniforms "Uniforms" |
| OpMemberName %Uniforms 0 "dimAOuter" |
| OpMemberName %Uniforms 1 "dimInner" |
| OpMemberName %Uniforms 2 "dimBOuter" |
| OpName %uniforms "uniforms" |
| OpName %mm_Asub "mm_Asub" |
| OpName %mm_Bsub "mm_Bsub" |
| OpName %tint_zero_workgroup_memory "tint_zero_workgroup_memory" |
| OpName %local_idx "local_idx" |
| OpName %idx "idx" |
| OpName %mm_readA "mm_readA" |
| OpName %row "row" |
| OpName %col "col" |
| OpName %tint_return_flag "tint_return_flag" |
| OpName %tint_return_value "tint_return_value" |
| OpName %mm_readB "mm_readB" |
| OpName %row_0 "row" |
| OpName %col_0 "col" |
| OpName %tint_return_flag_1 "tint_return_flag_1" |
| OpName %tint_return_value_1 "tint_return_value_1" |
| OpName %mm_write "mm_write" |
| OpName %row_1 "row" |
| OpName %col_1 "col" |
| OpName %value "value" |
| OpName %tint_div "tint_div" |
| OpName %lhs "lhs" |
| OpName %rhs "rhs" |
| OpName %main_inner "main_inner" |
| OpName %local_id "local_id" |
| OpName %global_id "global_id" |
| OpName %local_invocation_index "local_invocation_index" |
| 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 DescriptorSet 0 |
| OpDecorate %resultMatrix Binding 2 |
| OpDecorate %uniforms_block Block |
| OpMemberDecorate %uniforms_block 0 Offset 0 |
| 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_uint_64 ArrayStride 4 |
| OpDecorate %_arr__arr_float_uint_64_uint_64 ArrayStride 256 |
| OpDecorate %_arr_float_uint_16 ArrayStride 4 |
| OpDecorate %_arr_float_uint_4 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 |
| %uniforms_block = OpTypeStruct %Uniforms |
| %_ptr_Uniform_uniforms_block = OpTypePointer Uniform %uniforms_block |
| %uniforms = OpVariable %_ptr_Uniform_uniforms_block Uniform |
| %uint_64 = OpConstant %uint 64 |
| %_arr_float_uint_64 = OpTypeArray %float %uint_64 |
| %_arr__arr_float_uint_64_uint_64 = OpTypeArray %_arr_float_uint_64 %uint_64 |
| %_ptr_Workgroup__arr__arr_float_uint_64_uint_64 = OpTypePointer Workgroup %_arr__arr_float_uint_64_uint_64 |
| %mm_Asub = OpVariable %_ptr_Workgroup__arr__arr_float_uint_64_uint_64 Workgroup |
| %mm_Bsub = OpVariable %_ptr_Workgroup__arr__arr_float_uint_64_uint_64 Workgroup |
| %void = OpTypeVoid |
| %25 = OpTypeFunction %void %uint |
| %_ptr_Function_uint = OpTypePointer Function %uint |
| %32 = OpConstantNull %uint |
| %uint_4096 = OpConstant %uint 4096 |
| %bool = OpTypeBool |
| %_ptr_Workgroup_float = OpTypePointer Workgroup %float |
| %50 = OpConstantNull %float |
| %uint_256 = OpConstant %uint 256 |
| %uint_2 = OpConstant %uint 2 |
| %uint_264 = OpConstant %uint 264 |
| %58 = OpTypeFunction %float %uint %uint |
| %_ptr_Function_bool = OpTypePointer Function %bool |
| %65 = OpConstantNull %bool |
| %_ptr_Function_float = OpTypePointer Function %float |
| %uint_0 = OpConstant %uint 0 |
| %_ptr_Uniform_uint = OpTypePointer Uniform %uint |
| %uint_1 = OpConstant %uint 1 |
| %_ptr_StorageBuffer_float = OpTypePointer StorageBuffer %float |
| %true = OpConstantTrue %bool |
| %123 = OpTypeFunction %void %uint %uint %float |
| %145 = OpTypeFunction %uint %uint %uint |
| %153 = OpTypeFunction %void %v3uint %v3uint %uint |
| %uint_4 = OpConstant %uint 4 |
| %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 |
| %178 = OpConstantNull %_arr_float_uint_16 |
| %_arr_float_uint_4 = OpTypeArray %float %uint_4 |
| %_ptr_Function__arr_float_uint_4 = OpTypePointer Function %_arr_float_uint_4 |
| %183 = OpConstantNull %_arr_float_uint_4 |
| %395 = OpTypeFunction %void |
| %tint_zero_workgroup_memory = OpFunction %void None %25 |
| %local_idx = OpFunctionParameter %uint |
| %29 = OpLabel |
| %idx = OpVariable %_ptr_Function_uint Function %32 |
| OpStore %idx %local_idx |
| OpBranch %33 |
| %33 = OpLabel |
| OpLoopMerge %34 %35 None |
| OpBranch %36 |
| %36 = OpLabel |
| %38 = OpLoad %uint %idx |
| %40 = OpULessThan %bool %38 %uint_4096 |
| %37 = OpLogicalNot %bool %40 |
| OpSelectionMerge %42 None |
| OpBranchConditional %37 %43 %42 |
| %43 = OpLabel |
| OpBranch %34 |
| %42 = OpLabel |
| %44 = OpLoad %uint %idx |
| %45 = OpUDiv %uint %44 %uint_64 |
| %46 = OpLoad %uint %idx |
| %47 = OpUMod %uint %46 %uint_64 |
| %49 = OpAccessChain %_ptr_Workgroup_float %mm_Asub %45 %47 |
| OpStore %49 %50 |
| %51 = OpAccessChain %_ptr_Workgroup_float %mm_Bsub %45 %47 |
| OpStore %51 %50 |
| OpBranch %35 |
| %35 = OpLabel |
| %52 = OpLoad %uint %idx |
| %54 = OpIAdd %uint %52 %uint_256 |
| OpStore %idx %54 |
| OpBranch %33 |
| %34 = OpLabel |
| OpControlBarrier %uint_2 %uint_2 %uint_264 |
| OpReturn |
| OpFunctionEnd |
| %mm_readA = OpFunction %float None %58 |
| %row = OpFunctionParameter %uint |
| %col = OpFunctionParameter %uint |
| %62 = OpLabel |
| %tint_return_flag = OpVariable %_ptr_Function_bool Function %65 |
| %tint_return_value = OpVariable %_ptr_Function_float Function %50 |
| %70 = OpAccessChain %_ptr_Uniform_uint %uniforms %uint_0 %uint_0 |
| %71 = OpLoad %uint %70 |
| %72 = OpULessThan %bool %row %71 |
| OpSelectionMerge %73 None |
| OpBranchConditional %72 %74 %73 |
| %74 = OpLabel |
| %76 = OpAccessChain %_ptr_Uniform_uint %uniforms %uint_0 %uint_1 |
| %77 = OpLoad %uint %76 |
| %78 = OpULessThan %bool %col %77 |
| OpBranch %73 |
| %73 = OpLabel |
| %79 = OpPhi %bool %72 %62 %78 %74 |
| OpSelectionMerge %80 None |
| OpBranchConditional %79 %81 %80 |
| %81 = OpLabel |
| %82 = OpAccessChain %_ptr_Uniform_uint %uniforms %uint_0 %uint_1 |
| %83 = OpLoad %uint %82 |
| %84 = OpIMul %uint %row %83 |
| %85 = OpIAdd %uint %84 %col |
| %87 = OpAccessChain %_ptr_StorageBuffer_float %firstMatrix %uint_0 %85 |
| %88 = OpLoad %float %87 |
| OpStore %tint_return_flag %true |
| OpStore %tint_return_value %88 |
| OpBranch %80 |
| %80 = OpLabel |
| %91 = OpLoad %bool %tint_return_flag |
| %90 = OpLogicalNot %bool %91 |
| OpSelectionMerge %92 None |
| OpBranchConditional %90 %93 %92 |
| %93 = OpLabel |
| OpStore %tint_return_flag %true |
| OpStore %tint_return_value %50 |
| OpBranch %92 |
| %92 = OpLabel |
| %94 = OpLoad %float %tint_return_value |
| OpReturnValue %94 |
| OpFunctionEnd |
| %mm_readB = OpFunction %float None %58 |
| %row_0 = OpFunctionParameter %uint |
| %col_0 = OpFunctionParameter %uint |
| %98 = OpLabel |
| %tint_return_flag_1 = OpVariable %_ptr_Function_bool Function %65 |
| %tint_return_value_1 = OpVariable %_ptr_Function_float Function %50 |
| %101 = OpAccessChain %_ptr_Uniform_uint %uniforms %uint_0 %uint_1 |
| %102 = OpLoad %uint %101 |
| %103 = OpULessThan %bool %row_0 %102 |
| OpSelectionMerge %104 None |
| OpBranchConditional %103 %105 %104 |
| %105 = OpLabel |
| %106 = OpAccessChain %_ptr_Uniform_uint %uniforms %uint_0 %uint_2 |
| %107 = OpLoad %uint %106 |
| %108 = OpULessThan %bool %col_0 %107 |
| OpBranch %104 |
| %104 = OpLabel |
| %109 = OpPhi %bool %103 %98 %108 %105 |
| OpSelectionMerge %110 None |
| OpBranchConditional %109 %111 %110 |
| %111 = OpLabel |
| %112 = OpAccessChain %_ptr_Uniform_uint %uniforms %uint_0 %uint_2 |
| %113 = OpLoad %uint %112 |
| %114 = OpIMul %uint %row_0 %113 |
| %115 = OpIAdd %uint %114 %col_0 |
| %116 = OpAccessChain %_ptr_StorageBuffer_float %secondMatrix %uint_0 %115 |
| %117 = OpLoad %float %116 |
| OpStore %tint_return_flag_1 %true |
| OpStore %tint_return_value_1 %117 |
| OpBranch %110 |
| %110 = OpLabel |
| %119 = OpLoad %bool %tint_return_flag_1 |
| %118 = OpLogicalNot %bool %119 |
| OpSelectionMerge %120 None |
| OpBranchConditional %118 %121 %120 |
| %121 = OpLabel |
| OpStore %tint_return_flag_1 %true |
| OpStore %tint_return_value_1 %50 |
| OpBranch %120 |
| %120 = OpLabel |
| %122 = OpLoad %float %tint_return_value_1 |
| OpReturnValue %122 |
| OpFunctionEnd |
| %mm_write = OpFunction %void None %123 |
| %row_1 = OpFunctionParameter %uint |
| %col_1 = OpFunctionParameter %uint |
| %value = OpFunctionParameter %float |
| %128 = OpLabel |
| %129 = OpAccessChain %_ptr_Uniform_uint %uniforms %uint_0 %uint_0 |
| %130 = OpLoad %uint %129 |
| %131 = OpULessThan %bool %row_1 %130 |
| OpSelectionMerge %132 None |
| OpBranchConditional %131 %133 %132 |
| %133 = OpLabel |
| %134 = OpAccessChain %_ptr_Uniform_uint %uniforms %uint_0 %uint_2 |
| %135 = OpLoad %uint %134 |
| %136 = OpULessThan %bool %col_1 %135 |
| OpBranch %132 |
| %132 = OpLabel |
| %137 = OpPhi %bool %131 %128 %136 %133 |
| OpSelectionMerge %138 None |
| OpBranchConditional %137 %139 %138 |
| %139 = OpLabel |
| %140 = OpAccessChain %_ptr_Uniform_uint %uniforms %uint_0 %uint_2 |
| %141 = OpLoad %uint %140 |
| %142 = OpIMul %uint %row_1 %141 |
| %143 = OpIAdd %uint %col_1 %142 |
| %144 = OpAccessChain %_ptr_StorageBuffer_float %resultMatrix %uint_0 %143 |
| OpStore %144 %value |
| OpBranch %138 |
| %138 = OpLabel |
| OpReturn |
| OpFunctionEnd |
| %tint_div = OpFunction %uint None %145 |
| %lhs = OpFunctionParameter %uint |
| %rhs = OpFunctionParameter %uint |
| %149 = OpLabel |
| %151 = OpIEqual %bool %rhs %32 |
| %150 = OpSelect %uint %151 %uint_1 %rhs |
| %152 = OpUDiv %uint %lhs %150 |
| OpReturnValue %152 |
| OpFunctionEnd |
| %main_inner = OpFunction %void None %153 |
| %local_id = OpFunctionParameter %v3uint |
| %global_id = OpFunctionParameter %v3uint |
| %local_invocation_index = OpFunctionParameter %uint |
| %158 = OpLabel |
| %acc = OpVariable %_ptr_Function__arr_float_uint_16 Function %178 |
| %ACached = OpVariable %_ptr_Function_float Function %50 |
| %BCached = OpVariable %_ptr_Function__arr_float_uint_4 Function %183 |
| %index = OpVariable %_ptr_Function_uint Function %32 |
| %t = OpVariable %_ptr_Function_uint Function %32 |
| %innerRow = OpVariable %_ptr_Function_uint Function %32 |
| %innerCol = OpVariable %_ptr_Function_uint Function %32 |
| %innerRow_0 = OpVariable %_ptr_Function_uint Function %32 |
| %innerCol_0 = OpVariable %_ptr_Function_uint Function %32 |
| %k = OpVariable %_ptr_Function_uint Function %32 |
| %inner = OpVariable %_ptr_Function_uint Function %32 |
| %innerRow_1 = OpVariable %_ptr_Function_uint Function %32 |
| %innerCol_1 = OpVariable %_ptr_Function_uint Function %32 |
| %innerRow_2 = OpVariable %_ptr_Function_uint Function %32 |
| %innerCol_2 = OpVariable %_ptr_Function_uint Function %32 |
| %159 = OpFunctionCall %void %tint_zero_workgroup_memory %local_invocation_index |
| %160 = OpCompositeExtract %uint %local_id 1 |
| %162 = OpIMul %uint %160 %uint_4 |
| %163 = OpCompositeExtract %uint %local_id 0 |
| %164 = OpIMul %uint %163 %uint_4 |
| %165 = OpCompositeExtract %uint %global_id 1 |
| %166 = OpIMul %uint %165 %uint_4 |
| %167 = OpCompositeExtract %uint %global_id 0 |
| %168 = OpIMul %uint %167 %uint_4 |
| %170 = OpAccessChain %_ptr_Uniform_uint %uniforms %uint_0 %uint_1 |
| %171 = OpLoad %uint %170 |
| %172 = OpISub %uint %171 %uint_1 |
| %169 = OpFunctionCall %uint %tint_div %172 %uint_64 |
| %173 = OpIAdd %uint %169 %uint_1 |
| OpStore %index %32 |
| OpBranch %185 |
| %185 = OpLabel |
| OpLoopMerge %186 %187 None |
| OpBranch %188 |
| %188 = OpLabel |
| %190 = OpLoad %uint %index |
| %191 = OpULessThan %bool %190 %uint_16 |
| %189 = OpLogicalNot %bool %191 |
| OpSelectionMerge %192 None |
| OpBranchConditional %189 %193 %192 |
| %193 = OpLabel |
| OpBranch %186 |
| %192 = OpLabel |
| %194 = OpLoad %uint %index |
| %195 = OpAccessChain %_ptr_Function_float %acc %194 |
| OpStore %195 %50 |
| OpBranch %187 |
| %187 = OpLabel |
| %196 = OpLoad %uint %index |
| %197 = OpIAdd %uint %196 %uint_1 |
| OpStore %index %197 |
| OpBranch %185 |
| %186 = OpLabel |
| %198 = OpCompositeExtract %uint %local_id 0 |
| %199 = OpIMul %uint %198 %uint_4 |
| %200 = OpCompositeExtract %uint %local_id 1 |
| %201 = OpIMul %uint %200 %uint_4 |
| OpStore %t %32 |
| OpBranch %203 |
| %203 = OpLabel |
| OpLoopMerge %204 %205 None |
| OpBranch %206 |
| %206 = OpLabel |
| %208 = OpLoad %uint %t |
| %209 = OpULessThan %bool %208 %173 |
| %207 = OpLogicalNot %bool %209 |
| OpSelectionMerge %210 None |
| OpBranchConditional %207 %211 %210 |
| %211 = OpLabel |
| OpBranch %204 |
| %210 = OpLabel |
| OpStore %innerRow %32 |
| OpBranch %213 |
| %213 = OpLabel |
| OpLoopMerge %214 %215 None |
| OpBranch %216 |
| %216 = OpLabel |
| %218 = OpLoad %uint %innerRow |
| %219 = OpULessThan %bool %218 %uint_4 |
| %217 = OpLogicalNot %bool %219 |
| OpSelectionMerge %220 None |
| OpBranchConditional %217 %221 %220 |
| %221 = OpLabel |
| OpBranch %214 |
| %220 = OpLabel |
| OpStore %innerCol %32 |
| OpBranch %223 |
| %223 = OpLabel |
| OpLoopMerge %224 %225 None |
| OpBranch %226 |
| %226 = OpLabel |
| %228 = OpLoad %uint %innerCol |
| %229 = OpULessThan %bool %228 %uint_4 |
| %227 = OpLogicalNot %bool %229 |
| OpSelectionMerge %230 None |
| OpBranchConditional %227 %231 %230 |
| %231 = OpLabel |
| OpBranch %224 |
| %230 = OpLabel |
| %232 = OpLoad %uint %innerRow |
| %233 = OpIAdd %uint %162 %232 |
| %234 = OpLoad %uint %innerCol |
| %235 = OpIAdd %uint %199 %234 |
| %236 = OpAccessChain %_ptr_Workgroup_float %mm_Asub %233 %235 |
| %238 = OpLoad %uint %innerRow |
| %239 = OpIAdd %uint %166 %238 |
| %240 = OpLoad %uint %t |
| %241 = OpIMul %uint %240 %uint_64 |
| %242 = OpIAdd %uint %241 %235 |
| %237 = OpFunctionCall %float %mm_readA %239 %242 |
| OpStore %236 %237 |
| OpBranch %225 |
| %225 = OpLabel |
| %243 = OpLoad %uint %innerCol |
| %244 = OpIAdd %uint %243 %uint_1 |
| OpStore %innerCol %244 |
| OpBranch %223 |
| %224 = OpLabel |
| OpBranch %215 |
| %215 = OpLabel |
| %245 = OpLoad %uint %innerRow |
| %246 = OpIAdd %uint %245 %uint_1 |
| OpStore %innerRow %246 |
| OpBranch %213 |
| %214 = OpLabel |
| OpStore %innerRow_0 %32 |
| OpBranch %248 |
| %248 = OpLabel |
| OpLoopMerge %249 %250 None |
| OpBranch %251 |
| %251 = OpLabel |
| %253 = OpLoad %uint %innerRow_0 |
| %254 = OpULessThan %bool %253 %uint_4 |
| %252 = OpLogicalNot %bool %254 |
| OpSelectionMerge %255 None |
| OpBranchConditional %252 %256 %255 |
| %256 = OpLabel |
| OpBranch %249 |
| %255 = OpLabel |
| OpStore %innerCol_0 %32 |
| OpBranch %258 |
| %258 = OpLabel |
| OpLoopMerge %259 %260 None |
| OpBranch %261 |
| %261 = OpLabel |
| %263 = OpLoad %uint %innerCol_0 |
| %264 = OpULessThan %bool %263 %uint_4 |
| %262 = OpLogicalNot %bool %264 |
| OpSelectionMerge %265 None |
| OpBranchConditional %262 %266 %265 |
| %266 = OpLabel |
| OpBranch %259 |
| %265 = OpLabel |
| %267 = OpLoad %uint %innerRow_0 |
| %268 = OpIAdd %uint %201 %267 |
| %269 = OpLoad %uint %innerCol_0 |
| %270 = OpIAdd %uint %164 %269 |
| %271 = OpLoad %uint %innerCol_0 |
| %272 = OpAccessChain %_ptr_Workgroup_float %mm_Bsub %271 %270 |
| %274 = OpLoad %uint %t |
| %275 = OpIMul %uint %274 %uint_64 |
| %276 = OpIAdd %uint %275 %268 |
| %277 = OpLoad %uint %innerCol_0 |
| %278 = OpIAdd %uint %168 %277 |
| %273 = OpFunctionCall %float %mm_readB %276 %278 |
| OpStore %272 %273 |
| OpBranch %260 |
| %260 = OpLabel |
| %279 = OpLoad %uint %innerCol_0 |
| %280 = OpIAdd %uint %279 %uint_1 |
| OpStore %innerCol_0 %280 |
| OpBranch %258 |
| %259 = OpLabel |
| OpBranch %250 |
| %250 = OpLabel |
| %281 = OpLoad %uint %innerRow_0 |
| %282 = OpIAdd %uint %281 %uint_1 |
| OpStore %innerRow_0 %282 |
| OpBranch %248 |
| %249 = OpLabel |
| OpControlBarrier %uint_2 %uint_2 %uint_264 |
| OpStore %k %32 |
| OpBranch %285 |
| %285 = OpLabel |
| OpLoopMerge %286 %287 None |
| OpBranch %288 |
| %288 = OpLabel |
| %290 = OpLoad %uint %k |
| %291 = OpULessThan %bool %290 %uint_64 |
| %289 = OpLogicalNot %bool %291 |
| OpSelectionMerge %292 None |
| OpBranchConditional %289 %293 %292 |
| %293 = OpLabel |
| OpBranch %286 |
| %292 = OpLabel |
| OpStore %inner %32 |
| OpBranch %295 |
| %295 = OpLabel |
| OpLoopMerge %296 %297 None |
| OpBranch %298 |
| %298 = OpLabel |
| %300 = OpLoad %uint %inner |
| %301 = OpULessThan %bool %300 %uint_4 |
| %299 = OpLogicalNot %bool %301 |
| OpSelectionMerge %302 None |
| OpBranchConditional %299 %303 %302 |
| %303 = OpLabel |
| OpBranch %296 |
| %302 = OpLabel |
| %304 = OpLoad %uint %inner |
| %305 = OpAccessChain %_ptr_Function_float %BCached %304 |
| %306 = OpLoad %uint %k |
| %307 = OpLoad %uint %inner |
| %308 = OpIAdd %uint %164 %307 |
| %309 = OpAccessChain %_ptr_Workgroup_float %mm_Bsub %306 %308 |
| %310 = OpLoad %float %309 |
| OpStore %305 %310 |
| OpBranch %297 |
| %297 = OpLabel |
| %311 = OpLoad %uint %inner |
| %312 = OpIAdd %uint %311 %uint_1 |
| OpStore %inner %312 |
| OpBranch %295 |
| %296 = OpLabel |
| OpStore %innerRow_1 %32 |
| OpBranch %314 |
| %314 = OpLabel |
| OpLoopMerge %315 %316 None |
| OpBranch %317 |
| %317 = OpLabel |
| %319 = OpLoad %uint %innerRow_1 |
| %320 = OpULessThan %bool %319 %uint_4 |
| %318 = OpLogicalNot %bool %320 |
| OpSelectionMerge %321 None |
| OpBranchConditional %318 %322 %321 |
| %322 = OpLabel |
| OpBranch %315 |
| %321 = OpLabel |
| %323 = OpLoad %uint %innerRow_1 |
| %324 = OpIAdd %uint %162 %323 |
| %325 = OpLoad %uint %k |
| %326 = OpAccessChain %_ptr_Workgroup_float %mm_Asub %324 %325 |
| %327 = OpLoad %float %326 |
| OpStore %ACached %327 |
| OpStore %innerCol_1 %32 |
| OpBranch %329 |
| %329 = OpLabel |
| OpLoopMerge %330 %331 None |
| OpBranch %332 |
| %332 = OpLabel |
| %334 = OpLoad %uint %innerCol_1 |
| %335 = OpULessThan %bool %334 %uint_4 |
| %333 = OpLogicalNot %bool %335 |
| OpSelectionMerge %336 None |
| OpBranchConditional %333 %337 %336 |
| %337 = OpLabel |
| OpBranch %330 |
| %336 = OpLabel |
| %338 = OpLoad %uint %innerRow_1 |
| %339 = OpIMul %uint %338 %uint_4 |
| %340 = OpLoad %uint %innerCol_1 |
| %341 = OpIAdd %uint %339 %340 |
| %342 = OpAccessChain %_ptr_Function_float %acc %341 |
| %343 = OpAccessChain %_ptr_Function_float %acc %341 |
| %344 = OpLoad %float %343 |
| %345 = OpLoad %float %ACached |
| %346 = OpLoad %uint %innerCol_1 |
| %347 = OpAccessChain %_ptr_Function_float %BCached %346 |
| %348 = OpLoad %float %347 |
| %349 = OpFMul %float %345 %348 |
| %350 = OpFAdd %float %344 %349 |
| OpStore %342 %350 |
| OpBranch %331 |
| %331 = OpLabel |
| %351 = OpLoad %uint %innerCol_1 |
| %352 = OpIAdd %uint %351 %uint_1 |
| OpStore %innerCol_1 %352 |
| OpBranch %329 |
| %330 = OpLabel |
| OpBranch %316 |
| %316 = OpLabel |
| %353 = OpLoad %uint %innerRow_1 |
| %354 = OpIAdd %uint %353 %uint_1 |
| OpStore %innerRow_1 %354 |
| OpBranch %314 |
| %315 = OpLabel |
| OpBranch %287 |
| %287 = OpLabel |
| %355 = OpLoad %uint %k |
| %356 = OpIAdd %uint %355 %uint_1 |
| OpStore %k %356 |
| OpBranch %285 |
| %286 = OpLabel |
| OpControlBarrier %uint_2 %uint_2 %uint_264 |
| OpBranch %205 |
| %205 = OpLabel |
| %358 = OpLoad %uint %t |
| %359 = OpIAdd %uint %358 %uint_1 |
| OpStore %t %359 |
| OpBranch %203 |
| %204 = OpLabel |
| OpStore %innerRow_2 %32 |
| OpBranch %361 |
| %361 = OpLabel |
| OpLoopMerge %362 %363 None |
| OpBranch %364 |
| %364 = OpLabel |
| %366 = OpLoad %uint %innerRow_2 |
| %367 = OpULessThan %bool %366 %uint_4 |
| %365 = OpLogicalNot %bool %367 |
| OpSelectionMerge %368 None |
| OpBranchConditional %365 %369 %368 |
| %369 = OpLabel |
| OpBranch %362 |
| %368 = OpLabel |
| OpStore %innerCol_2 %32 |
| OpBranch %371 |
| %371 = OpLabel |
| OpLoopMerge %372 %373 None |
| OpBranch %374 |
| %374 = OpLabel |
| %376 = OpLoad %uint %innerCol_2 |
| %377 = OpULessThan %bool %376 %uint_4 |
| %375 = OpLogicalNot %bool %377 |
| OpSelectionMerge %378 None |
| OpBranchConditional %375 %379 %378 |
| %379 = OpLabel |
| OpBranch %372 |
| %378 = OpLabel |
| %380 = OpLoad %uint %innerRow_2 |
| %381 = OpIMul %uint %380 %uint_4 |
| %382 = OpLoad %uint %innerCol_2 |
| %383 = OpIAdd %uint %381 %382 |
| %385 = OpLoad %uint %innerRow_2 |
| %386 = OpIAdd %uint %166 %385 |
| %387 = OpLoad %uint %innerCol_2 |
| %388 = OpIAdd %uint %168 %387 |
| %389 = OpAccessChain %_ptr_Function_float %acc %383 |
| %390 = OpLoad %float %389 |
| %384 = OpFunctionCall %void %mm_write %386 %388 %390 |
| OpBranch %373 |
| %373 = OpLabel |
| %391 = OpLoad %uint %innerCol_2 |
| %392 = OpIAdd %uint %391 %uint_1 |
| OpStore %innerCol_2 %392 |
| OpBranch %371 |
| %372 = OpLabel |
| OpBranch %363 |
| %363 = OpLabel |
| %393 = OpLoad %uint %innerRow_2 |
| %394 = OpIAdd %uint %393 %uint_1 |
| OpStore %innerRow_2 %394 |
| OpBranch %361 |
| %362 = OpLabel |
| OpReturn |
| OpFunctionEnd |
| %main = OpFunction %void None %395 |
| %397 = OpLabel |
| %399 = OpLoad %v3uint %local_id_1 |
| %400 = OpLoad %v3uint %global_id_1 |
| %401 = OpLoad %uint %local_invocation_index_1 |
| %398 = OpFunctionCall %void %main_inner %399 %400 %401 |
| OpReturn |
| OpFunctionEnd |