|
27 | 27 | #include <llvm/IR/Module.h>
|
28 | 28 | #include <llvm/Support/TargetSelect.h>
|
29 | 29 | #include <llvm/Transforms/IPO.h>
|
| 30 | +#include <llvm/Transforms/Scalar.h> |
| 31 | +#include <llvm/Transforms/Vectorize.h> |
| 32 | +#if JL_LLVM_VERSION < 120000 |
| 33 | +#include <llvm/Transforms/Scalar/InstSimplifyPass.h> |
| 34 | +#endif |
30 | 35 | #include <llvm/Transforms/Utils/ModuleUtils.h>
|
31 | 36 |
|
32 | 37 | #include "julia.h"
|
@@ -90,13 +95,43 @@ extern "C" JL_DLLEXPORT LLVMBool LLVMExtraInitializeNativeDisassembler()
|
90 | 95 | return InitializeNativeTargetDisassembler();
|
91 | 96 | }
|
92 | 97 |
|
93 |
| -// Exporting the Barrier LLVM pass |
| 98 | +// Various missing passes (being upstreamed) |
94 | 99 |
|
95 | 100 | extern "C" JL_DLLEXPORT void LLVMExtraAddBarrierNoopPass(LLVMPassManagerRef PM)
|
96 | 101 | {
|
97 | 102 | unwrap(PM)->add(createBarrierNoopPass());
|
98 | 103 | }
|
99 | 104 |
|
| 105 | +extern "C" JL_DLLEXPORT void LLVMExtraAddDivRemPairsPass(LLVMPassManagerRef PM) { |
| 106 | + unwrap(PM)->add(createDivRemPairsPass()); |
| 107 | +} |
| 108 | + |
| 109 | +extern "C" JL_DLLEXPORT void LLVMExtraAddLoopDistributePass(LLVMPassManagerRef PM) { |
| 110 | + unwrap(PM)->add(createLoopDistributePass()); |
| 111 | +} |
| 112 | + |
| 113 | +extern "C" JL_DLLEXPORT void LLVMExtraAddLoopFusePass(LLVMPassManagerRef PM) { |
| 114 | + unwrap(PM)->add(createLoopFusePass()); |
| 115 | +} |
| 116 | + |
| 117 | +extern "C" JL_DLLEXPORT void LLVMExtraLoopLoadEliminationPass(LLVMPassManagerRef PM) { |
| 118 | + unwrap(PM)->add(createLoopLoadEliminationPass()); |
| 119 | +} |
| 120 | + |
| 121 | +extern "C" JL_DLLEXPORT void LLVMExtraAddLoadStoreVectorizerPass(LLVMPassManagerRef PM) { |
| 122 | + unwrap(PM)->add(createLoadStoreVectorizerPass()); |
| 123 | +} |
| 124 | + |
| 125 | +extern "C" JL_DLLEXPORT void LLVMExtraAddVectorCombinePass(LLVMPassManagerRef PM) { |
| 126 | + unwrap(PM)->add(createVectorCombinePass()); |
| 127 | +} |
| 128 | + |
| 129 | +// Can be removed in LLVM 12 |
| 130 | +extern "C" JL_DLLEXPORT void LLVMExtraAddInstructionSimplifyPass(LLVMPassManagerRef PM) { |
| 131 | + unwrap(PM)->add(createInstSimplifyLegacyPass()); |
| 132 | +} |
| 133 | + |
| 134 | + |
100 | 135 | // Infrastructure for writing LLVM passes in Julia
|
101 | 136 |
|
102 | 137 | typedef struct LLVMOpaquePass *LLVMPassRef;
|
|
0 commit comments