Skip to content

Commit 86ab0ce

Browse files
committed
add PassManagerBuilder.addExtension
1 parent 73eed38 commit 86ab0ce

File tree

2 files changed

+32
-1
lines changed

2 files changed

+32
-1
lines changed

deps/LLVMExtra/include/LLVMExtra.h

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -165,5 +165,27 @@ LLVMValueRef LLVMBuildCallWithOpBundle(LLVMBuilderRef B, LLVMValueRef Fn,
165165
const char *Name);
166166
void LLVMAdjustPassManager(LLVMTargetMachineRef TM, LLVMPassManagerBuilderRef PMB);
167167

168+
typedef void (*LLVMPassManagerBuilderExtensionFunction)(
169+
void *Ctx, LLVMPassManagerBuilderRef PMB, LLVMPassManagerRef PM);
170+
171+
typedef enum {
172+
EP_EarlyAsPossible,
173+
EP_ModuleOptimizerEarly,
174+
EP_LoopOptimizerEnd,
175+
EP_ScalarOptimizerLate,
176+
EP_OptimizerLast,
177+
EP_VectorizerStart,
178+
EP_EnabledOnOptLevel0,
179+
EP_Peephole,
180+
EP_LateLoopOptimizations,
181+
EP_CGSCCOptimizerLate,
182+
EP_FullLinkTimeOptimizationEarly,
183+
EP_FullLinkTimeOptimizationLast,
184+
} LLVMPassManagerBuilderExtensionPointTy;
185+
186+
void LLVMPassManagerBuilderAddExtension(LLVMPassManagerBuilderRef PMB,
187+
LLVMPassManagerBuilderExtensionPointTy Ty,
188+
LLVMPassManagerBuilderExtensionFunction Fn, void *Ctx);
189+
168190
LLVM_C_EXTERN_C_END
169191
#endif

deps/LLVMExtra/lib/llvm-api.cpp

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
#include <llvm/Transforms/Utils/Cloning.h>
2323
#include <llvm/Transforms/Utils/ModuleUtils.h>
2424
#include <llvm/Target/TargetMachine.h>
25+
#include <llvm/Transforms/IPO/PassManagerBuilder.h>
2526

2627
using namespace llvm;
2728
using namespace llvm::legacy;
@@ -551,7 +552,15 @@ LLVMValueRef LLVMBuildCallWithOpBundle(LLVMBuilderRef B, LLVMValueRef Fn,
551552
}
552553

553554
DEFINE_SIMPLE_CONVERSION_FUNCTIONS(TargetMachine, LLVMTargetMachineRef)
554-
DEFINE_SIMPLE_CONVERSION_FUNCTIONS(PassManagerBuilder, LLVMPassManagerBuilderRef)
555555
void LLVMAdjustPassManager(LLVMTargetMachineRef TM, LLVMPassManagerBuilderRef PMB) {
556556
unwrap(TM)->adjustPassManager(*unwrap(PMB));
557557
}
558+
559+
void LLVMPassManagerBuilderAddExtension(LLVMPassManagerBuilderRef PMB,
560+
LLVMPassManagerBuilderExtensionPointTy Ty,
561+
LLVMPassManagerBuilderExtensionFunction Fn, void *Ctx) {
562+
PassManagerBuilder &Builder = *unwrap(PMB);
563+
Builder.addExtension((PassManagerBuilder::ExtensionPointTy)Ty,
564+
[&](const PassManagerBuilder &Builder, legacy::PassManagerBase &PM) {
565+
Fn(Ctx, wrap(const_cast<PassManagerBuilder*>(&Builder)), wrap(&PM)); });
566+
}

0 commit comments

Comments
 (0)