SKIP: FAILED


enable chromium_experimental_subgroup_matrix;
enable f16;

@internal(disable_validation__binding_point_collision) @group(0) @binding(0) var<storage, read_write> prevent_dce : array<f16, 1024>;

fn subgroupMatrixMultiply_8744bd() -> subgroup_matrix_result<f16, 8, 8> {
  var res : subgroup_matrix_result<f16, 8, 8> = subgroupMatrixMultiply<f16>(subgroup_matrix_left<f32, 8, 8>(), subgroup_matrix_right<f32, 8, 8>());
  return res;
}

@compute @workgroup_size(1)
fn compute_main() {
  subgroupMatrixStore(&(prevent_dce), 0, subgroupMatrixMultiply_8744bd(), false, 64);
}

Failed to generate: :11:15 error: msl.simdgroup_multiply: no matching call to 'msl.simdgroup_multiply(subgroup_matrix_result<f16, 8, 8>, subgroup_matrix_left<f32, 8, 8>, subgroup_matrix_right<f32, 8, 8>)'

1 candidate function:
 • 'msl.simdgroup_multiply(subgroup_matrix<result, S, C, R>  ✓ , subgroup_matrix<left, S, K, R>  ✗ , subgroup_matrix<right, S, C, K>  ✗ )' where:
      ✓  'S' is 'f32' or 'f16'

    %6:void = msl.simdgroup_multiply %5, %2, %3
              ^^^^^^^^^^^^^^^^^^^^^^

:6:3 note: in block
  $B1: {
  ^^^

note: # Disassembly
tint_module_vars_struct = struct @align(1) {
  prevent_dce:ptr<storage, array<f16, 1024>, read_write> @offset(0)
}

%subgroupMatrixMultiply_8744bd = func():subgroup_matrix_result<f16, 8, 8> {
  $B1: {
    %2:subgroup_matrix_left<f32, 8, 8> = construct
    %3:subgroup_matrix_right<f32, 8, 8> = construct
    %4:ptr<function, subgroup_matrix_result<f16, 8, 8>, read_write> = var
    %5:subgroup_matrix_result<f16, 8, 8> = load %4
    %6:void = msl.simdgroup_multiply %5, %2, %3
    %7:subgroup_matrix_result<f16, 8, 8> = load %4
    %res:ptr<function, subgroup_matrix_result<f16, 8, 8>, read_write> = var, %7
    %9:subgroup_matrix_result<f16, 8, 8> = load %res
    ret %9
  }
}
%compute_main = @compute @workgroup_size(1u, 1u, 1u) func(%prevent_dce:ptr<storage, array<f16, 1024>, read_write> [@binding_point(0, 0)]):void {
  $B2: {
    %12:tint_module_vars_struct = construct %prevent_dce
    %tint_module_vars:tint_module_vars_struct = let %12
    %14:subgroup_matrix_result<f16, 8, 8> = call %subgroupMatrixMultiply_8744bd
    %15:ptr<storage, array<f16, 1024>, read_write> = access %tint_module_vars, 0u
    %16:ptr<storage, f16, read_write> = access %15, 0u
    %17:u64 = msl.convert 64u
    %18:void = msl.simdgroup_store %14, %16, %17, vec2<u64>(0u64), false
    ret
  }
}


tint executable returned error: exit status 1
