include_directories("${CMAKE_CURRENT_SOURCE_DIR}")

add_subdirectory(AddressSpaceAliasAnalysis)
add_subdirectory(AggregateArguments)
add_subdirectory(AlignmentAnalysis)
add_subdirectory(Atomics)
add_subdirectory(BIFTransforms)
add_subdirectory(BreakConstantExpr)
add_subdirectory(CorrectlyRoundedDivSqrt)
add_subdirectory(DebuggerSupport)
add_subdirectory(DeviceEnqueueFuncs)
add_subdirectory(ExtenstionFuncs)
add_subdirectory(GenericAddressResolution)
add_subdirectory(ImageFuncs)
add_subdirectory(LocalBuffers)
add_subdirectory(OpenCLPrintf)
add_subdirectory(PrivateMemory)
add_subdirectory(ProgramScopeConstants)
add_subdirectory(ReplaceUnsupportedIntrinsics)
add_subdirectory(ResourceAllocator)
add_subdirectory(SetFastMathFlags)
add_subdirectory(SubGroupFuncs)
add_subdirectory(StatelessToStatefull)
add_subdirectory(UndefinedReferences)
add_subdirectory(VolatileWorkaround)
add_subdirectory(WGFuncs)
add_subdirectory(WIFuncs)
add_subdirectory(ClampLoopUnroll)
add_subdirectory(Image3dToImage2darray)


set(IGC_BUILD__SRC__OpenCLPasses
    "${CMAKE_CURRENT_SOURCE_DIR}/KernelArgs.cpp"
    "${CMAKE_CURRENT_SOURCE_DIR}/BreakdownIntrinsic.cpp"
    "${CMAKE_CURRENT_SOURCE_DIR}/KernelFunctionCloning.cpp"
  )
set(IGC_BUILD__SRC__Optimizer_OpenCLPasses
    ${IGC_BUILD__SRC__OpenCLPasses}
    ${IGC_BUILD__SRC__OpenCLPasses_AddressSpaceAliasAnalysis}
    ${IGC_BUILD__SRC__OpenCLPasses_AggregateArguments}
    ${IGC_BUILD__SRC__OpenCLPasses_AlignmentAnalysis}
    ${IGC_BUILD__SRC__OpenCLPasses_Atomics}
    ${IGC_BUILD__SRC__OpenCLPasses_BIFTransforms}
    ${IGC_BUILD__SRC__OpenCLPasses_BreakConstantExpr}
    ${IGC_BUILD__SRC__OpenCLPasses_CorrectlyRoundedDivSqrt}
    ${IGC_BUILD__SRC__OpenCLPasses_DebuggerSupport}
    ${IGC_BUILD__SRC__OpenCLPasses_DeviceEnqueueFuncs}
    ${IGC_BUILD__SRC__OpenCLPasses_ExtenstionFuncs}
    ${IGC_BUILD__SRC__OpenCLPasses_GenericAddressResolution}
    ${IGC_BUILD__SRC__OpenCLPasses_ImageFuncs}
    ${IGC_BUILD__SRC__OpenCLPasses_LocalBuffers}
    ${IGC_BUILD__SRC__OpenCLPasses_LowerLocalMemPool}
    ${IGC_BUILD__SRC__OpenCLPasses_OpenCLPrintf}
    ${IGC_BUILD__SRC__OpenCLPasses_PrivateMemory}
    ${IGC_BUILD__SRC__OpenCLPasses_ProgramScopeConstants}
    ${IGC_BUILD__SRC__OpenCLPasses_ReplaceUnsupportedIntrinsics}
    ${IGC_BUILD__SRC__OpenCLPasses_ResourceAllocator}
    ${IGC_BUILD__SRC__OpenCLPasses_SetFastMathFlags}
    ${IGC_BUILD__SRC__OpenCLPasses_SubGroupFuncs}
    ${IGC_BUILD__SRC__OpenCLPasses_StatelessToStatefull}
    ${IGC_BUILD__SRC__OpenCLPasses_UndefinedReferences}
    ${IGC_BUILD__SRC__OpenCLPasses_VolatileWorkaround}
    ${IGC_BUILD__SRC__OpenCLPasses_WGFuncs}
    ${IGC_BUILD__SRC__OpenCLPasses_WIFuncs}
    ${IGC_BUILD__SRC__OpenCLPasses_ClampLoopUnroll}
    ${IGC_BUILD__SRC__OpenCLPasses_Image3dToImage2darray}
    PARENT_SCOPE
  )

set(IGC_BUILD__HDR__OpenCLPasses
    "${CMAKE_CURRENT_SOURCE_DIR}/KernelArgs.hpp"
    "${CMAKE_CURRENT_SOURCE_DIR}/BreakdownIntrinsic.h"
    "${CMAKE_CURRENT_SOURCE_DIR}/KernelFunctionCloning.h"
  )
set(IGC_BUILD__HDR__Optimizer_OpenCLPasses
    ${IGC_BUILD__HDR__OpenCLPasses}
    ${IGC_BUILD__HDR__OpenCLPasses_AddressSpaceAliasAnalysis}
    ${IGC_BUILD__HDR__OpenCLPasses_AggregateArguments}
    ${IGC_BUILD__HDR__OpenCLPasses_AlignmentAnalysis}
    ${IGC_BUILD__HDR__OpenCLPasses_Atomics}
    ${IGC_BUILD__HDR__OpenCLPasses_BIFTransforms}
    ${IGC_BUILD__HDR__OpenCLPasses_BreakConstantExpr}
    ${IGC_BUILD__HDR__OpenCLPasses_CorrectlyRoundedDivSqrt}
    ${IGC_BUILD__HDR__OpenCLPasses_DebuggerSupport}
    ${IGC_BUILD__HDR__OpenCLPasses_DeviceEnqueueFuncs}
    ${IGC_BUILD__HDR__OpenCLPasses_ExtenstionFuncs}
    ${IGC_BUILD__HDR__OpenCLPasses_GenericAddressResolution}
    ${IGC_BUILD__HDR__OpenCLPasses_ImageFuncs}
    ${IGC_BUILD__HDR__OpenCLPasses_LocalBuffers}
    ${IGC_BUILD__HDR__OpenCLPasses_LowerLocalMemPool}
    ${IGC_BUILD__HDR__OpenCLPasses_OpenCLPrintf}
    ${IGC_BUILD__HDR__OpenCLPasses_PrivateMemory}
    ${IGC_BUILD__HDR__OpenCLPasses_ProgramScopeConstants}
    ${IGC_BUILD__HDR__OpenCLPasses_ReplaceUnsupportedIntrinsics}
    ${IGC_BUILD__HDR__OpenCLPasses_ResourceAllocator}
    ${IGC_BUILD__HDR__OpenCLPasses_SetFastMathFlags}
    ${IGC_BUILD__HDR__OpenCLPasses_SubGroupFuncs}
    ${IGC_BUILD__HDR__OpenCLPasses_StatelessToStatefull}
    ${IGC_BUILD__HDR__OpenCLPasses_UndefinedReferences}
    ${IGC_BUILD__HDR__OpenCLPasses_VolatileWorkaround}
    ${IGC_BUILD__HDR__OpenCLPasses_WGFuncs}
    ${IGC_BUILD__HDR__OpenCLPasses_WIFuncs}
    ${IGC_BUILD__HDR__OpenCLPasses_ClampLoopUnroll}
    ${IGC_BUILD__HDR__OpenCLPasses_Image3dToImage2darray}
    PARENT_SCOPE
  )


igc_sg_register(
    Compiler__Optimizer_OpenCLPasses
    "OpenCLPasses"
    GROUPS
      Compiler__OpenCLPasses_AddressSpaceAliasAnalysis
      Compiler__OpenCLPasses_AggregateArguments
      Compiler__OpenCLPasses_AlignmentAnalysis
      Compiler__OpenCLPasses_Atomics
      Compiler__OpenCLPasses_BIFTransforms
      Compiler__OpenCLPasses_BreakConstantExpr
      Compiler__OpenCLPasses_CorrectlyRoundedDivSqrt
      Compiler__OpenCLPasses_DebuggerSupport
      Compiler__OpenCLPasses_DeviceEnqueueFuncs
      Compiler__OpenCLPasses_ExtenstionFuncs
      Compiler__OpenCLPasses_GenericAddressResolution
      Compiler__OpenCLPasses_GenericAddressSpaceStaticResolution
      Compiler__OpenCLPasses_ImageFuncs
      Compiler__OpenCLPasses_LocalBuffers
      Compiler__OpenCLPasses_LowerLocalMemPool
      Compiler__OpenCLPasses_OpenCLPrintf
      Compiler__OpenCLPasses_PrivateMemory
      Compiler__OpenCLPasses_ProgramScopeConstants
      Compiler__OpenCLPasses_ReplaceUnsupportedIntrinsics
      Compiler__OpenCLPasses_SetFastMathFlags
      Compiler__OpenCLPasses_SubGroupFuncs
      Compiler__OpenCLPasses_StatelessToStatefull
      Compiler__OpenCLPasses_UndefinedReferences
      Compiler__OpenCLPasses_VolatileWorkaround
      Compiler__OpenCLPasses_WGFuncs
      Compiler__OpenCLPasses_WIFuncs
      Compiler__OpenCLPasses_ClampLoopUnroll
      Compiler__OpenCLPasses_Image3dToImage2darray
    FILES
      ${IGC_BUILD__SRC__OpenCLPasses}
      ${IGC_BUILD__HDR__OpenCLPasses}
      ${IGC_BUILD__SRC__OpenCLPasses_ResourceAllocator}
      ${IGC_BUILD__HDR__OpenCLPasses_ResourceAllocator}
  )
