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

set(IREE_PACKAGE_ROOT_DIR "${CMAKE_CURRENT_LIST_DIR}")
set(IREE_PACKAGE_ROOT_PREFIX "iree::target::amd-aie::Transforms")
iree_add_all_subdirs()

iree_tablegen_library(
  NAME
    PassesIncGen
  TD_FILE
    "Passes.td"
  OUTS
    --gen-pass-decls Passes.h.inc
)

iree_cc_library(
  NAME
    PassHeaders
  HDRS
    "PassDetail.h"
    "Passes.h"
    "Passes.h.inc"
  DEPS
    ::PassesIncGen
    iree::target::amd-aie::IR::AMDAIEDialect
    MLIRPass
  PUBLIC
)

iree_cc_library(
  NAME
    Transforms
  HDRS
    "KernelDispatch.h"
    "Passes.h"
    "AMDAIECreateAIEWorkgroup.h"
    "AMDAIELowerToAIE.h"
    "Transforms.h"
  SRCS
    "AMDAIEAccessToAcquireRelease.cpp"
    "AMDAIEAddLoweringStrategy.cpp"
    "AMDAIEAcquireReleaseToUseLock.cpp"
    "AMDAIEAssignBDIDs.cpp"
    "AMDAIEAssignBufferAddress.cpp"
    "AMDAIEAssignChannels.cpp"
    "AMDAIEAssignConnectionTypes.cpp"
    "AMDAIEAssignLogicalObjectFifoDepth.cpp"
    "AMDAIEAssignNpuDmaBdIds.cpp"
    "AMDAIEAssignPacketIds.cpp"
    "AMDAIEAssignTiles.cpp"
    "AMDAIEBufferizeToAllocation.cpp"
    "AMDAIECanonicalizeNpuDmaCpyNd.cpp"
    "AMDAIECanonicalizeDoublyStridedOp.cpp"
    "AMDAIECombineStridedOps.cpp"
    "AMDAIEConnectionToFlow.cpp"
    "AMDAIEConvertToDma.cpp"
    "AMDAIEControlCodeForallToFor.cpp"
    "AMDAIEControlCodeLowering.cpp"
    "AMDAIEControlCodeLoopUnroll.cpp"
    "AMDAIEControlCodeToTransaction.cpp"
    "AMDAIEControlPacketToNpuDma.cpp"
    "AMDAIEConvertCoreForallToFor.cpp"
    "AMDAIEConvertDeviceToControlPackets.cpp"
    "AMDAIECreateAIEWorkgroup.cpp"
    "AMDAIECreateReferenceToAllocation.cpp"
    "AMDAIEDistributeCoresAndObjectFifos.cpp"
    "AMDAIEDistributeL1Allocations.cpp"
    "AMDAIEReplicateCalls.cpp"
    "AMDAIEDmaCSE.cpp"
    "AMDAIEDmaComposition.cpp"
    "AMDAIEDmaLoopSubsumption.cpp"
    "AMDAIEDmaToCircularDma.cpp"
    "AMDAIEFlattenLogicalObjectFifo.cpp"
    "AMDAIELinalgFunctionOutlining.cpp"
    "AMDAIEFoldDmaWaits.cpp"
    "AMDAIEFuseConsumerIntoLoop.cpp"
    "AMDAIEFuseFillIntoForall.cpp"
    "AMDAIEFuseProducerIntoLoop.cpp"
    "AMDAIEGenerateControlOverlay.cpp"
    "AMDAIEHoistForAffineApply.cpp"
    "AMDAIEHoistLogicalObjFifo.cpp"
    "AMDAIEInsertCopyOps.cpp"
    "AMDAIEInsertCores.cpp"
    "AMDAIEInsertDmaBdChain.cpp"
    "AMDAIEInsertDmaOutOfOrderBlock.cpp"
    "AMDAIEInsertInfiniteLoopAroundCoreBlock.cpp"
    "AMDAIEInsertLoopsForVectorization.cpp"
    "AMDAIELinkExecutables.cpp"
    "AMDAIELocalizeLogicalObjectFifo.cpp"
    "AMDAIELoadStoreAlignmentReset.cpp"
    "AMDAIELowerExecutableTarget.cpp"
    "AMDAIELowerFuncArgs.cpp"
    "AMDAIELowerToAIE.cpp"
    "AMDAIELowerToUKernels.cpp"
    "AMDAIELowerWorkgroupCount.cpp"
    "AMDAIEMapForallToCores.cpp"
    "AMDAIENoneAccessToTemporaryBuffer.cpp"
    "AMDAIENormalizeLoopBounds.cpp"
    "AMDAIENpuDmaToHalfDmaCpyNd.cpp"
    "AMDAIEObjFifoBufferization.cpp"
    "AMDAIEPackAndTranspose.cpp"
    "AMDAIEPad.cpp"
    "AMDAIEPeelForLoop.cpp"
    "AMDAIEPropagateDataLayout.cpp"
    "AMDAIERemoveMemorySpace.cpp"
    "AMDAIERemoveWrapFlagFromGep.cpp"
    "AMDAIESinkIntoCore.cpp"
    "AMDAIESplitControlPacketData.cpp"
    "AMDAIESplitLogicalObjFifos.cpp"
    "AMDAIESplitLogicalObjFifosForConnectionReuse.cpp"
    "AMDAIETemporaryAllocBufferization.cpp"
    "AMDAIETile.cpp"
    "AMDAIETileAndFuse.cpp"
    "AMDAIEAddNoAliasFunctionArguments.cpp"
    "AMDAIEVectorization.cpp"
    "BridgeToAIRPass.cpp"
    "DecomposeLinalgExtPackUnPackToAIR.cpp"
    "Cleanup.cpp"
    "KernelDispatch.cpp"
    "Passes.cpp"
  DEPS
    ::PassHeaders
    ::PassesIncGen
    iree::compiler::Codegen::Common::TransformDialectInterpreterPass
    iree::compiler::Codegen::Dialect::Codegen::IR::IREECodegenDialect
    iree::compiler::Dialect::HAL::IR
    iree::compiler::Dialect::HAL::IR::HALDialect
    iree::compiler::Dialect::LinalgExt::IR
    iree::compiler::Dialect::LinalgExt::Transforms
    iree::compiler::Utils
    iree-amd-aie::aie_runtime::iree_aie_runtime_static
    iree-amd-aie::aie_runtime::Utils
    iree-amd-aie::aie_runtime::AMDAIEEnums
    iree::target::amd-aie::IR::AMDAIEDialect
    iree::target::amd-aie::aie::AIEDialectIR
    iree::target::amd-aie::aie::AIEPasses
    iree::target::amd-aie::aie::AIEXDialectIR
    iree::target::amd-aie::aievec::AIEVecConvertToLLVM
    iree::target::amd-aie::air::AIRConversionPasses
    iree::target::amd-aie::air::AIRTransformPasses
    iree::target::amd-aie::Transforms::Utils
    IREELinalgTransformDialectPasses
    MLIRFuncAllExtensions
    MLIRFuncDialect
    MLIRFunctionInterfaces
    MLIRLLVMCommonConversion
    MLIRLLVMDialect
    MLIRLinalgDialect
    MLIRLinalgTransforms
    MLIRMemRefDialect
    MLIRPDLDialect
    MLIRPDLInterpDialect
    MLIRPass
    MLIRSCFDialect
    MLIRSCFToControlFlow
    MLIRSCFTransforms
    MLIRSCFUtils
    MLIRSupport
    MLIRTensorDialect
    MLIRTensorTransforms
    MLIRToLLVMIRTranslationRegistration
    MLIRTransforms
    MLIRVectorDialect
    MLIRVectorToLLVM
    MLIRVectorToSCF
    MLIRVectorTransforms
  PUBLIC
)
