diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/comp/lib/llvm.rs | 10 | ||||
| -rw-r--r-- | src/rustllvm/Passes2.cpp | 24 | ||||
| -rw-r--r-- | src/rustllvm/rustllvm.def.in | 1 |
3 files changed, 35 insertions, 0 deletions
diff --git a/src/comp/lib/llvm.rs b/src/comp/lib/llvm.rs index f825e05d..1d2529cc 100644 --- a/src/comp/lib/llvm.rs +++ b/src/comp/lib/llvm.rs @@ -802,6 +802,16 @@ native mod llvm = llvm_lib { fn LLVMAddTypeBasedAliasAnalysisPass(PassManagerRef PM); fn LLVMAddBasicAliasAnalysisPass(PassManagerRef PM); + // FIXME: Native stubs don't allow this many arguments yet. + /*fn LLVMAddStandardModulePasses(PassManagerRef PM, + uint OptimizationLevel, + Bool OptimizeSize, + Bool UnitAtATime, + Bool UnrollLoops, + Bool SimplifyLibCalls, + Bool HaveExceptions, + uint InliningThreshold);*/ + /** Destroys a memory buffer. */ fn LLVMDisposeMemoryBuffer(MemoryBufferRef MemBuf); diff --git a/src/rustllvm/Passes2.cpp b/src/rustllvm/Passes2.cpp new file mode 100644 index 00000000..a0a6a20c --- /dev/null +++ b/src/rustllvm/Passes2.cpp @@ -0,0 +1,24 @@ +#include "llvm/Analysis/Passes.h" +#include "llvm/Support/StandardPasses.h" +#include "llvm/PassManager.h" +#include "llvm-c/Core.h" +#include <cstdlib> + +using namespace llvm; + +extern "C" void LLVMAddStandardModulePasses(LLVMPassManagerRef PM, + unsigned int OptimizationLevel, bool OptimizeSize, bool UnitAtATime, + bool UnrollLoops, bool SimplifyLibCalls, bool HaveExceptions, + unsigned int InliningThreshold) { + Pass *InliningPass; + if (InliningThreshold) + InliningPass = createFunctionInliningPass(InliningThreshold); + else + InliningPass = NULL; + + createStandardModulePasses(unwrap(PM), OptimizationLevel, OptimizeSize, + UnitAtATime, UnrollLoops, SimplifyLibCalls, + HaveExceptions, InliningPass); +} + + diff --git a/src/rustllvm/rustllvm.def.in b/src/rustllvm/rustllvm.def.in index 748c77aa..e52f2908 100644 --- a/src/rustllvm/rustllvm.def.in +++ b/src/rustllvm/rustllvm.def.in @@ -68,6 +68,7 @@ LLVMAddScalarReplAggregatesPass LLVMAddScalarReplAggregatesPassSSA LLVMAddScalarReplAggregatesPassWithThreshold LLVMAddSimplifyLibCallsPass +LLVMAddStandardModulePasses LLVMAddStripDeadPrototypesPass LLVMAddStripSymbolsPass LLVMAddTailCallEliminationPass |