Simplify tests/e2e/linalg_ext_ops. (#17856)

Forked from https://github.com/iree-org/iree/pull/17766

* Share test srcs lists between:
  * Vulkan and Metal (both using SPIR-V codegen)
  * CUDA and ROCm (both using LLVMGPU codegen)
* Enable `winograd_input.mlir` and `winograd_output.mlir` tests on more
backends
* Add Metal and ROCm/HIP tests
* Skip wasm tests using a label instead of CMake branching
diff --git a/tests/e2e/linalg_ext_ops/BUILD.bazel b/tests/e2e/linalg_ext_ops/BUILD.bazel
index 7fbf86c..de72b65 100644
--- a/tests/e2e/linalg_ext_ops/BUILD.bazel
+++ b/tests/e2e/linalg_ext_ops/BUILD.bazel
@@ -4,7 +4,6 @@
 # See https://llvm.org/LICENSE.txt for license information.
 # SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
 
-load("//build_tools/bazel:build_defs.oss.bzl", "iree_cmake_extra_content")
 load("//build_tools/bazel:enforce_glob.bzl", "enforce_glob")
 load("//build_tools/bazel:iree_check_test.bzl", "iree_check_single_backend_test_suite")
 
@@ -13,24 +12,77 @@
     licenses = ["notice"],  # Apache 2.0
 )
 
+ALL_SRCS = enforce_glob(
+    # keep sorted
+    [
+        "attention.mlir",
+        "reverse.mlir",
+        "scan.mlir",
+        "scatter.mlir",
+        "sort.mlir",
+        "top-k.mlir",
+        "winograd_input.mlir",
+        "winograd_output.mlir",
+    ],
+    include = ["*.mlir"],
+)
+
+iree_check_single_backend_test_suite(
+    name = "check_llvm-cpu_local-task",
+    srcs = ALL_SRCS,
+    driver = "local-task",
+    tags = [
+        # attention fails with a wasm target, just disable all tests there for now
+        #   error: Yield operand #2 is not equivalent to the corresponding iter bbArg
+        "nowasm",
+    ],
+    target_backend = "llvm-cpu",
+)
+
+VMVX_SRCS = enforce_glob(
+    # keep sorted
+    [
+        "reverse.mlir",
+        "scan.mlir",
+        "scatter.mlir",
+        "sort.mlir",
+        "top-k.mlir",
+        "winograd_input.mlir",
+        "winograd_output.mlir",
+    ],
+    include = ["*.mlir"],
+    exclude = [
+        "attention.mlir",
+    ],
+)
+
+iree_check_single_backend_test_suite(
+    name = "check_vmvx_local-task",
+    srcs = VMVX_SRCS,
+    driver = "local-task",
+    target_backend = "vmvx",
+)
+
+LLVM_GPU_SRCS = enforce_glob(
+    # keep sorted
+    [
+        "reverse.mlir",
+        "scan.mlir",
+        "scatter.mlir",
+        "sort.mlir",
+        "top-k.mlir",
+        "winograd_input.mlir",
+        "winograd_output.mlir",
+    ],
+    include = ["*.mlir"],
+    exclude = [
+        "attention.mlir",
+    ],
+)
+
 iree_check_single_backend_test_suite(
     name = "check_cuda",
-    srcs = enforce_glob(
-        # keep sorted
-        [
-            "reverse.mlir",
-            "scan.mlir",
-            "scatter.mlir",
-            "sort.mlir",
-            "top-k.mlir",
-        ],
-        include = ["*.mlir"],
-        exclude = [
-            "attention.mlir",
-            "winograd_input.mlir",
-            "winograd_output.mlir",
-        ],
-    ),
+    srcs = LLVM_GPU_SRCS,
     driver = "cuda",
     tags = [
         # CUDA cuInit fails with sanitizer on.
@@ -44,6 +96,46 @@
 )
 
 iree_check_single_backend_test_suite(
+    name = "check_rocm_hip",
+    srcs = LLVM_GPU_SRCS,
+    driver = "hip",
+    target_backend = "rocm",
+)
+
+SPIRV_SRCS = enforce_glob(
+    # keep sorted
+    [
+        "reverse.mlir",
+        "scan.mlir",
+        "scatter.mlir",
+        "sort.mlir",
+        "winograd_input.mlir",
+        "winograd_output.mlir",
+    ],
+    include = ["*.mlir"],
+    exclude = [
+        "attention.mlir",
+        "top-k.mlir",
+    ],
+)
+
+iree_check_single_backend_test_suite(
+    name = "check_metal-spirv_vulkan",
+    srcs = SPIRV_SRCS,
+    driver = "metal",
+    target_backend = "metal-spirv",
+)
+
+iree_check_single_backend_test_suite(
+    name = "check_vulkan-spirv_vulkan",
+    srcs = SPIRV_SRCS,
+    driver = "vulkan",
+    target_backend = "vulkan-spirv",
+)
+
+# TODO: Remove topk-split-reduction tests? The flag looks like an unfinished experiment.
+
+iree_check_single_backend_test_suite(
     name = "check_cuda-topk-split-reduction",
     srcs = [
         "top-k.mlir",
@@ -78,96 +170,3 @@
     ],
     target_backend = "cuda",
 )
-
-iree_cmake_extra_content(
-    content = """
-# Failing on Emscripten: https://github.com/iree-org/iree/issues/12129
-if(NOT EMSCRIPTEN)
-""",
-    inline = True,
-)
-
-iree_check_single_backend_test_suite(
-    name = "check_llvm-cpu_local-task",
-    srcs = enforce_glob(
-        # keep sorted
-        [
-            "attention.mlir",
-            "reverse.mlir",
-            "scan.mlir",
-            "scatter.mlir",
-            "sort.mlir",
-            "top-k.mlir",
-            "winograd_input.mlir",
-            "winograd_output.mlir",
-        ],
-        include = ["*.mlir"],
-    ),
-    driver = "local-task",
-    target_backend = "llvm-cpu",
-)
-
-iree_cmake_extra_content(
-    content = """
-endif()
-""",
-    inline = True,
-)
-
-iree_check_single_backend_test_suite(
-    name = "check_vmvx_local-task",
-    srcs = enforce_glob(
-        # keep sorted
-        [
-            "reverse.mlir",
-            "scan.mlir",
-            "scatter.mlir",
-            "sort.mlir",
-            "top-k.mlir",
-        ],
-        include = ["*.mlir"],
-        exclude = [
-            "attention.mlir",
-            "winograd_input.mlir",
-            "winograd_output.mlir",
-        ],
-    ),
-    driver = "local-task",
-    target_backend = "vmvx",
-)
-
-iree_check_single_backend_test_suite(
-    name = "check_vulkan-spirv_vulkan",
-    srcs = enforce_glob(
-        # keep sorted
-        [
-            "scatter.mlir",
-            # Top-k test disabled due to miscompile on vulkan.
-            #    "top-k.mlir",
-            "sort.mlir",
-            "winograd_input.mlir",
-            "winograd_output.mlir",
-        ],
-        include = ["*.mlir"],
-        exclude = [
-            "attention.mlir",
-            "reverse.mlir",  #TODO(#12415): disabled due to miscompilation on Pixel 6.
-            # TODO(antiagainst): scan fails on Adreno GPUs due to driver bug.
-            # Re-enable this once we have new devices with up-to-date drivers.
-            "top-k.mlir",
-            "scan.mlir",
-        ],
-    ),
-    driver = "vulkan",
-    target_backend = "vulkan-spirv",
-)
-
-test_suite(
-    name = "check",
-    tests = [
-        ":check_cuda",
-        ":check_llvm-cpu_local-task",
-        ":check_vmvx_local-task",
-        ":check_vulkan-spirv_vulkan",
-    ],
-)
diff --git a/tests/e2e/linalg_ext_ops/CMakeLists.txt b/tests/e2e/linalg_ext_ops/CMakeLists.txt
index 067a8ff..1948068 100644
--- a/tests/e2e/linalg_ext_ops/CMakeLists.txt
+++ b/tests/e2e/linalg_ext_ops/CMakeLists.txt
@@ -12,6 +12,43 @@
 
 iree_check_single_backend_test_suite(
   NAME
+    check_llvm-cpu_local-task
+  SRCS
+    "attention.mlir"
+    "reverse.mlir"
+    "scan.mlir"
+    "scatter.mlir"
+    "sort.mlir"
+    "top-k.mlir"
+    "winograd_input.mlir"
+    "winograd_output.mlir"
+  TARGET_BACKEND
+    "llvm-cpu"
+  DRIVER
+    "local-task"
+  LABELS
+    "nowasm"
+)
+
+iree_check_single_backend_test_suite(
+  NAME
+    check_vmvx_local-task
+  SRCS
+    "reverse.mlir"
+    "scan.mlir"
+    "scatter.mlir"
+    "sort.mlir"
+    "top-k.mlir"
+    "winograd_input.mlir"
+    "winograd_output.mlir"
+  TARGET_BACKEND
+    "vmvx"
+  DRIVER
+    "local-task"
+)
+
+iree_check_single_backend_test_suite(
+  NAME
     check_cuda
   SRCS
     "reverse.mlir"
@@ -19,6 +56,8 @@
     "scatter.mlir"
     "sort.mlir"
     "top-k.mlir"
+    "winograd_input.mlir"
+    "winograd_output.mlir"
   TARGET_BACKEND
     "cuda"
   DRIVER
@@ -33,6 +72,55 @@
 
 iree_check_single_backend_test_suite(
   NAME
+    check_rocm_hip
+  SRCS
+    "reverse.mlir"
+    "scan.mlir"
+    "scatter.mlir"
+    "sort.mlir"
+    "top-k.mlir"
+    "winograd_input.mlir"
+    "winograd_output.mlir"
+  TARGET_BACKEND
+    "rocm"
+  DRIVER
+    "hip"
+)
+
+iree_check_single_backend_test_suite(
+  NAME
+    check_metal-spirv_vulkan
+  SRCS
+    "reverse.mlir"
+    "scan.mlir"
+    "scatter.mlir"
+    "sort.mlir"
+    "winograd_input.mlir"
+    "winograd_output.mlir"
+  TARGET_BACKEND
+    "metal-spirv"
+  DRIVER
+    "metal"
+)
+
+iree_check_single_backend_test_suite(
+  NAME
+    check_vulkan-spirv_vulkan
+  SRCS
+    "reverse.mlir"
+    "scan.mlir"
+    "scatter.mlir"
+    "sort.mlir"
+    "winograd_input.mlir"
+    "winograd_output.mlir"
+  TARGET_BACKEND
+    "vulkan-spirv"
+  DRIVER
+    "vulkan"
+)
+
+iree_check_single_backend_test_suite(
+  NAME
     check_cuda-topk-split-reduction
   SRCS
     "top-k.mlir"
@@ -69,56 +157,4 @@
     "requires-gpu-nvidia"
 )
 
-# Failing on Emscripten: https://github.com/iree-org/iree/issues/12129
-if(NOT EMSCRIPTEN)
-
-iree_check_single_backend_test_suite(
-  NAME
-    check_llvm-cpu_local-task
-  SRCS
-    "attention.mlir"
-    "reverse.mlir"
-    "scan.mlir"
-    "scatter.mlir"
-    "sort.mlir"
-    "top-k.mlir"
-    "winograd_input.mlir"
-    "winograd_output.mlir"
-  TARGET_BACKEND
-    "llvm-cpu"
-  DRIVER
-    "local-task"
-)
-
-endif()
-
-iree_check_single_backend_test_suite(
-  NAME
-    check_vmvx_local-task
-  SRCS
-    "reverse.mlir"
-    "scan.mlir"
-    "scatter.mlir"
-    "sort.mlir"
-    "top-k.mlir"
-  TARGET_BACKEND
-    "vmvx"
-  DRIVER
-    "local-task"
-)
-
-iree_check_single_backend_test_suite(
-  NAME
-    check_vulkan-spirv_vulkan
-  SRCS
-    "scatter.mlir"
-    "sort.mlir"
-    "winograd_input.mlir"
-    "winograd_output.mlir"
-  TARGET_BACKEND
-    "vulkan-spirv"
-  DRIVER
-    "vulkan"
-)
-
 ### BAZEL_TO_CMAKE_PRESERVES_ALL_CONTENT_BELOW_THIS_LINE ###