summary refs log tree commit diff
path: root/src/rustllvm/Passes.cpp
diff options
context:
space:
mode:
authorBrian Anderson <banderson@mozilla.com>2011-07-17 19:16:23 -0700
committerBrian Anderson <banderson@mozilla.com>2011-07-17 19:16:23 -0700
commit09ca57adb0290b015ea54dd44f20c781b98297b9 (patch)
tree646099015df41245234fece8ab18709eeac35354 /src/rustllvm/Passes.cpp
parent20a3adbc08f0349226f2247a3e3a44a937685864 (diff)
downloadrust-09ca57adb0290b015ea54dd44f20c781b98297b9.tar.gz
rust-09ca57adb0290b015ea54dd44f20c781b98297b9.zip
Revert "Revert "Rename Passes2.cpp to Passes.cpp""
This reverts commit 52507f406ee0dab26681227266ddce7c8ae6d37f.
Diffstat (limited to 'src/rustllvm/Passes.cpp')
-rw-r--r--src/rustllvm/Passes.cpp36
1 files changed, 36 insertions, 0 deletions
diff --git a/src/rustllvm/Passes.cpp b/src/rustllvm/Passes.cpp
new file mode 100644
index 00000000000..dcc549b511f
--- /dev/null
+++ b/src/rustllvm/Passes.cpp
@@ -0,0 +1,36 @@
+#include "llvm/Analysis/Passes.h"
+#include "llvm/Support/PassManagerBuilder.h"
+#include "llvm/PassManager.h"
+#include "llvm-c/Core.h"
+#include <cstdlib>
+
+using namespace llvm;
+
+extern "C" void LLVMAddStandardFunctionPasses(LLVMPassManagerRef PM,
+    unsigned int OptimizationLevel) {
+  PassManagerBuilder PMBuilder;
+  PMBuilder.OptLevel = OptimizationLevel;
+  FunctionPassManager *FPM = (FunctionPassManager*) unwrap(PM);
+  PMBuilder.populateFunctionPassManager(*FPM);
+}
+
+extern "C" void LLVMAddStandardModulePasses(LLVMPassManagerRef PM,
+    unsigned int OptimizationLevel, LLVMBool OptimizeSize,
+    LLVMBool UnitAtATime, LLVMBool UnrollLoops, LLVMBool SimplifyLibCalls,
+    unsigned int InliningThreshold) {
+
+  PassManagerBuilder PMBuilder;
+  PMBuilder.OptLevel = OptimizationLevel;
+  PMBuilder.SizeLevel = OptimizeSize;
+  PMBuilder.DisableUnitAtATime = !UnitAtATime;
+  PMBuilder.DisableUnrollLoops = !UnrollLoops;
+
+  PMBuilder.DisableSimplifyLibCalls = !SimplifyLibCalls;
+
+  if (InliningThreshold)
+    PMBuilder.Inliner = createFunctionInliningPass(InliningThreshold);
+
+  PassManager *MPM = (PassManager*) unwrap(PM);
+  PMBuilder.populateModulePassManager(*MPM);
+}
+