// RUN: mlir-translate --no-implicit-module --test-spirv-roundtrip \ // RUN: --split-input-file %s | FileCheck %s spirv.module Logical GLSL450 requires #spirv.vce { // CHECK-LABEL: @cooperative_matrix_length spirv.func @cooperative_matrix_length() "None" { // CHECK: {{%.+}} = spirv.KHR.CooperativeMatrixLength : !spirv.coopmatrix<2x2xi32, Subgroup, MatrixB> %0 = spirv.KHR.CooperativeMatrixLength : !spirv.coopmatrix<2x2xi32, Subgroup, MatrixB> spirv.Return } // CHECK-LABEL: @cooperative_matrix_load_1 spirv.func @cooperative_matrix_load_1(%ptr : !spirv.ptr, %stride : i32) "None" { // CHECK: {{%.+}} = spirv.KHR.CooperativeMatrixLoad {{%.*}}, {{%.*}}, // CHECK-SAME: : !spirv.ptr, i32 -> !spirv.coopmatrix<16x8xi32, Workgroup, MatrixA> %0 = spirv.KHR.CooperativeMatrixLoad %ptr, %stride, : !spirv.ptr, i32 -> !spirv.coopmatrix<16x8xi32, Workgroup, MatrixA> spirv.Return } // CHECK-LABEL: @cooperative_matrix_load_2 spirv.func @cooperative_matrix_load_2(%ptr : !spirv.ptr, %stride : i64) "None" { // CHECK: {{%.+}} = spirv.KHR.CooperativeMatrixLoad {{%.*}}, {{%.*}}, , // CHECK-SAME: : !spirv.ptr, i64 -> !spirv.coopmatrix<8x16xf32, Subgroup, MatrixAcc> %0 = spirv.KHR.CooperativeMatrixLoad %ptr, %stride, , : !spirv.ptr, i64 -> !spirv.coopmatrix<8x16xf32, Subgroup, MatrixAcc> spirv.Return } // CHECK-LABEL: @cooperative_matrix_store_1 spirv.func @cooperative_matrix_store_1(%ptr : !spirv.ptr, %stride : i32, %m : !spirv.coopmatrix<16x8xi32, Workgroup, MatrixA>) "None" { // CHECK: spirv.KHR.CooperativeMatrixStore {{%.*}}, {{%.*}}, // CHECK-SAME: : !spirv.ptr, !spirv.coopmatrix<16x8xi32, Workgroup, MatrixA>, i32 spirv.KHR.CooperativeMatrixStore %ptr, %m, %stride, : !spirv.ptr, !spirv.coopmatrix<16x8xi32, Workgroup, MatrixA>, i32 // CHECK-NEXT: spirv.KHR.CooperativeMatrixStore {{%.*}}, {{%.*}}, , spirv.KHR.CooperativeMatrixStore %ptr, %m, %stride, , : !spirv.ptr, !spirv.coopmatrix<16x8xi32, Workgroup, MatrixA>, i32 spirv.Return } // CHECK-LABEL: @cooperative_matrix_store_2 spirv.func @cooperative_matrix_store_2(%ptr : !spirv.ptr, %stride : i64, %m : !spirv.coopmatrix<4x8xf32, Subgroup, MatrixB>) "None" { // CHECK: spirv.KHR.CooperativeMatrixStore {{%.*}}, {{%.*}}, , // CHECK-SAME: : !spirv.ptr, !spirv.coopmatrix<4x8xf32, Subgroup, MatrixB>, i64 spirv.KHR.CooperativeMatrixStore %ptr, %m, %stride, , : !spirv.ptr, !spirv.coopmatrix<4x8xf32, Subgroup, MatrixB>, i64 spirv.Return } // CHECK-LABEL: @cooperative_matrix_muladd spirv.func @cooperative_matrix_muladd_1(%a : !spirv.coopmatrix<8x16xi8, Subgroup, MatrixA>, %b : !spirv.coopmatrix<16x8xi16, Subgroup, MatrixB>, %c : !spirv.coopmatrix<8x8xi32, Subgroup, MatrixAcc>) "None" { // CHECK: {{%.+}} = spirv.KHR.CooperativeMatrixMulAdd {{%.*}}, {{%.*}}, {{%.*}} : // CHECK-SAME: !spirv.coopmatrix<8x16xi8, Subgroup, MatrixA>, // CHECK-SAME: !spirv.coopmatrix<16x8xi16, Subgroup, MatrixB> // CHECK-SAME: -> !spirv.coopmatrix<8x8xi32, Subgroup, MatrixAcc> %p = spirv.KHR.CooperativeMatrixMulAdd %a, %b, %c : !spirv.coopmatrix<8x16xi8, Subgroup, MatrixA>, !spirv.coopmatrix<16x8xi16, Subgroup, MatrixB> -> !spirv.coopmatrix<8x8xi32, Subgroup, MatrixAcc> // CHECK-NEXT: {{%.+}} = spirv.KHR.CooperativeMatrixMulAdd {{%.*}}, {{%.*}}, {{%.*}}, : // CHECK-SAME: !spirv.coopmatrix<8x16xi8, Subgroup, MatrixA>, // CHECK-SAME: !spirv.coopmatrix<16x8xi16, Subgroup, MatrixB> // CHECK-SAME: -> !spirv.coopmatrix<8x8xi32, Subgroup, MatrixAcc> %q = spirv.KHR.CooperativeMatrixMulAdd %a, %b, %c, : !spirv.coopmatrix<8x16xi8, Subgroup, MatrixA>, !spirv.coopmatrix<16x8xi16, Subgroup, MatrixB> -> !spirv.coopmatrix<8x8xi32, Subgroup, MatrixAcc> // CHECK-NEXT: {{%.+}} = spirv.KHR.CooperativeMatrixMulAdd {{%.*}}, {{%.*}}, {{%.*}}, : %r = spirv.KHR.CooperativeMatrixMulAdd %a, %b, %c, : !spirv.coopmatrix<8x16xi8, Subgroup, MatrixA>, !spirv.coopmatrix<16x8xi16, Subgroup, MatrixB> -> !spirv.coopmatrix<8x8xi32, Subgroup, MatrixAcc> // CHECK-NEXT: {{%.+}} = spirv.KHR.CooperativeMatrixMulAdd // CHECK-SAME: : %s = spirv.KHR.CooperativeMatrixMulAdd %a, %b, %c, : !spirv.coopmatrix<8x16xi8, Subgroup, MatrixA>, !spirv.coopmatrix<16x8xi16, Subgroup, MatrixB> -> !spirv.coopmatrix<8x8xi32, Subgroup, MatrixAcc> spirv.Return } // CHECK-LABEL: @cooperative_matrix_muladd spirv.func @cooperative_matrix_muladd_2(%a : !spirv.coopmatrix<8x8xf32, Workgroup, MatrixA>, %b : !spirv.coopmatrix<8x8xf32, Workgroup, MatrixB>, %c : !spirv.coopmatrix<8x8xf32, Workgroup, MatrixAcc>) "None" { // CHECK: {{%.+}} = spirv.KHR.CooperativeMatrixMulAdd {{%.*}}, {{%.*}}, {{%.*}} : // CHECK-SAME: !spirv.coopmatrix<8x8xf32, Workgroup, MatrixA>, // CHECK-SAME: !spirv.coopmatrix<8x8xf32, Workgroup, MatrixB> // CHECK-SAME: -> !spirv.coopmatrix<8x8xf32, Workgroup, MatrixAcc> %r = spirv.KHR.CooperativeMatrixMulAdd %a, %b, %c : !spirv.coopmatrix<8x8xf32, Workgroup, MatrixA>, !spirv.coopmatrix<8x8xf32, Workgroup, MatrixB> -> !spirv.coopmatrix<8x8xf32, Workgroup, MatrixAcc> spirv.Return } }