CodeQL / Analyze (actions) (push) Canceled after 0s
CodeQL / Analyze (python) (push) Canceled after 0s
pre-commit / pre-commit (push) Canceled after 0s
Multi-Arch CI / setup (push) Canceled after 0s
Publish build_manylinux_x86_64 images / publish_build_manylinux_x86_64 (push) Canceled after 0s
Setup (Multi-Arch) / setup (push) Canceled after 0s
Multi-Arch CI / Linux::${{ fromJSON(needs.setup.outputs.linux_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubi10 image / publish_no_rocm_image_ubi10 (push) Canceled after 0s
Multi-Arch CI / Windows::${{ fromJSON(needs.setup.outputs.windows_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Multi-Arch CI / Manifest Diff (push) Canceled after 0s
TheRock Manifest Diff Report / Generate Manifest Diff Report (push) Canceled after 0s
Multi-Arch CI / CI Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_ocl_rt images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_rocgdb images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Unit Tests / Unit Tests :: ubuntu-24.04 (push) Canceled after 0s
Unit Tests / Unit Tests :: windows-2022 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_media (push) Canceled after 0s
Unit Tests / Unit Tests Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_openmpi (push) Canceled after 0s
130 lines
8.0 KiB
MLIR
130 lines
8.0 KiB
MLIR
// RUN: mlir-translate --no-implicit-module --test-spirv-roundtrip \
|
|
// RUN: --split-input-file %s | FileCheck %s
|
|
|
|
// RUN: %if spirv-tools %{ rm -rf %t %}
|
|
// RUN: %if spirv-tools %{ mkdir %t %}
|
|
// RUN: %if spirv-tools %{ mlir-translate --no-implicit-module --serialize-spirv --split-input-file --spirv-save-validation-files-with-prefix=%t/module %s %}
|
|
// RUN: %if spirv-tools %{ spirv-val %t %}
|
|
|
|
spirv.module Logical Vulkan requires
|
|
#spirv.vce<v1.5, [Shader, Int8, Int16, Int64, Linkage, CooperativeMatrixKHR, VulkanMemoryModel],
|
|
[SPV_KHR_storage_buffer_storage_class, SPV_KHR_cooperative_matrix]> {
|
|
|
|
// 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<i32, StorageBuffer>, %stride : i32) "None" {
|
|
// CHECK: {{%.+}} = spirv.KHR.CooperativeMatrixLoad {{%.*}}, {{%.*}}, <RowMajor>
|
|
// CHECK-SAME: : !spirv.ptr<i32, StorageBuffer>, i32 -> !spirv.coopmatrix<16x8xi32, Workgroup, MatrixA>
|
|
%0 = spirv.KHR.CooperativeMatrixLoad %ptr, %stride, <RowMajor> :
|
|
!spirv.ptr<i32, StorageBuffer>, i32 -> !spirv.coopmatrix<16x8xi32, Workgroup, MatrixA>
|
|
spirv.Return
|
|
}
|
|
|
|
// CHECK-LABEL: @cooperative_matrix_load_2
|
|
spirv.func @cooperative_matrix_load_2(%ptr : !spirv.ptr<f32, StorageBuffer>, %stride : i64) "None" {
|
|
// CHECK: {{%.+}} = spirv.KHR.CooperativeMatrixLoad {{%.*}}, {{%.*}}, <ColumnMajor>, <Volatile>
|
|
// CHECK-SAME: : !spirv.ptr<f32, StorageBuffer>, i64 -> !spirv.coopmatrix<8x16xf32, Subgroup, MatrixAcc>
|
|
%0 = spirv.KHR.CooperativeMatrixLoad %ptr, %stride, <ColumnMajor>, <Volatile> :
|
|
!spirv.ptr<f32, StorageBuffer>, i64 -> !spirv.coopmatrix<8x16xf32, Subgroup, MatrixAcc>
|
|
spirv.Return
|
|
}
|
|
|
|
// CHECK-LABEL: @cooperative_matrix_load_3
|
|
spirv.func @cooperative_matrix_load_3(%ptr : !spirv.ptr<i32, StorageBuffer>, %stride : i32) "None" {
|
|
// CHECK: {{%.+}} = spirv.KHR.CooperativeMatrixLoad {{%.*}}, {{%.*}}, <RowMajor>, <Aligned>, 16
|
|
// CHECK-SAME: : !spirv.ptr<i32, StorageBuffer>, i32 -> !spirv.coopmatrix<16x8xi32, Workgroup, MatrixA>
|
|
%0 = spirv.KHR.CooperativeMatrixLoad %ptr, %stride, <RowMajor>, <Aligned>, 16 :
|
|
!spirv.ptr<i32, StorageBuffer>, i32 -> !spirv.coopmatrix<16x8xi32, Workgroup, MatrixA>
|
|
spirv.Return
|
|
}
|
|
|
|
// CHECK-LABEL: @cooperative_matrix_store_1
|
|
spirv.func @cooperative_matrix_store_1(%ptr : !spirv.ptr<i32, StorageBuffer>, %stride : i32,
|
|
%m : !spirv.coopmatrix<16x8xi32, Workgroup, MatrixA>) "None" {
|
|
// CHECK: spirv.KHR.CooperativeMatrixStore {{%.*}}, {{%.*}}, <RowMajor>
|
|
// CHECK-SAME: : !spirv.ptr<i32, StorageBuffer>, !spirv.coopmatrix<16x8xi32, Workgroup, MatrixA>, i32
|
|
spirv.KHR.CooperativeMatrixStore %ptr, %m, %stride, <RowMajor> :
|
|
!spirv.ptr<i32, StorageBuffer>, !spirv.coopmatrix<16x8xi32, Workgroup, MatrixA>, i32
|
|
|
|
// CHECK: spirv.KHR.CooperativeMatrixStore {{%.*}}, {{%.*}}, <RowMajor>, <Aligned>, 16
|
|
// CHECK-SAME: : !spirv.ptr<i32, StorageBuffer>, !spirv.coopmatrix<16x8xi32, Workgroup, MatrixA>, i32
|
|
spirv.KHR.CooperativeMatrixStore %ptr, %m, %stride, <RowMajor>, <Aligned>, 16 :
|
|
!spirv.ptr<i32, StorageBuffer>, !spirv.coopmatrix<16x8xi32, Workgroup, MatrixA>, i32
|
|
|
|
// CHECK-NEXT: spirv.KHR.CooperativeMatrixStore {{%.*}}, {{%.*}}, <RowMajor>, <Volatile|Nontemporal>
|
|
spirv.KHR.CooperativeMatrixStore %ptr, %m, %stride, <RowMajor>, <Volatile|Nontemporal> :
|
|
!spirv.ptr<i32, StorageBuffer>, !spirv.coopmatrix<16x8xi32, Workgroup, MatrixA>, i32
|
|
spirv.Return
|
|
}
|
|
|
|
// CHECK-LABEL: @cooperative_matrix_store_2
|
|
spirv.func @cooperative_matrix_store_2(%ptr : !spirv.ptr<f32, Workgroup>, %stride : i64,
|
|
%m : !spirv.coopmatrix<4x8xf32, Subgroup, MatrixB>) "None" {
|
|
// CHECK: spirv.KHR.CooperativeMatrixStore {{%.*}}, {{%.*}}, <ColumnMajor>, <Nontemporal>
|
|
// CHECK-SAME: : !spirv.ptr<f32, Workgroup>, !spirv.coopmatrix<4x8xf32, Subgroup, MatrixB>, i64
|
|
spirv.KHR.CooperativeMatrixStore %ptr, %m, %stride, <ColumnMajor>, <Nontemporal> :
|
|
!spirv.ptr<f32, Workgroup>, !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 {{%.*}}, {{%.*}}, {{%.*}}, <ASigned> :
|
|
// 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,
|
|
<ASigned> : !spirv.coopmatrix<8x16xi8, Subgroup, MatrixA>,
|
|
!spirv.coopmatrix<16x8xi16, Subgroup, MatrixB>
|
|
-> !spirv.coopmatrix<8x8xi32, Subgroup, MatrixAcc>
|
|
|
|
// CHECK-NEXT: {{%.+}} = spirv.KHR.CooperativeMatrixMulAdd {{%.*}}, {{%.*}}, {{%.*}}, <BSigned> :
|
|
%r = spirv.KHR.CooperativeMatrixMulAdd %a, %b, %c,
|
|
<BSigned> : !spirv.coopmatrix<8x16xi8, Subgroup, MatrixA>,
|
|
!spirv.coopmatrix<16x8xi16, Subgroup, MatrixB>
|
|
-> !spirv.coopmatrix<8x8xi32, Subgroup, MatrixAcc>
|
|
|
|
// CHECK-NEXT: {{%.+}} = spirv.KHR.CooperativeMatrixMulAdd
|
|
// CHECK-SAME: <ASigned|BSigned|ResultSigned|AccSat> :
|
|
%s = spirv.KHR.CooperativeMatrixMulAdd %a, %b, %c,
|
|
<ASigned|BSigned|ResultSigned|AccSat> :
|
|
!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
|
|
}
|
|
|
|
}
|