| ; SPIR-V |
| ; Version: 1.3 |
| ; Generator: Google Tint Compiler; 0 |
| ; Bound: 609 |
| ; Schema: 0 |
| OpCapability Shader |
| OpMemoryModel Logical GLSL450 |
| OpEntryPoint GLCompute %main "main" %tint_symbol_2 %tint_symbol %tint_symbol_1 |
| OpExecutionMode %main LocalSize 1 64 1 |
| OpName %dimAOuter_1 "dimAOuter_1" |
| OpName %Uniforms "Uniforms" |
| OpMemberName %Uniforms 0 "NAN" |
| OpMemberName %Uniforms 1 "aShape" |
| OpMemberName %Uniforms 2 "bShape" |
| OpMemberName %Uniforms 3 "outShape" |
| OpMemberName %Uniforms 4 "outShapeStrides" |
| OpName %x_48 "x_48" |
| OpName %dimInner_1 "dimInner_1" |
| OpName %dimBOuter_1 "dimBOuter_1" |
| OpName %ssbOut "ssbOut" |
| OpMemberName %ssbOut 0 "result" |
| OpName %x_54 "x_54" |
| OpName %gl_LocalInvocationID "gl_LocalInvocationID" |
| OpName %gl_GlobalInvocationID "gl_GlobalInvocationID" |
| OpName %mm_Asub "mm_Asub" |
| OpName %mm_Bsub "mm_Bsub" |
| OpName %ssbA "ssbA" |
| OpMemberName %ssbA 0 "A" |
| OpName %x_165 "x_165" |
| OpName %batch "batch" |
| OpName %ssbB "ssbB" |
| OpMemberName %ssbB 0 "B" |
| OpName %x_185 "x_185" |
| OpName %tint_symbol "tint_symbol" |
| OpName %tint_symbol_1 "tint_symbol_1" |
| OpName %tint_symbol_2 "tint_symbol_2" |
| OpName %coordsInBounds_vi2_vi2_ "coordsInBounds_vi2_vi2_" |
| OpName %coord "coord" |
| OpName %shape "shape" |
| OpName %x_87 "x_87" |
| OpName %x_88_phi "x_88_phi" |
| OpName %mm_readA_i1_i1_ "mm_readA_i1_i1_" |
| OpName %row "row" |
| OpName %col "col" |
| OpName %batchASize "batchASize" |
| OpName %param_10 "param_10" |
| OpName %param_11 "param_11" |
| OpName %x_430 "x_430" |
| OpName %mm_readB_i1_i1_ "mm_readB_i1_i1_" |
| OpName %row_1 "row_1" |
| OpName %col_1 "col_1" |
| OpName %batchBSize "batchBSize" |
| OpName %param_12 "param_12" |
| OpName %param_13 "param_13" |
| OpName %x_468 "x_468" |
| OpName %getOutputFlatIndex_vi3_ "getOutputFlatIndex_vi3_" |
| OpName %coords "coords" |
| OpName %setOutput_i1_f1_ "setOutput_i1_f1_" |
| OpName %flatIndex "flatIndex" |
| OpName %value "value" |
| OpName %setOutput_i1_i1_i1_f1_ "setOutput_i1_i1_i1_f1_" |
| OpName %d0 "d0" |
| OpName %d1 "d1" |
| OpName %d2 "d2" |
| OpName %value_1 "value_1" |
| OpName %flatIndex_1 "flatIndex_1" |
| OpName %param "param" |
| OpName %param_1 "param_1" |
| OpName %param_2 "param_2" |
| OpName %mm_write_i1_i1_f1_ "mm_write_i1_i1_f1_" |
| OpName %row_2 "row_2" |
| OpName %col_2 "col_2" |
| OpName %value_2 "value_2" |
| OpName %outCoord "outCoord" |
| OpName %param_14 "param_14" |
| OpName %param_15 "param_15" |
| OpName %param_16 "param_16" |
| OpName %param_17 "param_17" |
| OpName %mm_matMul_i1_i1_i1_ "mm_matMul_i1_i1_i1_" |
| OpName %dimAOuter "dimAOuter" |
| OpName %dimInner "dimInner" |
| OpName %dimBOuter "dimBOuter" |
| OpName %tileRow "tileRow" |
| OpName %tileCol "tileCol" |
| OpName %globalRow "globalRow" |
| OpName %globalCol "globalCol" |
| OpName %numTiles "numTiles" |
| OpName %innerRow "innerRow" |
| OpName %innerCol "innerCol" |
| OpName %acc "acc" |
| OpName %tileColA "tileColA" |
| OpName %tileRowB "tileRowB" |
| OpName %t "t" |
| OpName %innerRow_1 "innerRow_1" |
| OpName %innerCol_1 "innerCol_1" |
| OpName %inputRow "inputRow" |
| OpName %inputCol "inputCol" |
| OpName %param_3 "param_3" |
| OpName %param_4 "param_4" |
| OpName %innerRow_2 "innerRow_2" |
| OpName %innerCol_2 "innerCol_2" |
| OpName %inputRow_1 "inputRow_1" |
| OpName %inputCol_1 "inputCol_1" |
| OpName %param_5 "param_5" |
| OpName %param_6 "param_6" |
| OpName %k "k" |
| OpName %inner "inner" |
| OpName %BCached "BCached" |
| OpName %innerRow_3 "innerRow_3" |
| OpName %ACached "ACached" |
| OpName %innerCol_3 "innerCol_3" |
| OpName %innerRow_4 "innerRow_4" |
| OpName %innerCol_4 "innerCol_4" |
| OpName %param_7 "param_7" |
| OpName %param_8 "param_8" |
| OpName %param_9 "param_9" |
| OpName %x_393 "x_393" |
| OpName %x_394_phi "x_394_phi" |
| OpName %main_1 "main_1" |
| OpName %param_18 "param_18" |
| OpName %param_19 "param_19" |
| OpName %param_20 "param_20" |
| OpName %main "main" |
| OpDecorate %Uniforms Block |
| OpMemberDecorate %Uniforms 0 Offset 0 |
| OpMemberDecorate %Uniforms 1 Offset 16 |
| OpMemberDecorate %Uniforms 2 Offset 32 |
| OpMemberDecorate %Uniforms 3 Offset 48 |
| OpMemberDecorate %Uniforms 4 Offset 64 |
| OpDecorate %x_48 NonWritable |
| OpDecorate %x_48 DescriptorSet 0 |
| OpDecorate %x_48 Binding 3 |
| OpDecorate %ssbOut Block |
| OpMemberDecorate %ssbOut 0 Offset 0 |
| OpDecorate %_runtimearr_float ArrayStride 4 |
| OpDecorate %x_54 DescriptorSet 0 |
| OpDecorate %x_54 Binding 0 |
| OpDecorate %_arr_float_uint_64 ArrayStride 4 |
| OpDecorate %_arr__arr_float_uint_64_uint_64 ArrayStride 256 |
| OpDecorate %_arr_float_uint_1 ArrayStride 4 |
| OpDecorate %_arr__arr_float_uint_1_uint_64 ArrayStride 4 |
| OpDecorate %ssbA Block |
| OpMemberDecorate %ssbA 0 Offset 0 |
| OpDecorate %x_165 NonWritable |
| OpDecorate %x_165 DescriptorSet 0 |
| OpDecorate %x_165 Binding 1 |
| OpDecorate %ssbB Block |
| OpMemberDecorate %ssbB 0 Offset 0 |
| OpDecorate %x_185 NonWritable |
| OpDecorate %x_185 DescriptorSet 0 |
| OpDecorate %x_185 Binding 2 |
| OpDecorate %tint_symbol BuiltIn LocalInvocationId |
| OpDecorate %tint_symbol_1 BuiltIn GlobalInvocationId |
| OpDecorate %tint_symbol_2 BuiltIn LocalInvocationIndex |
| OpDecorate %_arr__arr_float_uint_1_uint_1 ArrayStride 4 |
| %int = OpTypeInt 32 1 |
| %_ptr_Private_int = OpTypePointer Private %int |
| %4 = OpConstantNull %int |
| %dimAOuter_1 = OpVariable %_ptr_Private_int Private %4 |
| %float = OpTypeFloat 32 |
| %v3int = OpTypeVector %int 3 |
| %v2int = OpTypeVector %int 2 |
| %Uniforms = OpTypeStruct %float %v3int %v3int %v3int %v2int |
| %_ptr_Uniform_Uniforms = OpTypePointer Uniform %Uniforms |
| %x_48 = OpVariable %_ptr_Uniform_Uniforms Uniform |
| %dimInner_1 = OpVariable %_ptr_Private_int Private %4 |
| %dimBOuter_1 = OpVariable %_ptr_Private_int Private %4 |
| %_runtimearr_float = OpTypeRuntimeArray %float |
| %ssbOut = OpTypeStruct %_runtimearr_float |
| %_ptr_StorageBuffer_ssbOut = OpTypePointer StorageBuffer %ssbOut |
| %x_54 = OpVariable %_ptr_StorageBuffer_ssbOut StorageBuffer |
| %uint = OpTypeInt 32 0 |
| %v3uint = OpTypeVector %uint 3 |
| %_ptr_Private_v3uint = OpTypePointer Private %v3uint |
| %21 = OpConstantNull %v3uint |
| %gl_LocalInvocationID = OpVariable %_ptr_Private_v3uint Private %21 |
| %gl_GlobalInvocationID = OpVariable %_ptr_Private_v3uint Private %21 |
| %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 |
| %uint_1 = OpConstant %uint 1 |
| %_arr_float_uint_1 = OpTypeArray %float %uint_1 |
| %_arr__arr_float_uint_1_uint_64 = OpTypeArray %_arr_float_uint_1 %uint_64 |
| %_ptr_Workgroup__arr__arr_float_uint_1_uint_64 = OpTypePointer Workgroup %_arr__arr_float_uint_1_uint_64 |
| %mm_Bsub = OpVariable %_ptr_Workgroup__arr__arr_float_uint_1_uint_64 Workgroup |
| %ssbA = OpTypeStruct %_runtimearr_float |
| %_ptr_StorageBuffer_ssbA = OpTypePointer StorageBuffer %ssbA |
| %x_165 = OpVariable %_ptr_StorageBuffer_ssbA StorageBuffer |
| %batch = OpVariable %_ptr_Private_int Private %4 |
| %ssbB = OpTypeStruct %_runtimearr_float |
| %_ptr_StorageBuffer_ssbB = OpTypePointer StorageBuffer %ssbB |
| %x_185 = OpVariable %_ptr_StorageBuffer_ssbB StorageBuffer |
| %_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 |
| %bool = OpTypeBool |
| %_ptr_Function_v2int = OpTypePointer Function %v2int |
| %45 = OpTypeFunction %bool %_ptr_Function_v2int %_ptr_Function_v2int |
| %_ptr_Function_bool = OpTypePointer Function %bool |
| %54 = OpConstantNull %bool |
| %int_0 = OpConstant %int 0 |
| %60 = OpConstantComposite %v2int %int_0 %int_0 |
| %v2bool = OpTypeVector %bool 2 |
| %_ptr_Function_int = OpTypePointer Function %int |
| %73 = OpTypeFunction %float %_ptr_Function_int %_ptr_Function_int |
| %81 = OpConstantNull %v2int |
| %_ptr_Function_float = OpTypePointer Function %float |
| %85 = OpConstantNull %float |
| %_ptr_Uniform_int = OpTypePointer Uniform %int |
| %uint_2 = OpConstant %uint 2 |
| %uint_0 = OpConstant %uint 0 |
| %_ptr_StorageBuffer_float = OpTypePointer StorageBuffer %float |
| %float_0 = OpConstant %float 0 |
| %_ptr_Function_v3int = OpTypePointer Function %v3int |
| %165 = OpTypeFunction %int %_ptr_Function_v3int |
| %uint_4 = OpConstant %uint 4 |
| %v3float = OpTypeVector %float 3 |
| %int_1 = OpConstant %int 1 |
| %void = OpTypeVoid |
| %184 = OpTypeFunction %void %_ptr_Function_int %_ptr_Function_float |
| %195 = OpTypeFunction %void %_ptr_Function_int %_ptr_Function_int %_ptr_Function_int %_ptr_Function_float |
| %204 = OpConstantNull %v3int |
| %222 = OpTypeFunction %void %_ptr_Function_int %_ptr_Function_int %_ptr_Function_float |
| %251 = OpTypeFunction %void %_ptr_Function_int %_ptr_Function_int %_ptr_Function_int |
| %_arr__arr_float_uint_1_uint_1 = OpTypeArray %_arr_float_uint_1 %uint_1 |
| %_ptr_Function__arr__arr_float_uint_1_uint_1 = OpTypePointer Function %_arr__arr_float_uint_1_uint_1 |
| %267 = OpConstantNull %_arr__arr_float_uint_1_uint_1 |
| %_ptr_Function__arr_float_uint_1 = OpTypePointer Function %_arr_float_uint_1 |
| %287 = OpConstantNull %_arr_float_uint_1 |
| %_ptr_Private_uint = OpTypePointer Private %uint |
| %int_64 = OpConstant %int 64 |
| %_ptr_Workgroup_float = OpTypePointer Workgroup %float |
| %uint_264 = OpConstant %uint 264 |
| %575 = OpTypeFunction %void |
| %603 = OpConstantNull %_arr__arr_float_uint_64_uint_64 |
| %604 = OpConstantNull %_arr__arr_float_uint_1_uint_64 |
| %coordsInBounds_vi2_vi2_ = OpFunction %bool None %45 |
| %coord = OpFunctionParameter %_ptr_Function_v2int |
| %shape = OpFunctionParameter %_ptr_Function_v2int |
| %51 = OpLabel |
| %x_87 = OpVariable %_ptr_Function_bool Function %54 |
| %x_88_phi = OpVariable %_ptr_Function_bool Function %54 |
| %57 = OpLoad %v2int %coord |
| %61 = OpSGreaterThanEqual %v2bool %57 %60 |
| %58 = OpAll %bool %61 |
| OpStore %x_88_phi %58 |
| OpSelectionMerge %63 None |
| OpBranchConditional %58 %64 %63 |
| %64 = OpLabel |
| %66 = OpLoad %v2int %coord |
| %68 = OpLoad %v2int %shape |
| %70 = OpSLessThan %v2bool %66 %68 |
| %69 = OpAll %bool %70 |
| OpStore %x_87 %69 |
| %71 = OpLoad %bool %x_87 |
| OpStore %x_88_phi %71 |
| OpBranch %63 |
| %63 = OpLabel |
| %72 = OpLoad %bool %x_88_phi |
| OpReturnValue %72 |
| OpFunctionEnd |
| %mm_readA_i1_i1_ = OpFunction %float None %73 |
| %row = OpFunctionParameter %_ptr_Function_int |
| %col = OpFunctionParameter %_ptr_Function_int |
| %78 = OpLabel |
| %batchASize = OpVariable %_ptr_Function_int Function %4 |
| %param_10 = OpVariable %_ptr_Function_v2int Function %81 |
| %param_11 = OpVariable %_ptr_Function_v2int Function %81 |
| %x_430 = OpVariable %_ptr_Function_float Function %85 |
| %87 = OpAccessChain %_ptr_Uniform_int %x_48 %uint_1 %uint_1 |
| %88 = OpLoad %int %87 |
| %90 = OpAccessChain %_ptr_Uniform_int %x_48 %uint_1 %uint_2 |
| %91 = OpLoad %int %90 |
| %92 = OpIMul %int %88 %91 |
| OpStore %batchASize %92 |
| %94 = OpLoad %int %row |
| %96 = OpLoad %int %col |
| %97 = OpLoad %int %dimAOuter_1 |
| %98 = OpLoad %int %dimInner_1 |
| %99 = OpCompositeConstruct %v2int %94 %96 |
| OpStore %param_10 %99 |
| %100 = OpCompositeConstruct %v2int %97 %98 |
| OpStore %param_11 %100 |
| %101 = OpFunctionCall %bool %coordsInBounds_vi2_vi2_ %param_10 %param_11 |
| OpSelectionMerge %104 None |
| OpBranchConditional %101 %105 %106 |
| %105 = OpLabel |
| %107 = OpLoad %int %batch |
| %108 = OpLoad %int %batchASize |
| %110 = OpLoad %int %row |
| %111 = OpLoad %int %dimInner_1 |
| %113 = OpLoad %int %col |
| %115 = OpIMul %int %107 %108 |
| %116 = OpIMul %int %110 %111 |
| %117 = OpIAdd %int %115 %116 |
| %118 = OpIAdd %int %117 %113 |
| %120 = OpAccessChain %_ptr_StorageBuffer_float %x_165 %uint_0 %118 |
| %121 = OpLoad %float %120 |
| OpStore %x_430 %121 |
| OpBranch %104 |
| %106 = OpLabel |
| OpStore %x_430 %float_0 |
| OpBranch %104 |
| %104 = OpLabel |
| %123 = OpLoad %float %x_430 |
| OpReturnValue %123 |
| OpFunctionEnd |
| %mm_readB_i1_i1_ = OpFunction %float None %73 |
| %row_1 = OpFunctionParameter %_ptr_Function_int |
| %col_1 = OpFunctionParameter %_ptr_Function_int |
| %127 = OpLabel |
| %batchBSize = OpVariable %_ptr_Function_int Function %4 |
| %param_12 = OpVariable %_ptr_Function_v2int Function %81 |
| %param_13 = OpVariable %_ptr_Function_v2int Function %81 |
| %x_468 = OpVariable %_ptr_Function_float Function %85 |
| %132 = OpAccessChain %_ptr_Uniform_int %x_48 %uint_2 %uint_1 |
| %133 = OpLoad %int %132 |
| %134 = OpAccessChain %_ptr_Uniform_int %x_48 %uint_2 %uint_2 |
| %135 = OpLoad %int %134 |
| %136 = OpIMul %int %133 %135 |
| OpStore %batchBSize %136 |
| %138 = OpLoad %int %row_1 |
| %140 = OpLoad %int %col_1 |
| %141 = OpLoad %int %dimInner_1 |
| %142 = OpLoad %int %dimBOuter_1 |
| %143 = OpCompositeConstruct %v2int %138 %140 |
| OpStore %param_12 %143 |
| %144 = OpCompositeConstruct %v2int %141 %142 |
| OpStore %param_13 %144 |
| %145 = OpFunctionCall %bool %coordsInBounds_vi2_vi2_ %param_12 %param_13 |
| OpSelectionMerge %148 None |
| OpBranchConditional %145 %149 %150 |
| %149 = OpLabel |
| %151 = OpLoad %int %batch |
| %152 = OpLoad %int %batchBSize |
| %154 = OpLoad %int %row_1 |
| %155 = OpLoad %int %dimBOuter_1 |
| %157 = OpLoad %int %col_1 |
| %158 = OpIMul %int %151 %152 |
| %159 = OpIMul %int %154 %155 |
| %160 = OpIAdd %int %158 %159 |
| %161 = OpIAdd %int %160 %157 |
| %162 = OpAccessChain %_ptr_StorageBuffer_float %x_185 %uint_0 %161 |
| %163 = OpLoad %float %162 |
| OpStore %x_468 %163 |
| OpBranch %148 |
| %150 = OpLabel |
| OpStore %x_468 %float_0 |
| OpBranch %148 |
| %148 = OpLabel |
| %164 = OpLoad %float %x_468 |
| OpReturnValue %164 |
| OpFunctionEnd |
| %getOutputFlatIndex_vi3_ = OpFunction %int None %165 |
| %coords = OpFunctionParameter %_ptr_Function_v3int |
| %169 = OpLabel |
| %171 = OpLoad %v3int %coords |
| %173 = OpAccessChain %_ptr_Uniform_int %x_48 %uint_4 %uint_0 |
| %174 = OpLoad %int %173 |
| %175 = OpAccessChain %_ptr_Uniform_int %x_48 %uint_4 %uint_1 |
| %176 = OpLoad %int %175 |
| %179 = OpConvertSToF %v3float %171 |
| %183 = OpCompositeConstruct %v3int %174 %176 %int_1 |
| %181 = OpConvertSToF %v3float %183 |
| %178 = OpDot %float %179 %181 |
| %177 = OpConvertFToS %int %178 |
| OpReturnValue %177 |
| OpFunctionEnd |
| %setOutput_i1_f1_ = OpFunction %void None %184 |
| %flatIndex = OpFunctionParameter %_ptr_Function_int |
| %value = OpFunctionParameter %_ptr_Function_float |
| %189 = OpLabel |
| %191 = OpLoad %int %flatIndex |
| %193 = OpLoad %float %value |
| %194 = OpAccessChain %_ptr_StorageBuffer_float %x_54 %uint_0 %191 |
| OpStore %194 %193 |
| OpReturn |
| OpFunctionEnd |
| %setOutput_i1_i1_i1_f1_ = OpFunction %void None %195 |
| %d0 = OpFunctionParameter %_ptr_Function_int |
| %d1 = OpFunctionParameter %_ptr_Function_int |
| %d2 = OpFunctionParameter %_ptr_Function_int |
| %value_1 = OpFunctionParameter %_ptr_Function_float |
| %201 = OpLabel |
| %flatIndex_1 = OpVariable %_ptr_Function_int Function %4 |
| %param = OpVariable %_ptr_Function_v3int Function %204 |
| %param_1 = OpVariable %_ptr_Function_int Function %4 |
| %param_2 = OpVariable %_ptr_Function_float Function %85 |
| %208 = OpLoad %int %d0 |
| %210 = OpLoad %int %d1 |
| %212 = OpLoad %int %d2 |
| %213 = OpCompositeConstruct %v3int %208 %210 %212 |
| OpStore %param %213 |
| %214 = OpFunctionCall %int %getOutputFlatIndex_vi3_ %param |
| OpStore %flatIndex_1 %214 |
| %216 = OpLoad %int %flatIndex_1 |
| OpStore %param_1 %216 |
| %218 = OpLoad %float %value_1 |
| OpStore %param_2 %218 |
| %219 = OpFunctionCall %void %setOutput_i1_f1_ %param_1 %param_2 |
| OpReturn |
| OpFunctionEnd |
| %mm_write_i1_i1_f1_ = OpFunction %void None %222 |
| %row_2 = OpFunctionParameter %_ptr_Function_int |
| %col_2 = OpFunctionParameter %_ptr_Function_int |
| %value_2 = OpFunctionParameter %_ptr_Function_float |
| %227 = OpLabel |
| %outCoord = OpVariable %_ptr_Function_v3int Function %204 |
| %param_14 = OpVariable %_ptr_Function_int Function %4 |
| %param_15 = OpVariable %_ptr_Function_int Function %4 |
| %param_16 = OpVariable %_ptr_Function_int Function %4 |
| %param_17 = OpVariable %_ptr_Function_float Function %85 |
| %233 = OpLoad %int %batch |
| %235 = OpLoad %int %row_2 |
| %237 = OpLoad %int %col_2 |
| %238 = OpCompositeConstruct %v3int %233 %235 %237 |
| OpStore %outCoord %238 |
| %239 = OpLoad %int %batch |
| OpStore %param_14 %239 |
| %241 = OpLoad %int %row_2 |
| OpStore %param_15 %241 |
| %243 = OpLoad %int %col_2 |
| OpStore %param_16 %243 |
| %245 = OpLoad %float %value_2 |
| OpStore %param_17 %245 |
| %246 = OpFunctionCall %void %setOutput_i1_i1_i1_f1_ %param_14 %param_15 %param_16 %param_17 |
| OpReturn |
| OpFunctionEnd |
| %mm_matMul_i1_i1_i1_ = OpFunction %void None %251 |
| %dimAOuter = OpFunctionParameter %_ptr_Function_int |
| %dimInner = OpFunctionParameter %_ptr_Function_int |
| %dimBOuter = OpFunctionParameter %_ptr_Function_int |
| %256 = OpLabel |
| %tileRow = OpVariable %_ptr_Function_int Function %4 |
| %tileCol = OpVariable %_ptr_Function_int Function %4 |
| %globalRow = OpVariable %_ptr_Function_int Function %4 |
| %globalCol = OpVariable %_ptr_Function_int Function %4 |
| %numTiles = OpVariable %_ptr_Function_int Function %4 |
| %innerRow = OpVariable %_ptr_Function_int Function %4 |
| %innerCol = OpVariable %_ptr_Function_int Function %4 |
| %acc = OpVariable %_ptr_Function__arr__arr_float_uint_1_uint_1 Function %267 |
| %tileColA = OpVariable %_ptr_Function_int Function %4 |
| %tileRowB = OpVariable %_ptr_Function_int Function %4 |
| %t = OpVariable %_ptr_Function_int Function %4 |
| %innerRow_1 = OpVariable %_ptr_Function_int Function %4 |
| %innerCol_1 = OpVariable %_ptr_Function_int Function %4 |
| %inputRow = OpVariable %_ptr_Function_int Function %4 |
| %inputCol = OpVariable %_ptr_Function_int Function %4 |
| %param_3 = OpVariable %_ptr_Function_int Function %4 |
| %param_4 = OpVariable %_ptr_Function_int Function %4 |
| %innerRow_2 = OpVariable %_ptr_Function_int Function %4 |
| %innerCol_2 = OpVariable %_ptr_Function_int Function %4 |
| %inputRow_1 = OpVariable %_ptr_Function_int Function %4 |
| %inputCol_1 = OpVariable %_ptr_Function_int Function %4 |
| %param_5 = OpVariable %_ptr_Function_int Function %4 |
| %param_6 = OpVariable %_ptr_Function_int Function %4 |
| %k = OpVariable %_ptr_Function_int Function %4 |
| %inner = OpVariable %_ptr_Function_int Function %4 |
| %BCached = OpVariable %_ptr_Function__arr_float_uint_1 Function %287 |
| %innerRow_3 = OpVariable %_ptr_Function_int Function %4 |
| %ACached = OpVariable %_ptr_Function_float Function %85 |
| %innerCol_3 = OpVariable %_ptr_Function_int Function %4 |
| %innerRow_4 = OpVariable %_ptr_Function_int Function %4 |
| %innerCol_4 = OpVariable %_ptr_Function_int Function %4 |
| %param_7 = OpVariable %_ptr_Function_int Function %4 |
| %param_8 = OpVariable %_ptr_Function_int Function %4 |
| %param_9 = OpVariable %_ptr_Function_float Function %85 |
| %x_393 = OpVariable %_ptr_Function_bool Function %54 |
| %x_394_phi = OpVariable %_ptr_Function_bool Function %54 |
| %297 = OpAccessChain %_ptr_Private_uint %gl_LocalInvocationID %uint_1 |
| %298 = OpLoad %uint %297 |
| %299 = OpBitcast %int %298 |
| %300 = OpIMul %int %299 %int_1 |
| OpStore %tileRow %300 |
| %301 = OpAccessChain %_ptr_Private_uint %gl_LocalInvocationID %uint_0 |
| %302 = OpLoad %uint %301 |
| %303 = OpBitcast %int %302 |
| %304 = OpIMul %int %303 %int_1 |
| OpStore %tileCol %304 |
| %305 = OpAccessChain %_ptr_Private_uint %gl_GlobalInvocationID %uint_1 |
| %306 = OpLoad %uint %305 |
| %307 = OpBitcast %int %306 |
| %308 = OpIMul %int %307 %int_1 |
| OpStore %globalRow %308 |
| %309 = OpAccessChain %_ptr_Private_uint %gl_GlobalInvocationID %uint_0 |
| %310 = OpLoad %uint %309 |
| %311 = OpBitcast %int %310 |
| %312 = OpIMul %int %311 %int_1 |
| OpStore %globalCol %312 |
| %314 = OpLoad %int %dimInner |
| %315 = OpISub %int %314 %int_1 |
| %317 = OpSDiv %int %315 %int_64 |
| %318 = OpIAdd %int %317 %int_1 |
| OpStore %numTiles %318 |
| OpStore %innerRow %int_0 |
| OpBranch %319 |
| %319 = OpLabel |
| OpLoopMerge %320 %321 None |
| OpBranch %322 |
| %322 = OpLabel |
| %323 = OpLoad %int %innerRow |
| %324 = OpSLessThan %bool %323 %int_1 |
| OpSelectionMerge %325 None |
| OpBranchConditional %324 %326 %327 |
| %326 = OpLabel |
| OpBranch %325 |
| %327 = OpLabel |
| OpBranch %320 |
| %325 = OpLabel |
| OpStore %innerCol %int_0 |
| OpBranch %328 |
| %328 = OpLabel |
| OpLoopMerge %329 %330 None |
| OpBranch %331 |
| %331 = OpLabel |
| %332 = OpLoad %int %innerCol |
| %333 = OpSLessThan %bool %332 %int_1 |
| OpSelectionMerge %334 None |
| OpBranchConditional %333 %335 %336 |
| %335 = OpLabel |
| OpBranch %334 |
| %336 = OpLabel |
| OpBranch %329 |
| %334 = OpLabel |
| %337 = OpLoad %int %innerRow |
| %338 = OpLoad %int %innerCol |
| %339 = OpAccessChain %_ptr_Function_float %acc %337 %338 |
| OpStore %339 %float_0 |
| OpBranch %330 |
| %330 = OpLabel |
| %340 = OpLoad %int %innerCol |
| %341 = OpIAdd %int %340 %int_1 |
| OpStore %innerCol %341 |
| OpBranch %328 |
| %329 = OpLabel |
| OpBranch %321 |
| %321 = OpLabel |
| %342 = OpLoad %int %innerRow |
| %343 = OpIAdd %int %342 %int_1 |
| OpStore %innerRow %343 |
| OpBranch %319 |
| %320 = OpLabel |
| %344 = OpAccessChain %_ptr_Private_uint %gl_LocalInvocationID %uint_0 |
| %345 = OpLoad %uint %344 |
| %346 = OpBitcast %int %345 |
| %347 = OpIMul %int %346 %int_64 |
| OpStore %tileColA %347 |
| %348 = OpAccessChain %_ptr_Private_uint %gl_LocalInvocationID %uint_1 |
| %349 = OpLoad %uint %348 |
| %350 = OpBitcast %int %349 |
| %351 = OpIMul %int %350 %int_1 |
| OpStore %tileRowB %351 |
| OpStore %t %int_0 |
| OpBranch %352 |
| %352 = OpLabel |
| OpLoopMerge %353 %354 None |
| OpBranch %355 |
| %355 = OpLabel |
| %356 = OpLoad %int %t |
| %357 = OpLoad %int %numTiles |
| %358 = OpSLessThan %bool %356 %357 |
| OpSelectionMerge %359 None |
| OpBranchConditional %358 %360 %361 |
| %360 = OpLabel |
| OpBranch %359 |
| %361 = OpLabel |
| OpBranch %353 |
| %359 = OpLabel |
| OpStore %innerRow_1 %int_0 |
| OpBranch %362 |
| %362 = OpLabel |
| OpLoopMerge %363 %364 None |
| OpBranch %365 |
| %365 = OpLabel |
| %366 = OpLoad %int %innerRow_1 |
| %367 = OpSLessThan %bool %366 %int_1 |
| OpSelectionMerge %368 None |
| OpBranchConditional %367 %369 %370 |
| %369 = OpLabel |
| OpBranch %368 |
| %370 = OpLabel |
| OpBranch %363 |
| %368 = OpLabel |
| OpStore %innerCol_1 %int_0 |
| OpBranch %371 |
| %371 = OpLabel |
| OpLoopMerge %372 %373 None |
| OpBranch %374 |
| %374 = OpLabel |
| %375 = OpLoad %int %innerCol_1 |
| %376 = OpSLessThan %bool %375 %int_64 |
| OpSelectionMerge %377 None |
| OpBranchConditional %376 %378 %379 |
| %378 = OpLabel |
| OpBranch %377 |
| %379 = OpLabel |
| OpBranch %372 |
| %377 = OpLabel |
| %380 = OpLoad %int %tileRow |
| %381 = OpLoad %int %innerRow_1 |
| %382 = OpIAdd %int %380 %381 |
| OpStore %inputRow %382 |
| %383 = OpLoad %int %tileColA |
| %384 = OpLoad %int %innerCol_1 |
| %385 = OpIAdd %int %383 %384 |
| OpStore %inputCol %385 |
| %386 = OpLoad %int %inputRow |
| %387 = OpLoad %int %inputCol |
| %388 = OpLoad %int %globalRow |
| %389 = OpLoad %int %innerRow_1 |
| %390 = OpLoad %int %t |
| %391 = OpLoad %int %inputCol |
| %392 = OpIAdd %int %388 %389 |
| OpStore %param_3 %392 |
| %393 = OpIMul %int %390 %int_64 |
| %394 = OpIAdd %int %393 %391 |
| OpStore %param_4 %394 |
| %395 = OpFunctionCall %float %mm_readA_i1_i1_ %param_3 %param_4 |
| %399 = OpAccessChain %_ptr_Workgroup_float %mm_Asub %386 %387 |
| OpStore %399 %395 |
| OpBranch %373 |
| %373 = OpLabel |
| %400 = OpLoad %int %innerCol_1 |
| %401 = OpIAdd %int %400 %int_1 |
| OpStore %innerCol_1 %401 |
| OpBranch %371 |
| %372 = OpLabel |
| OpBranch %364 |
| %364 = OpLabel |
| %402 = OpLoad %int %innerRow_1 |
| %403 = OpIAdd %int %402 %int_1 |
| OpStore %innerRow_1 %403 |
| OpBranch %362 |
| %363 = OpLabel |
| OpStore %innerRow_2 %int_0 |
| OpBranch %404 |
| %404 = OpLabel |
| OpLoopMerge %405 %406 None |
| OpBranch %407 |
| %407 = OpLabel |
| %408 = OpLoad %int %innerRow_2 |
| %409 = OpSLessThan %bool %408 %int_1 |
| OpSelectionMerge %410 None |
| OpBranchConditional %409 %411 %412 |
| %411 = OpLabel |
| OpBranch %410 |
| %412 = OpLabel |
| OpBranch %405 |
| %410 = OpLabel |
| OpStore %innerCol_2 %int_0 |
| OpBranch %413 |
| %413 = OpLabel |
| OpLoopMerge %414 %415 None |
| OpBranch %416 |
| %416 = OpLabel |
| %417 = OpLoad %int %innerCol_2 |
| %418 = OpSLessThan %bool %417 %int_1 |
| OpSelectionMerge %419 None |
| OpBranchConditional %418 %420 %421 |
| %420 = OpLabel |
| OpBranch %419 |
| %421 = OpLabel |
| OpBranch %414 |
| %419 = OpLabel |
| %422 = OpLoad %int %tileRowB |
| %423 = OpLoad %int %innerRow_2 |
| %424 = OpIAdd %int %422 %423 |
| OpStore %inputRow_1 %424 |
| %425 = OpLoad %int %tileCol |
| %426 = OpLoad %int %innerCol_2 |
| %427 = OpIAdd %int %425 %426 |
| OpStore %inputCol_1 %427 |
| %428 = OpLoad %int %inputRow_1 |
| %429 = OpLoad %int %inputCol_1 |
| %430 = OpLoad %int %t |
| %431 = OpLoad %int %inputRow_1 |
| %432 = OpLoad %int %globalCol |
| %433 = OpLoad %int %innerCol_2 |
| %434 = OpIMul %int %430 %int_64 |
| %435 = OpIAdd %int %434 %431 |
| OpStore %param_5 %435 |
| %436 = OpIAdd %int %432 %433 |
| OpStore %param_6 %436 |
| %437 = OpFunctionCall %float %mm_readB_i1_i1_ %param_5 %param_6 |
| %440 = OpAccessChain %_ptr_Workgroup_float %mm_Bsub %428 %429 |
| OpStore %440 %437 |
| OpBranch %415 |
| %415 = OpLabel |
| %441 = OpLoad %int %innerCol_2 |
| %442 = OpIAdd %int %441 %int_1 |
| OpStore %innerCol_2 %442 |
| OpBranch %413 |
| %414 = OpLabel |
| OpBranch %406 |
| %406 = OpLabel |
| %443 = OpLoad %int %innerRow_2 |
| %444 = OpIAdd %int %443 %int_1 |
| OpStore %innerRow_2 %444 |
| OpBranch %404 |
| %405 = OpLabel |
| OpControlBarrier %uint_2 %uint_2 %uint_264 |
| OpStore %k %int_0 |
| OpBranch %447 |
| %447 = OpLabel |
| OpLoopMerge %448 %449 None |
| OpBranch %450 |
| %450 = OpLabel |
| %451 = OpLoad %int %k |
| %452 = OpSLessThan %bool %451 %int_64 |
| OpSelectionMerge %453 None |
| OpBranchConditional %452 %454 %455 |
| %454 = OpLabel |
| OpBranch %453 |
| %455 = OpLabel |
| OpBranch %448 |
| %453 = OpLabel |
| OpStore %inner %int_0 |
| OpBranch %456 |
| %456 = OpLabel |
| OpLoopMerge %457 %458 None |
| OpBranch %459 |
| %459 = OpLabel |
| %460 = OpLoad %int %inner |
| %461 = OpSLessThan %bool %460 %int_1 |
| OpSelectionMerge %462 None |
| OpBranchConditional %461 %463 %464 |
| %463 = OpLabel |
| OpBranch %462 |
| %464 = OpLabel |
| OpBranch %457 |
| %462 = OpLabel |
| %465 = OpLoad %int %inner |
| %466 = OpLoad %int %k |
| %467 = OpLoad %int %tileCol |
| %468 = OpLoad %int %inner |
| %469 = OpIAdd %int %467 %468 |
| %470 = OpAccessChain %_ptr_Workgroup_float %mm_Bsub %466 %469 |
| %471 = OpLoad %float %470 |
| %472 = OpAccessChain %_ptr_Function_float %BCached %465 |
| OpStore %472 %471 |
| OpBranch %458 |
| %458 = OpLabel |
| %473 = OpLoad %int %inner |
| %474 = OpIAdd %int %473 %int_1 |
| OpStore %inner %474 |
| OpBranch %456 |
| %457 = OpLabel |
| OpStore %innerRow_3 %int_0 |
| OpBranch %475 |
| %475 = OpLabel |
| OpLoopMerge %476 %477 None |
| OpBranch %478 |
| %478 = OpLabel |
| %479 = OpLoad %int %innerRow_3 |
| %480 = OpSLessThan %bool %479 %int_1 |
| OpSelectionMerge %481 None |
| OpBranchConditional %480 %482 %483 |
| %482 = OpLabel |
| OpBranch %481 |
| %483 = OpLabel |
| OpBranch %476 |
| %481 = OpLabel |
| %484 = OpLoad %int %tileRow |
| %485 = OpLoad %int %innerRow_3 |
| %486 = OpLoad %int %k |
| %487 = OpIAdd %int %484 %485 |
| %488 = OpAccessChain %_ptr_Workgroup_float %mm_Asub %487 %486 |
| %489 = OpLoad %float %488 |
| OpStore %ACached %489 |
| OpStore %innerCol_3 %int_0 |
| OpBranch %490 |
| %490 = OpLabel |
| OpLoopMerge %491 %492 None |
| OpBranch %493 |
| %493 = OpLabel |
| %494 = OpLoad %int %innerCol_3 |
| %495 = OpSLessThan %bool %494 %int_1 |
| OpSelectionMerge %496 None |
| OpBranchConditional %495 %497 %498 |
| %497 = OpLabel |
| OpBranch %496 |
| %498 = OpLabel |
| OpBranch %491 |
| %496 = OpLabel |
| %499 = OpLoad %int %innerRow_3 |
| %500 = OpLoad %int %innerCol_3 |
| %501 = OpLoad %float %ACached |
| %502 = OpLoad %int %innerCol_3 |
| %503 = OpAccessChain %_ptr_Function_float %BCached %502 |
| %504 = OpLoad %float %503 |
| %505 = OpAccessChain %_ptr_Function_float %acc %499 %500 |
| %506 = OpLoad %float %505 |
| %507 = OpAccessChain %_ptr_Function_float %acc %499 %500 |
| %508 = OpFMul %float %501 %504 |
| %509 = OpFAdd %float %506 %508 |
| OpStore %507 %509 |
| OpBranch %492 |
| %492 = OpLabel |
| %510 = OpLoad %int %innerCol_3 |
| %511 = OpIAdd %int %510 %int_1 |
| OpStore %innerCol_3 %511 |
| OpBranch %490 |
| %491 = OpLabel |
| OpBranch %477 |
| %477 = OpLabel |
| %512 = OpLoad %int %innerRow_3 |
| %513 = OpIAdd %int %512 %int_1 |
| OpStore %innerRow_3 %513 |
| OpBranch %475 |
| %476 = OpLabel |
| OpBranch %449 |
| %449 = OpLabel |
| %514 = OpLoad %int %k |
| %515 = OpIAdd %int %514 %int_1 |
| OpStore %k %515 |
| OpBranch %447 |
| %448 = OpLabel |
| OpControlBarrier %uint_2 %uint_2 %uint_264 |
| OpBranch %354 |
| %354 = OpLabel |
| %517 = OpLoad %int %t |
| %518 = OpIAdd %int %517 %int_1 |
| OpStore %t %518 |
| OpBranch %352 |
| %353 = OpLabel |
| OpStore %innerRow_4 %int_0 |
| OpBranch %519 |
| %519 = OpLabel |
| OpLoopMerge %520 %521 None |
| OpBranch %522 |
| %522 = OpLabel |
| %523 = OpLoad %int %innerRow_4 |
| %524 = OpSLessThan %bool %523 %int_1 |
| OpSelectionMerge %525 None |
| OpBranchConditional %524 %526 %527 |
| %526 = OpLabel |
| OpBranch %525 |
| %527 = OpLabel |
| OpBranch %520 |
| %525 = OpLabel |
| OpStore %innerCol_4 %int_0 |
| OpBranch %528 |
| %528 = OpLabel |
| OpLoopMerge %529 %530 None |
| OpBranch %531 |
| %531 = OpLabel |
| %534 = OpLoad %int %innerCol_4 |
| %535 = OpSLessThan %bool %534 %int_1 |
| OpSelectionMerge %536 None |
| OpBranchConditional %535 %537 %538 |
| %537 = OpLabel |
| OpBranch %536 |
| %538 = OpLabel |
| OpBranch %529 |
| %536 = OpLabel |
| %539 = OpLoad %int %globalCol |
| %540 = OpLoad %int %innerCol_4 |
| %542 = OpLoad %int %dimBOuter |
| %543 = OpIAdd %int %539 %540 |
| %544 = OpSLessThan %bool %543 %542 |
| OpStore %x_394_phi %544 |
| OpSelectionMerge %545 None |
| OpBranchConditional %544 %546 %545 |
| %546 = OpLabel |
| %547 = OpLoad %int %globalRow |
| %548 = OpLoad %int %innerRow_4 |
| %550 = OpLoad %int %dimAOuter |
| %551 = OpIAdd %int %547 %548 |
| %552 = OpSLessThan %bool %551 %550 |
| OpStore %x_393 %552 |
| %553 = OpLoad %bool %x_393 |
| OpStore %x_394_phi %553 |
| OpBranch %545 |
| %545 = OpLabel |
| %554 = OpLoad %bool %x_394_phi |
| OpSelectionMerge %555 None |
| OpBranchConditional %554 %556 %555 |
| %556 = OpLabel |
| %557 = OpLoad %int %globalRow |
| %558 = OpLoad %int %innerRow_4 |
| %559 = OpLoad %int %globalCol |
| %560 = OpLoad %int %innerCol_4 |
| %561 = OpLoad %int %innerRow_4 |
| %562 = OpLoad %int %innerCol_4 |
| %563 = OpIAdd %int %557 %558 |
| OpStore %param_7 %563 |
| %564 = OpIAdd %int %559 %560 |
| OpStore %param_8 %564 |
| %565 = OpAccessChain %_ptr_Function_float %acc %561 %562 |
| %566 = OpLoad %float %565 |
| OpStore %param_9 %566 |
| %567 = OpFunctionCall %void %mm_write_i1_i1_f1_ %param_7 %param_8 %param_9 |
| OpBranch %555 |
| %555 = OpLabel |
| OpBranch %530 |
| %530 = OpLabel |
| %571 = OpLoad %int %innerCol_4 |
| %572 = OpIAdd %int %571 %int_1 |
| OpStore %innerCol_4 %572 |
| OpBranch %528 |
| %529 = OpLabel |
| OpBranch %521 |
| %521 = OpLabel |
| %573 = OpLoad %int %innerRow_4 |
| %574 = OpIAdd %int %573 %int_1 |
| OpStore %innerRow_4 %574 |
| OpBranch %519 |
| %520 = OpLabel |
| OpReturn |
| OpFunctionEnd |
| %main_1 = OpFunction %void None %575 |
| %577 = OpLabel |
| %param_18 = OpVariable %_ptr_Function_int Function %4 |
| %param_19 = OpVariable %_ptr_Function_int Function %4 |
| %param_20 = OpVariable %_ptr_Function_int Function %4 |
| %581 = OpAccessChain %_ptr_Uniform_int %x_48 %uint_1 %uint_1 |
| %582 = OpLoad %int %581 |
| OpStore %dimAOuter_1 %582 |
| %583 = OpAccessChain %_ptr_Uniform_int %x_48 %uint_1 %uint_2 |
| %584 = OpLoad %int %583 |
| OpStore %dimInner_1 %584 |
| %585 = OpAccessChain %_ptr_Uniform_int %x_48 %uint_2 %uint_2 |
| %586 = OpLoad %int %585 |
| OpStore %dimBOuter_1 %586 |
| %587 = OpAccessChain %_ptr_Private_uint %gl_GlobalInvocationID %uint_2 |
| %588 = OpLoad %uint %587 |
| %589 = OpBitcast %int %588 |
| OpStore %batch %589 |
| %590 = OpLoad %int %dimAOuter_1 |
| OpStore %param_18 %590 |
| %591 = OpLoad %int %dimInner_1 |
| OpStore %param_19 %591 |
| %592 = OpLoad %int %dimBOuter_1 |
| OpStore %param_20 %592 |
| %593 = OpFunctionCall %void %mm_matMul_i1_i1_i1_ %param_18 %param_19 %param_20 |
| OpReturn |
| OpFunctionEnd |
| %main = OpFunction %void None %575 |
| %598 = OpLabel |
| %599 = OpLoad %uint %tint_symbol_2 |
| %600 = OpIEqual %bool %599 %uint_0 |
| OpSelectionMerge %601 None |
| OpBranchConditional %600 %602 %601 |
| %602 = OpLabel |
| OpStore %mm_Asub %603 |
| OpStore %mm_Bsub %604 |
| OpBranch %601 |
| %601 = OpLabel |
| OpControlBarrier %uint_2 %uint_2 %uint_264 |
| %606 = OpLoad %v3uint %tint_symbol |
| OpStore %gl_LocalInvocationID %606 |
| %607 = OpLoad %v3uint %tint_symbol_1 |
| OpStore %gl_GlobalInvocationID %607 |
| %608 = OpFunctionCall %void %main_1 |
| OpReturn |
| OpFunctionEnd |