@@ -55,6 +55,8 @@ namespace llvm {
55
55
#include < llvm/Bitcode/BitcodeWriterPass.h>
56
56
#endif
57
57
58
+ #include < llvm/IR/LegacyPassManagers.h>
59
+ #include < llvm/IR/IRPrintingPasses.h>
58
60
#include < llvm/Transforms/Utils/Cloning.h>
59
61
#include < llvm/ExecutionEngine/JITEventListener.h>
60
62
@@ -109,7 +111,7 @@ void jl_init_jit(Type *T_pjlvalue_)
109
111
110
112
// this defines the set of optimization passes defined for Julia at various optimization levels
111
113
#if JL_LLVM_VERSION >= 30700
112
- void addOptimizationPasses (legacy::PassManager *PM, int opt_level)
114
+ void addOptimizationPasses (legacy::PassManagerBase *PM, int opt_level)
113
115
#else
114
116
void addOptimizationPasses (PassManager *PM, int opt_level)
115
117
#endif
@@ -1432,20 +1434,24 @@ GlobalVariable *jl_get_global_for(const char *cname, void *addr, Module *M)
1432
1434
// An LLVM module pass that just runs all julia passes in order. Useful for
1433
1435
// debugging
1434
1436
extern " C" void jl_init_codegen (void );
1435
- class JuliaPipeline : public ModulePass {
1437
+ class JuliaPipeline : public Pass {
1436
1438
public:
1437
1439
static char ID;
1438
- JuliaPipeline () : ModulePass(ID) {}
1439
- virtual bool runOnModule (Module &M) {
1440
+ // A bit of a hack, but works
1441
+ struct TPMAdapter : public PassManagerBase {
1442
+ PMTopLevelManager *TPM;
1443
+ TPMAdapter (PMTopLevelManager *TPM) : TPM(TPM) {}
1444
+ void add (Pass *P) { TPM->schedulePass (P); }
1445
+ };
1446
+ void preparePassManager (PMStack &Stack) override {
1440
1447
(void )jl_init_llvm ();
1441
- #if JL_LLVM_VERSION >= 30700
1442
- legacy::PassManager PM;
1443
- #else
1444
- PassManager PM;
1445
- #endif
1446
- addOptimizationPasses (&PM, 3 );
1447
- PM.run (M);
1448
- return true ;
1448
+ PMTopLevelManager *TPM = Stack.top ()->getTopLevelManager ();
1449
+ TPMAdapter Adapter (TPM);
1450
+ addOptimizationPasses (&Adapter, 3 );
1451
+ }
1452
+ JuliaPipeline () : Pass(PT_PassManager, ID) {}
1453
+ Pass *createPrinterPass (raw_ostream &O, const std::string &Banner) const {
1454
+ return createPrintModulePass (O, Banner);
1449
1455
}
1450
1456
};
1451
1457
char JuliaPipeline::ID = 0 ;
0 commit comments