cc_library(
    name = "in_place_dynamic_update_slice",
    srcs = ["in_place_dynamic_update_slice.cc"],
    hdrs = ["in_place_dynamic_update_slice.h"],
    visibility = ["//visibility:public"],
    deps = [
        ":fusion_emitter",
        "//xla/service/gpu:hlo_fusion_analysis",
        "//xla/service/gpu:ir_emission_utils",
        "//xla/service/gpu:launch_dimensions",
        "//xla/service/llvm_ir:dynamic_update_slice_util",
        "//xla/service/llvm_ir:fused_ir_emitter",
        "@llvm-project//llvm:Support",
        "@llvm-project//llvm:ir_headers",
    ],
)

cc_library(
    name = "copy",
    srcs = ["copy.cc"],
    hdrs = ["copy.h"],
    visibility = ["//visibility:public"],
    deps = [
        ":fusion_emitter",
        "//xla/service/gpu:gpu_executable",
        "//xla/service/gpu:ir_emitter_context",
    ],
)

cc_library(
    name = "fusion_emitter",
    srcs = ["fusion_emitter.cc"],
    hdrs = ["fusion_emitter.h"],
    visibility = ["//visibility:public"],
    deps = [
        "//xla/hlo/ir:hlo",
        "//xla/mlir_hlo:lhlo",
        "//xla/service:elemental_ir_emitter",
        "//xla/service/gpu:gpu_executable",
        "//xla/service/gpu:hlo_to_ir_bindings",
        "//xla/service/gpu:ir_emitter_context",
        "//xla/service/gpu:kernel_arguments",
        "//xla/service/gpu:kernel_reuse_cache",
        "//xla/service/gpu:launch_dimensions",
        "//xla/service/gpu:target_util",
        "//xla/service/gpu:thunk",
        "//xla/service/llvm_ir:buffer_assignment_util",
        "//xla/service/llvm_ir:ir_array",
        "//xla/service/llvm_ir:llvm_util",
        "//xla/translate/mhlo_to_hlo:location_exporter",
        "@com_google_absl//absl/strings",
        "@llvm-project//llvm:Support",
        "@llvm-project//llvm:ir_headers",
        "@llvm-project//mlir:IR",
        "@llvm-project//mlir:MemRefDialect",
    ],
)

cc_library(
    name = "fusions",
    srcs = ["fusions.cc"],
    hdrs = ["fusions.h"],
    visibility = ["//visibility:public"],
    deps = [
        ":copy",
        ":fusion_emitter",
        ":in_place_dynamic_update_slice",
        ":input_slices",
        ":loop",
        ":reduction",
        ":transpose",
        "//xla:shape_util",
        "//xla/hlo/ir:hlo",
        "//xla/mlir_hlo:lhlo",
        "//xla/service:buffer_assignment",
        "//xla/service:elemental_ir_emitter",
        "//xla/service/gpu:hlo_fusion_analysis",
        "//xla/service/gpu:ir_emission_utils",
        "//xla/service/gpu:ir_emitter_context",
        "@com_google_absl//absl/types:span",
        "@llvm-project//mlir:IR",
    ],
)

cc_library(
    name = "loop",
    srcs = ["loop.cc"],
    hdrs = ["loop.h"],
    visibility = ["//visibility:public"],
    deps = [
        ":fusion_emitter",
        "//xla/hlo/ir:hlo",
        "//xla/mlir_hlo:lhlo",
        "//xla/service:elemental_ir_emitter",
        "//xla/service/gpu:hlo_fusion_analysis",
        "//xla/service/gpu:ir_emitter_context",
        "//xla/service/gpu:parallel_loop_emitter",
        "//xla/service/llvm_ir:fused_ir_emitter",
        "@llvm-project//llvm:ir_headers",
    ],
)

cc_library(
    name = "tiling_util",
    srcs = ["tiling_util.cc"],
    hdrs = ["tiling_util.h"],
    visibility = ["//visibility:public"],
    deps = [
        "//xla/service/gpu:hlo_fusion_analysis",
        "//xla/service/gpu:ir_emission_utils",
        "//xla/service/gpu:target_util",
        "//xla/service/llvm_ir:ir_array",
        "//xla/service/llvm_ir:kernel_support_library",
        "@llvm-project//llvm:ir_headers",
    ],
)

cc_library(
    name = "thunk_util",
    srcs = ["thunk_util.cc"],
    hdrs = ["thunk_util.h"],
    visibility = ["//visibility:public"],
    deps = [
        "//xla:shape_util",
        "//xla:statusor",
        "//xla/service/gpu:gpu_executable",
        "//xla/service/gpu:ir_emission_utils",
        "//xla/service/gpu:ir_emitter_context",
        "//xla/service/gpu:thunk",
        "//xla/translate/hlo_to_mhlo:hlo_utils",
        "@com_google_absl//absl/types:span",
        "@llvm-project//mlir:IR",
        "@llvm-project//mlir:MemRefDialect",
    ],
)

cc_library(
    name = "reduction",
    srcs = ["reduction.cc"],
    hdrs = ["reduction.h"],
    visibility = ["//visibility:public"],
    deps = [
        ":fusion_emitter",
        ":thunk_util",
        ":tiling_util",
        "//xla:shape_util",
        "//xla:status",
        "//xla:status_macros",
        "//xla:statusor",
        "//xla/hlo/ir:hlo",
        "//xla/mlir_hlo",
        "//xla/mlir_hlo:lhlo",
        "//xla/service:elemental_ir_emitter",
        "//xla/service/gpu:gpu_executable",
        "//xla/service/gpu:gpu_fusible",
        "//xla/service/gpu:hlo_fusion_analysis",
        "//xla/service/gpu:ir_emission_utils",
        "//xla/service/gpu:ir_emitter",
        "//xla/service/gpu:ir_emitter_context",
        "//xla/service/gpu:kernel_reuse_cache",
        "//xla/service/gpu:parallel_loop_emitter",
        "//xla/service/gpu:target_util",
        "//xla/service/gpu:thunk",
        "//xla/service/llvm_ir:fused_ir_emitter",
        "//xla/service/llvm_ir:ir_array",
        "//xla/service/llvm_ir:kernel_support_library",
        "//xla/service/llvm_ir:llvm_util",
        "//xla/service/llvm_ir:loop_emitter",
        "//xla/translate/mhlo_to_hlo:location_exporter",
        "@com_google_absl//absl/container:inlined_vector",
        "@com_google_absl//absl/strings",
        "@com_google_absl//absl/types:span",
        "@llvm-project//llvm:Support",
        "@llvm-project//llvm:ir_headers",
        "@llvm-project//mlir:Support",
        "@local_tsl//tsl/platform:logging",
        "@local_tsl//tsl/platform:status",
        "@local_tsl//tsl/platform:statusor",
    ],
)

cc_library(
    name = "transpose",
    srcs = ["transpose.cc"],
    hdrs = ["transpose.h"],
    visibility = ["//visibility:public"],
    deps = [
        ":fusion_emitter",
        ":tiling_util",
        "//xla:permutation_util",
        "//xla/hlo/ir:hlo",
        "//xla/mlir_hlo:lhlo",
        "//xla/service:elemental_ir_emitter",
        "//xla/service/gpu:hlo_fusion_analysis",
        "//xla/service/gpu:ir_emission_utils",
        "//xla/service/gpu:ir_emitter_context",
        "//xla/service/gpu:target_util",
        "//xla/service/llvm_ir:fused_ir_emitter",
        "//xla/service/llvm_ir:ir_array",
        "//xla/service/llvm_ir:llvm_util",
        "@llvm-project//llvm:ir_headers",
    ],
)

cc_library(
    name = "input_slices",
    srcs = ["input_slices.cc"],
    hdrs = ["input_slices.h"],
    visibility = ["//visibility:public"],
    deps = [
        ":fusion_emitter",
        "//xla/service:elemental_ir_emitter",
        "//xla/service/gpu:hlo_fusion_analysis",
        "//xla/service/gpu:ir_emission_utils",
        "//xla/service/gpu:parallel_loop_emitter",
        "//xla/service/llvm_ir:fused_ir_emitter",
        "//xla/service/llvm_ir:kernel_support_library",
        "//xla/service/llvm_ir:llvm_util",
        "@llvm-project//llvm:ir_headers",
    ],
)
