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