|
14 | 14 |
|
15 | 15 | #include <llvm/ADT/Triple.h>
|
16 | 16 | #include <llvm/Analysis/TargetLibraryInfo.h>
|
| 17 | +#include <llvm/Analysis/TargetTransformInfo.h> |
17 | 18 | #include <llvm/IR/Attributes.h>
|
18 | 19 | #include <llvm/IR/CallSite.h>
|
19 | 20 | #include <llvm/IR/DebugInfo.h>
|
|
24 | 25 | #include <llvm/IR/Module.h>
|
25 | 26 | #include <llvm/Support/TargetSelect.h>
|
26 | 27 | #include <llvm/Transforms/IPO.h>
|
| 28 | +#include <llvm/Transforms/Utils/ModuleUtils.h> |
27 | 29 |
|
28 | 30 | #include "julia.h"
|
29 | 31 |
|
@@ -208,6 +210,28 @@ extern "C" JL_DLLEXPORT void LLVMExtraAddInternalizePassWithExportList(
|
208 | 210 | unwrap(PM)->add(createInternalizePass(PreserveFobj));
|
209 | 211 | }
|
210 | 212 |
|
| 213 | +extern "C" JL_DLLEXPORT void LLVMExtraAppendToUsed(LLVMModuleRef Mod, |
| 214 | + LLVMValueRef* Values, |
| 215 | + size_t Count) { |
| 216 | + SmallVector<GlobalValue *, 1> GlobalValues; |
| 217 | + for (auto *Value : makeArrayRef(Values, Count)) |
| 218 | + GlobalValues.push_back(cast<GlobalValue>(unwrap(Value))); |
| 219 | + appendToUsed(*unwrap(Mod), GlobalValues); |
| 220 | +} |
| 221 | + |
| 222 | +extern "C" JL_DLLEXPORT void LLVMExtraAppendToCompilerUsed(LLVMModuleRef Mod, |
| 223 | + LLVMValueRef* Values, |
| 224 | + size_t Count) { |
| 225 | + SmallVector<GlobalValue *, 1> GlobalValues; |
| 226 | + for (auto *Value : makeArrayRef(Values, Count)) |
| 227 | + GlobalValues.push_back(cast<GlobalValue>(unwrap(Value))); |
| 228 | + appendToCompilerUsed(*unwrap(Mod), GlobalValues); |
| 229 | +} |
| 230 | + |
| 231 | +extern "C" JL_DLLEXPORT void LLVMExtraAddGenericAnalysisPasses(LLVMPassManagerRef PM) { |
| 232 | + unwrap(PM)->add(createTargetTransformInfoWrapperPass(TargetIRAnalysis())); |
| 233 | +} |
| 234 | + |
211 | 235 |
|
212 | 236 | // Awaiting D46627
|
213 | 237 |
|
|
0 commit comments