aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--mk/rustllvm.mk2
-rw-r--r--src/comp/lib/llvm.rs10
-rw-r--r--src/rustllvm/Passes2.cpp24
-rw-r--r--src/rustllvm/rustllvm.def.in1
4 files changed, 36 insertions, 1 deletions
diff --git a/mk/rustllvm.mk b/mk/rustllvm.mk
index 5940bf5e..df728ffd 100644
--- a/mk/rustllvm.mk
+++ b/mk/rustllvm.mk
@@ -3,7 +3,7 @@
######################################################################
RUSTLLVM_LIB_CS := $(addprefix rustllvm/, \
- MachOObjectFile.cpp Passes.cpp)
+ MachOObjectFile.cpp Passes.cpp Passes2.cpp)
RUSTLLVM_OBJS_CS := $(addprefix rustllvm/, RustWrapper.cpp)
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