From 8b7b1ded17bfdf57d5339ea3b7b54f2c17a8fe51 Mon Sep 17 00:00:00 2001 From: Jakub Kuderski Date: Mon, 3 Nov 2025 10:52:01 -0500 Subject: [PATCH 1/4] [mlir][spirv] Disable failing Intel SubgroupBlock* op tests Move them to a new test file that tests roundtrip but do not validate with spirv-val. Issue: https://github.com/llvm/llvm-project/issues/166184 --- mlir/test/Target/SPIRV/group-ops.mlir | 26 +--------------- .../Target/SPIRV/subgroup-block-intel.mlir | 30 +++++++++++++++++++ 2 files changed, 31 insertions(+), 25 deletions(-) create mode 100644 mlir/test/Target/SPIRV/subgroup-block-intel.mlir diff --git a/mlir/test/Target/SPIRV/group-ops.mlir b/mlir/test/Target/SPIRV/group-ops.mlir index cf519cba961c5..94ecbb135cd4e 100644 --- a/mlir/test/Target/SPIRV/group-ops.mlir +++ b/mlir/test/Target/SPIRV/group-ops.mlir @@ -1,4 +1,4 @@ -// RUN: mlir-translate -no-implicit-module -test-spirv-roundtrip -split-input-file %s | FileCheck %s +// RUN: mlir-translate --no-implicit-module --test-spirv-roundtrip --split-input-file %s | FileCheck %s // RUN: %if spirv-tools %{ rm -rf %t %} // RUN: %if spirv-tools %{ mkdir %t %} @@ -24,30 +24,6 @@ spirv.module Logical GLSL450 requires #spirv.vce %value, %localid : f32, vector<3xi32> spirv.ReturnValue %0: f32 } - // CHECK-LABEL: @subgroup_block_read_intel - spirv.func @subgroup_block_read_intel(%ptr : !spirv.ptr) -> i32 "None" { - // CHECK: spirv.INTEL.SubgroupBlockRead %{{.*}} : !spirv.ptr -> i32 - %0 = spirv.INTEL.SubgroupBlockRead %ptr : !spirv.ptr -> i32 - spirv.ReturnValue %0: i32 - } - // CHECK-LABEL: @subgroup_block_read_intel_vector - spirv.func @subgroup_block_read_intel_vector(%ptr : !spirv.ptr) -> vector<3xi32> "None" { - // CHECK: spirv.INTEL.SubgroupBlockRead %{{.*}} : !spirv.ptr -> vector<3xi32> - %0 = spirv.INTEL.SubgroupBlockRead %ptr : !spirv.ptr -> vector<3xi32> - spirv.ReturnValue %0: vector<3xi32> - } - // CHECK-LABEL: @subgroup_block_write_intel - spirv.func @subgroup_block_write_intel(%ptr : !spirv.ptr, %value: i32) -> () "None" { - // CHECK: spirv.INTEL.SubgroupBlockWrite %{{.*}}, %{{.*}} : i32 - spirv.INTEL.SubgroupBlockWrite "StorageBuffer" %ptr, %value : i32 - spirv.Return - } - // CHECK-LABEL: @subgroup_block_write_intel_vector - spirv.func @subgroup_block_write_intel_vector(%ptr : !spirv.ptr, %value: vector<3xi32>) -> () "None" { - // CHECK: spirv.INTEL.SubgroupBlockWrite %{{.*}}, %{{.*}} : vector<3xi32> - spirv.INTEL.SubgroupBlockWrite "StorageBuffer" %ptr, %value : vector<3xi32> - spirv.Return - } // CHECK-LABEL: @group_iadd spirv.func @group_iadd(%value: i32) -> i32 "None" { // CHECK: spirv.GroupIAdd %{{.*}} : i32 diff --git a/mlir/test/Target/SPIRV/subgroup-block-intel.mlir b/mlir/test/Target/SPIRV/subgroup-block-intel.mlir new file mode 100644 index 0000000000000..304cfb87c1fe2 --- /dev/null +++ b/mlir/test/Target/SPIRV/subgroup-block-intel.mlir @@ -0,0 +1,30 @@ +// RUN: mlir-translate --no-implicit-module --test-spirv-roundtrip --split-input-file %s | FileCheck %s + +// TODO(#166184): Add spirv-val test once the serialization is fixed. + +spirv.module Logical GLSL450 requires #spirv.vce { + // CHECK-LABEL: @subgroup_block_read_intel + spirv.func @subgroup_block_read_intel(%ptr : !spirv.ptr) -> i32 "None" { + // CHECK: spirv.INTEL.SubgroupBlockRead %{{.*}} : !spirv.ptr -> i32 + %0 = spirv.INTEL.SubgroupBlockRead %ptr : !spirv.ptr -> i32 + spirv.ReturnValue %0: i32 + } + // CHECK-LABEL: @subgroup_block_read_intel_vector + spirv.func @subgroup_block_read_intel_vector(%ptr : !spirv.ptr) -> vector<3xi32> "None" { + // CHECK: spirv.INTEL.SubgroupBlockRead %{{.*}} : !spirv.ptr -> vector<3xi32> + %0 = spirv.INTEL.SubgroupBlockRead %ptr : !spirv.ptr -> vector<3xi32> + spirv.ReturnValue %0: vector<3xi32> + } + // CHECK-LABEL: @subgroup_block_write_intel + spirv.func @subgroup_block_write_intel(%ptr : !spirv.ptr, %value: i32) -> () "None" { + // CHECK: spirv.INTEL.SubgroupBlockWrite %{{.*}}, %{{.*}} : i32 + spirv.INTEL.SubgroupBlockWrite "StorageBuffer" %ptr, %value : i32 + spirv.Return + } + // CHECK-LABEL: @subgroup_block_write_intel_vector + spirv.func @subgroup_block_write_intel_vector(%ptr : !spirv.ptr, %value: vector<3xi32>) -> () "None" { + // CHECK: spirv.INTEL.SubgroupBlockWrite %{{.*}}, %{{.*}} : vector<3xi32> + spirv.INTEL.SubgroupBlockWrite "StorageBuffer" %ptr, %value : vector<3xi32> + spirv.Return + } +} From 6dc906153849b07757f5f038f5e81da67799ed38 Mon Sep 17 00:00:00 2001 From: Jakub Kuderski Date: Mon, 3 Nov 2025 16:42:40 -0500 Subject: [PATCH 2/4] Fix tests --- mlir/test/Target/SPIRV/group-ops.mlir | 4 +++- mlir/test/Target/SPIRV/subgroup-block-intel.mlir | 8 ++++++-- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/mlir/test/Target/SPIRV/group-ops.mlir b/mlir/test/Target/SPIRV/group-ops.mlir index 94ecbb135cd4e..2b373d4f32efb 100644 --- a/mlir/test/Target/SPIRV/group-ops.mlir +++ b/mlir/test/Target/SPIRV/group-ops.mlir @@ -5,7 +5,9 @@ // 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 GLSL450 requires #spirv.vce { +spirv.module Logical GLSL450 requires #spirv.vce { // CHECK-LABEL: @subgroup_ballot spirv.func @subgroup_ballot(%predicate: i1) -> vector<4xi32> "None" { // CHECK: %{{.*}} = spirv.KHR.SubgroupBallot %{{.*}}: vector<4xi32> diff --git a/mlir/test/Target/SPIRV/subgroup-block-intel.mlir b/mlir/test/Target/SPIRV/subgroup-block-intel.mlir index 304cfb87c1fe2..4f5e3b9fde0f3 100644 --- a/mlir/test/Target/SPIRV/subgroup-block-intel.mlir +++ b/mlir/test/Target/SPIRV/subgroup-block-intel.mlir @@ -1,8 +1,12 @@ // RUN: mlir-translate --no-implicit-module --test-spirv-roundtrip --split-input-file %s | FileCheck %s -// TODO(#166184): Add spirv-val test once the serialization is fixed. +// 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 GLSL450 requires #spirv.vce { +spirv.module Physical64 GLSL450 requires #spirv.vce { // CHECK-LABEL: @subgroup_block_read_intel spirv.func @subgroup_block_read_intel(%ptr : !spirv.ptr) -> i32 "None" { // CHECK: spirv.INTEL.SubgroupBlockRead %{{.*}} : !spirv.ptr -> i32 From 0504c0dd438fd7be105dc568d1e06d627fdc673c Mon Sep 17 00:00:00 2001 From: Jakub Kuderski Date: Mon, 3 Nov 2025 16:45:20 -0500 Subject: [PATCH 3/4] Clean up --- mlir/test/Target/SPIRV/group-ops.mlir | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mlir/test/Target/SPIRV/group-ops.mlir b/mlir/test/Target/SPIRV/group-ops.mlir index 2b373d4f32efb..6f19b3553dd37 100644 --- a/mlir/test/Target/SPIRV/group-ops.mlir +++ b/mlir/test/Target/SPIRV/group-ops.mlir @@ -7,7 +7,7 @@ spirv.module Logical GLSL450 requires #spirv.vce { + [SPV_KHR_storage_buffer_storage_class, SPV_KHR_shader_ballot, SPV_KHR_uniform_group_instructions]> { // CHECK-LABEL: @subgroup_ballot spirv.func @subgroup_ballot(%predicate: i1) -> vector<4xi32> "None" { // CHECK: %{{.*}} = spirv.KHR.SubgroupBallot %{{.*}}: vector<4xi32> From 72d14ac0764464f33271d976a0bbaaa289534b8f Mon Sep 17 00:00:00 2001 From: Jakub Kuderski Date: Mon, 3 Nov 2025 16:45:58 -0500 Subject: [PATCH 4/4] Clean up --- mlir/test/Target/SPIRV/subgroup-block-intel.mlir | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mlir/test/Target/SPIRV/subgroup-block-intel.mlir b/mlir/test/Target/SPIRV/subgroup-block-intel.mlir index 4f5e3b9fde0f3..14060e632fffd 100644 --- a/mlir/test/Target/SPIRV/subgroup-block-intel.mlir +++ b/mlir/test/Target/SPIRV/subgroup-block-intel.mlir @@ -1,8 +1,8 @@ -// RUN: mlir-translate --no-implicit-module --test-spirv-roundtrip --split-input-file %s | FileCheck %s +// RUN: mlir-translate --no-implicit-module --test-spirv-roundtrip %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 %{ mlir-translate --no-implicit-module --serialize-spirv --spirv-save-validation-files-with-prefix=%t/module %s %} // RUN: %if spirv-tools %{ spirv-val %t %} spirv.module Physical64 GLSL450 requires #spirv.vce