# Copyright 2021 The IREE Authors
#
# Licensed under the Apache License v2.0 with LLVM Exceptions.
# See https://llvm.org/LICENSE.txt for license information.
# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception

load("//build_tools/bazel:enforce_glob.bzl", "enforce_glob")
load("//build_tools/bazel:iree_check_test.bzl", "iree_check_single_backend_test_suite")

package(
    features = ["layering_check"],
    licenses = ["notice"],  # Apache 2.0
)

ALL_SRCS = enforce_glob(
    # keep sorted
    [
        "collapse_shape.mlir",
        "concat.mlir",
        "expand_shape.mlir",
        "extract_slice.mlir",
        "pack.mlir",
        "pack_dynamic_inner_tiles.mlir",
        "pack_i8.mlir",
        "tensor_cast.mlir",
        "tensor_insert_slice.mlir",
        "unpack.mlir",
    ],
    include = ["*.mlir"],
    exclude = [],
)

iree_check_single_backend_test_suite(
    name = "check_llvm-cpu_local-task",
    srcs = ALL_SRCS,
    compiler_flags = ["--iree-llvmcpu-target-cpu=generic"],
    driver = "local-task",
    target_backend = "llvm-cpu",
)

iree_check_single_backend_test_suite(
    name = "check_vmvx_local-task",
    srcs = ALL_SRCS,
    driver = "local-task",
    target_backend = "vmvx",
)

iree_check_single_backend_test_suite(
    name = "check_vmvx_ukernel_local-task",
    srcs = [
        "pack.mlir",
        "pack_dynamic_inner_tiles.mlir",
        "unpack.mlir",
    ],
    compiler_flags = [
        "--iree-vmvx-enable-microkernels",
        # Some testcases have linalg.generic ops with multiple ops in the body.
        # If we don't opt out from it, DecomposeLinalgGenericPass splits those
        # into smaller linalg.generic ops with only one op in the body. This
        # results in the creation of temporary buffers between these split
        # linalg.generic ops, causing:
        # > error: failed to legalize operation 'memref.alloca' that was explicitly marked illegal
        "--iree-vmvx-enable-ukernels-decompose-linalg-generic=false",
    ],
    driver = "local-task",
    target_backend = "vmvx",
)

LLVM_GPU_SRCS = enforce_glob(
    # keep sorted
    [
        "collapse_shape.mlir",
        "concat.mlir",
        "expand_shape.mlir",
        "extract_slice.mlir",
        "pack.mlir",
        "pack_i8.mlir",
        "tensor_cast.mlir",
        "tensor_insert_slice.mlir",
        "unpack.mlir",
    ],
    include = ["*.mlir"],
    exclude = [
        "pack_dynamic_inner_tiles.mlir",
    ],
)

iree_check_single_backend_test_suite(
    name = "check_cuda",
    srcs = LLVM_GPU_SRCS,
    driver = "cuda",
    tags = [
        "noasan",
        "nomsan",
        "notsan",
        "noubsan",
        "requires-gpu-nvidia",
    ],
    target_backend = "cuda",
)

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
    [
        "collapse_shape.mlir",
        "concat.mlir",
        "expand_shape.mlir",
        "extract_slice.mlir",
        "tensor_cast.mlir",
        "tensor_insert_slice.mlir",
    ],
    include = ["*.mlir"],
    exclude = [
        "pack.mlir",
        "pack_i8.mlir",
        "pack_dynamic_inner_tiles.mlir",
        "unpack.mlir",
    ],
)

iree_check_single_backend_test_suite(
    name = "check_metal-spirv_metal",
    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",
)
