Subversion Repositories QNX 8.QNX8 LLVM/Clang compiler suite

Rev

Blame | Last modification | View Log | Download | RSS feed

  1. /*===-- llvm-c/Transform/PassBuilder.h - PassBuilder for LLVM C ---*- C -*-===*\
  2. |*                                                                            *|
  3. |* Part of the LLVM Project, under the Apache License v2.0 with LLVM          *|
  4. |* Exceptions.                                                                *|
  5. |* See https://llvm.org/LICENSE.txt for license information.                  *|
  6. |* SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception                    *|
  7. |*                                                                            *|
  8. |*===----------------------------------------------------------------------===*|
  9. |*                                                                            *|
  10. |* This header contains the LLVM-C interface into the new pass manager        *|
  11. |*                                                                            *|
  12. \*===----------------------------------------------------------------------===*/
  13.  
  14. #ifndef LLVM_C_TRANSFORMS_PASSBUILDER_H
  15. #define LLVM_C_TRANSFORMS_PASSBUILDER_H
  16.  
  17. #include "llvm-c/Error.h"
  18. #include "llvm-c/TargetMachine.h"
  19. #include "llvm-c/Types.h"
  20.  
  21. /**
  22.  * @defgroup LLVMCCoreNewPM New Pass Manager
  23.  * @ingroup LLVMCCore
  24.  *
  25.  * @{
  26.  */
  27.  
  28. LLVM_C_EXTERN_C_BEGIN
  29.  
  30. /**
  31.  * A set of options passed which are attached to the Pass Manager upon run.
  32.  *
  33.  * This corresponds to an llvm::LLVMPassBuilderOptions instance
  34.  *
  35.  * The details for how the different properties of this structure are used can
  36.  * be found in the source for LLVMRunPasses
  37.  */
  38. typedef struct LLVMOpaquePassBuilderOptions *LLVMPassBuilderOptionsRef;
  39.  
  40. /**
  41.  * Construct and run a set of passes over a module
  42.  *
  43.  * This function takes a string with the passes that should be used. The format
  44.  * of this string is the same as opt's -passes argument for the new pass
  45.  * manager. Individual passes may be specified, separated by commas. Full
  46.  * pipelines may also be invoked using `default<O3>` and friends. See opt for
  47.  * full reference of the Passes format.
  48.  */
  49. LLVMErrorRef LLVMRunPasses(LLVMModuleRef M, const char *Passes,
  50.                            LLVMTargetMachineRef TM,
  51.                            LLVMPassBuilderOptionsRef Options);
  52.  
  53. /**
  54.  * Create a new set of options for a PassBuilder
  55.  *
  56.  * Ownership of the returned instance is given to the client, and they are
  57.  * responsible for it. The client should call LLVMDisposePassBuilderOptions
  58.  * to free the pass builder options.
  59.  */
  60. LLVMPassBuilderOptionsRef LLVMCreatePassBuilderOptions(void);
  61.  
  62. /**
  63.  * Toggle adding the VerifierPass for the PassBuilder, ensuring all functions
  64.  * inside the module is valid.
  65.  */
  66. void LLVMPassBuilderOptionsSetVerifyEach(LLVMPassBuilderOptionsRef Options,
  67.                                          LLVMBool VerifyEach);
  68.  
  69. /**
  70.  * Toggle debug logging when running the PassBuilder
  71.  */
  72. void LLVMPassBuilderOptionsSetDebugLogging(LLVMPassBuilderOptionsRef Options,
  73.                                            LLVMBool DebugLogging);
  74.  
  75. void LLVMPassBuilderOptionsSetLoopInterleaving(
  76.     LLVMPassBuilderOptionsRef Options, LLVMBool LoopInterleaving);
  77.  
  78. void LLVMPassBuilderOptionsSetLoopVectorization(
  79.     LLVMPassBuilderOptionsRef Options, LLVMBool LoopVectorization);
  80.  
  81. void LLVMPassBuilderOptionsSetSLPVectorization(
  82.     LLVMPassBuilderOptionsRef Options, LLVMBool SLPVectorization);
  83.  
  84. void LLVMPassBuilderOptionsSetLoopUnrolling(LLVMPassBuilderOptionsRef Options,
  85.                                             LLVMBool LoopUnrolling);
  86.  
  87. void LLVMPassBuilderOptionsSetForgetAllSCEVInLoopUnroll(
  88.     LLVMPassBuilderOptionsRef Options, LLVMBool ForgetAllSCEVInLoopUnroll);
  89.  
  90. void LLVMPassBuilderOptionsSetLicmMssaOptCap(LLVMPassBuilderOptionsRef Options,
  91.                                              unsigned LicmMssaOptCap);
  92.  
  93. void LLVMPassBuilderOptionsSetLicmMssaNoAccForPromotionCap(
  94.     LLVMPassBuilderOptionsRef Options, unsigned LicmMssaNoAccForPromotionCap);
  95.  
  96. void LLVMPassBuilderOptionsSetCallGraphProfile(
  97.     LLVMPassBuilderOptionsRef Options, LLVMBool CallGraphProfile);
  98.  
  99. void LLVMPassBuilderOptionsSetMergeFunctions(LLVMPassBuilderOptionsRef Options,
  100.                                              LLVMBool MergeFunctions);
  101.  
  102. /**
  103.  * Dispose of a heap-allocated PassBuilderOptions instance
  104.  */
  105. void LLVMDisposePassBuilderOptions(LLVMPassBuilderOptionsRef Options);
  106.  
  107. /**
  108.  * @}
  109.  */
  110.  
  111. LLVM_C_EXTERN_C_END
  112.  
  113. #endif // LLVM_C_TRANSFORMS_PASSBUILDER_H
  114.