# Copyright 2019 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

# Tests for end-to-end IREE support of specific features to prevent regression.
# These should focus on support by IREE itself, not for issues with specific runner tools.
# Place those tests in tools/test/

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

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

BACKEND_TESTS = [
    "i1_inlined_constant.mlir",
    "linalg_ops.mlir",
    "reduction_broadcast_elementwise.mlir",
    "scalar_computation.mlir",
    "softmax.mlir",
    "strided_slice.mlir",
    "transpose.mlir",
]

iree_lit_test_suite(
    name = "lit",
    srcs = [
        "fill_i64.mlir",
        "force_single_dispatch.mlir",
        "globals.mlir",
        "libm_linking.mlir",
        "scalar.mlir",
        "trace_dispatch_tensors.mlir",
        "transients_test.mlir",
        "unused_args.mlir",
    ],
    cfg = "//tests:lit.cfg.py",
    tags = [
        "driver=local-task",
        "hostonly",
    ],
    tools = [
        "//tools:iree-compile",
        "//tools:iree-opt",
        "//tools:iree-run-mlir",
        "@llvm-project//lld",
        "@llvm-project//llvm:FileCheck",
    ],
)

iree_check_single_backend_test_suite(
    name = "check_fp_reassoc_regression_llvm-cpu",
    srcs = [
        "associative_reordering.mlir",
    ],
    compiler_flags = [
        "--iree-llvmcpu-reassociate-fp-reductions=false",
        "--iree-llvmcpu-target-cpu=generic",
    ],
    driver = "local-task",
    target_backend = "llvm-cpu",
)

iree_check_single_backend_test_suite(
    name = "check_regression_llvm-cpu",
    srcs = [
        "broadcast_batch_matmul_to_matmul.mlir",
        "layernorm.mlir",
        "pack_pad_transpose_1x9_into_2x1x8x4_issue_12546.mlir",
        "split_reduction_using_tiling.mlir",
    ] + BACKEND_TESTS,
    compiler_flags = ["--iree-llvmcpu-target-cpu=generic"],
    driver = "local-task",
    target_backend = "llvm-cpu",
)

# TODO(22013): Merge the test suite into the main one, after the issue is fixed.
iree_check_single_backend_test_suite(
    name = "check_regression_dynamic_gather_attention_llvm-cpu",
    srcs = [
        "dynamic_gather_attention.mlir",
    ],
    compiler_flags = ["--iree-llvmcpu-target-cpu=generic"],
    driver = "local-task",
    tags = [
        "noriscv",
    ],
    target_backend = "llvm-cpu",
)

# TODO(24342): Merge the test suite into the main e2e reverse coverage in
# tests/e2e/stablehlo_ops/reverse.mlir once the RISC-V vector miscompile of
# fused slice + reverse is fixed.
iree_check_single_backend_test_suite(
    name = "check_regression_xla_reverse_after_slice_llvm-cpu",
    srcs = [
        "xla_reverse_after_slice.mlir",
    ],
    compiler_flags = ["--iree-llvmcpu-target-cpu=generic"],
    driver = "local-task",
    tags = [
        "noriscv",
    ],
    target_backend = "llvm-cpu",
)

iree_check_single_backend_test_suite(
    name = "check_regression_tosa_llvm-cpu",
    srcs = [
        # --iree-input-type=tosa is interesting for this test because
        # it includes the --iree-linalg-quantized-matmul-to-matmul pass,
        # so this tests provides e2e coverage for that pass.
        "linalg_quantized_matmul_vs_linalg_matmul.mlir",
    ],
    compiler_flags = ["--iree-llvmcpu-target-cpu=generic"],
    driver = "local-task",
    target_backend = "llvm-cpu",
)

iree_check_single_backend_test_suite(
    name = "check_regression_vmvx",
    srcs = [
        "layernorm.mlir",
    ] + BACKEND_TESTS,
    driver = "local-task",
    target_backend = "vmvx",
)

iree_check_single_backend_test_suite(
    name = "check_regression_vulkan-spirv",
    # TODO(#10024): Fix layernorm.mlir on Pixel 6 and put in BACKEND_TESTS.
    srcs = BACKEND_TESTS,
    driver = "vulkan",
    target_backend = "vulkan-spirv",
)

iree_check_single_backend_test_suite(
    name = "check_regression_cuda",
    srcs = [
        "large_reduction.mlir",
        "layernorm.mlir",
    ] + BACKEND_TESTS,
    driver = "cuda",
    tags = [
        # CUDA cuInit fails with sanitizer on.
        "noasan",
        "nomsan",
        "notsan",
        "noubsan",
        "requires-gpu-nvidia",
    ],
    target_backend = "cuda",
)

iree_check_single_backend_test_suite(
    name = "check_regression_hip",
    # TODO(kuhar): Drop the timeout after we switch to testing on the actual gfx1250 chip.
    timeout = "moderate",
    srcs = [
        "dynamic_batch_matmul_gfx1100.mlir",
        "dynamic_gather_attention.mlir",
        "linalg_ops_dynamic.mlir",
        "split_reduction_using_tiling.mlir",
    ],
    compiler_flags = [
        "--iree-opt-level=O3",
    ],
    driver = "hip",
    tags = [
        "noasan",
        "nomsan",
        "notsan",
        "noubsan",
        "requires-gpu-amd",
    ],
    target_backend = "rocm",
)

# Isolated suite so `--iree-input-demote-f64-to-f32=false` only applies to the
# 64-bit-element vector distribution test and does not bleed into unrelated
# tests in `check_regression_hip`.
iree_check_single_backend_test_suite(
    name = "check_regression_vector_distribute_64bit_hip",
    timeout = "moderate",
    srcs = [
        "vector_distribute_64bit_amdgpu.mlir",
    ],
    compiler_flags = [
        "--iree-opt-level=O3",
        # The test relies on f64 reaching codegen; the default f64->f32
        # demotion would silently turn it into the f32 case.
        "--iree-input-demote-f64-to-f32=false",
    ],
    driver = "hip",
    tags = [
        "noasan",
        "nomsan",
        "notsan",
        "noubsan",
        "requires-gpu-amd",
    ],
    target_backend = "rocm",
)

iree_check_single_backend_test_suite(
    name = "aggressive_fusion_test_cuda",
    srcs = [
        "softmax.mlir",
        "softmax_large.mlir",
    ],
    compiler_flags = [
        "--iree-dispatch-creation-fuse-multi-use",
    ],
    driver = "cuda",
    tags = [
        # CUDA cuInit fails with sanitizer on.
        "noasan",
        "nomsan",
        "notsan",
        "noubsan",
        "requires-gpu-nvidia",
    ],
    target_backend = "cuda",
)

iree_check_single_backend_test_suite(
    name = "aggressive_fusion_test",
    srcs = [
        "softmax.mlir",
    ],
    compiler_flags = [
        "--iree-dispatch-creation-fuse-multi-use",
        "--iree-llvmcpu-target-cpu=generic",
    ],
    driver = "local-task",
    target_backend = "llvm-cpu",
)

# Compilation-only (no driver specified, the default None means compile only)
# regression testcases for VMVX backend with microkernels. Indeed we have had
# a couple of hard-to-diagnose issues that were purely compilation issue, no
# particular concern about correctness once compilation succeeds, and having
# compilation-only tests allows us to import the original unmodified testcase.
iree_check_single_backend_test_suite(
    name = "check_regression_compilation_only_vmvx_ukernels",
    srcs = [
        "dynamic_matmuls_on_same_accumulator_issue_12060.mlir",
    ],
    compiler_flags = [
        "--iree-vmvx-enable-microkernels",
    ],
    target_backend = "vmvx",
)
