Use the new C API for PassManagerBuilder.

This commit is contained in:
Rafael Ávila de Espíndola 2011-08-11 19:09:52 -04:00
parent 4cee063976
commit 6402b63b4f
6 changed files with 59 additions and 67 deletions

View File

@ -2,7 +2,7 @@
# rustc LLVM-extensions (C++) library variables and rules
######################################################################
RUSTLLVM_OBJS_CS := $(addprefix rustllvm/, Passes.cpp RustWrapper.cpp)
RUSTLLVM_OBJS_CS := $(addprefix rustllvm/, RustWrapper.cpp)
RUSTLLVM_DEF := rustllvm/rustllvm$(CFG_DEF_SUFFIX)

View File

@ -117,19 +117,34 @@ mod write {
if opts.optimize != 0u {
let fpm = mk_pass_manager();
llvm::LLVMAddTargetData(td.lltd, fpm.llpm);
llvm::LLVMAddStandardFunctionPasses(fpm.llpm, 2u);
let FPMB = llvm::LLVMPassManagerBuilderCreate();
llvm::LLVMPassManagerBuilderSetOptLevel(FPMB, 2u);
llvm::LLVMPassManagerBuilderPopulateFunctionPassManager(FPMB,
fpm.llpm);
llvm::LLVMPassManagerBuilderDispose(FPMB);
llvm::LLVMRunPassManager(fpm.llpm, llmod);
let threshold: uint = 225u;
if opts.optimize == 3u { threshold = 275u; }
llvm::LLVMAddStandardModulePasses(pm.llpm,
// optimization level
opts.optimize,
False, // optimize for size
True, // unit-at-a-time
True, // unroll loops
True, // simplify lib calls
threshold); // inline threshold
let MPMB = llvm::LLVMPassManagerBuilderCreate();
llvm::LLVMPassManagerBuilderSetOptLevel(MPMB, opts.optimize);
llvm::LLVMPassManagerBuilderSetSizeLevel(MPMB, 0);
llvm::LLVMPassManagerBuilderSetDisableUnitAtATime(MPMB, False);
llvm::LLVMPassManagerBuilderSetDisableUnrollLoops(MPMB, False);
llvm::LLVMPassManagerBuilderSetDisableSimplifyLibCalls(MPMB,
False);
if threshold != 0u {
llvm::LLVMPassManagerBuilderUseInlinerWithThreshold(MPMB,
threshold);
}
llvm::LLVMPassManagerBuilderPopulateModulePassManager(MPMB,
pm.llpm);
llvm::LLVMPassManagerBuilderDispose(MPMB);
}
if opts.verify { llvm::LLVMAddVerifierPass(pm.llpm); }
if is_object_or_assembly_or_exe(opts.output_type) {

View File

@ -141,6 +141,7 @@ native "cdecl" mod llvm = "rustllvm" {
type ModuleProviderRef;
type MemoryBufferRef;
type PassManagerRef;
type PassManagerBuilderRef;
type UseRef;
type TargetDataRef;
@ -798,13 +799,29 @@ native "cdecl" mod llvm = "rustllvm" {
fn LLVMAddTypeBasedAliasAnalysisPass(PM: PassManagerRef);
fn LLVMAddBasicAliasAnalysisPass(PM: PassManagerRef);
fn LLVMAddStandardFunctionPasses(PM: PassManagerRef,
OptimizationLevel: uint);
fn LLVMAddStandardModulePasses(PM: PassManagerRef,
OptimizationLevel: uint,
OptimizeSize: Bool, UnitAtATime: Bool,
UnrollLoops: Bool, SimplifyLibCalls: Bool,
InliningThreshold: uint);
fn LLVMPassManagerBuilderCreate() -> PassManagerBuilderRef;
fn LLVMPassManagerBuilderDispose(PMB: PassManagerBuilderRef);
fn LLVMPassManagerBuilderSetOptLevel(PMB: PassManagerBuilderRef,
OptimizationLevel: uint);
fn LLVMPassManagerBuilderSetSizeLevel(PMB: PassManagerBuilderRef,
Value: Bool);
fn LLVMPassManagerBuilderSetDisableUnitAtATime(PMB: PassManagerBuilderRef,
Value: Bool);
fn LLVMPassManagerBuilderSetDisableUnrollLoops(PMB: PassManagerBuilderRef,
Value: Bool);
fn LLVMPassManagerBuilderSetDisableSimplifyLibCalls(PMB:
PassManagerBuilderRef,
Value: Bool);
fn LLVMPassManagerBuilderUseInlinerWithThreshold(PMB:
PassManagerBuilderRef,
threshold: uint);
fn LLVMPassManagerBuilderPopulateModulePassManager(PMB:
PassManagerBuilderRef,
PM: PassManagerRef);
fn LLVMPassManagerBuilderPopulateFunctionPassManager(PMB:
PassManagerBuilderRef,
PM: PassManagerRef);
/** Destroys a memory buffer. */
fn LLVMDisposeMemoryBuffer(MemBuf: MemoryBufferRef);

View File

@ -1,37 +0,0 @@
#include "llvm/Analysis/Passes.h"
#include "llvm/Transforms/IPO/PassManagerBuilder.h"
#include "llvm/Transforms/IPO.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);
}

View File

@ -45,14 +45,6 @@ extern "C" const char *LLVMRustGetLastError(void) {
}
extern "C" void LLVMAddBasicAliasAnalysisPass(LLVMPassManagerRef PM);
extern "C" void LLVMAddStandardModulePasses(LLVMPassManagerRef PM,
unsigned int OptimizationLevel, bool OptimizeSize, bool UnitAtATime,
bool UnrollLoops, bool SimplifyLibCalls,
unsigned int InliningThreshold);
int *RustHackToFetchPassesO = (int*)LLVMAddBasicAliasAnalysisPass;
int *RustHackToFetchPasses2O = (int*)LLVMAddStandardModulePasses;
extern "C" bool LLVMLinkModules(LLVMModuleRef Dest, LLVMModuleRef Src) {
static std::string err;

View File

@ -57,21 +57,17 @@ LLVMAddLoopIdiomPass
LLVMAddLoopRotatePass
LLVMAddLoopUnrollPass
LLVMAddLoopUnswitchPass
LLVMAddLowerSetJmpPass
LLVMAddMemCpyOptPass
LLVMAddModule
LLVMAddModuleProvider
LLVMAddPromoteMemoryToRegisterPass
LLVMAddPruneEHPass
LLVMAddRaiseAllocationsPass
LLVMAddReassociatePass
LLVMAddSCCPPass
LLVMAddScalarReplAggregatesPass
LLVMAddScalarReplAggregatesPassSSA
LLVMAddScalarReplAggregatesPassWithThreshold
LLVMAddSimplifyLibCallsPass
LLVMAddStandardFunctionPasses
LLVMAddStandardModulePasses
LLVMAddStripDeadPrototypesPass
LLVMAddStripSymbolsPass
LLVMAddTailCallEliminationPass
@ -489,7 +485,6 @@ LLVMIsAUIToFPInst
LLVMIsAUnaryInstruction
LLVMIsAUndefValue
LLVMIsAUnreachableInst
LLVMIsAUnwindInst
LLVMIsAUser
LLVMIsAVAArgInst
LLVMIsAZExtInst
@ -522,6 +517,16 @@ LLVMPPCFP128Type
LLVMPPCFP128TypeInContext
LLVMParseBitcode
LLVMParseBitcodeInContext
LLVMPassManagerBuilderCreate
LLVMPassManagerBuilderDispose
LLVMPassManagerBuilderPopulateModulePassManager
LLVMPassManagerBuilderSetDisableSimplifyLibCalls
LLVMPassManagerBuilderSetDisableUnitAtATime
LLVMPassManagerBuilderPopulateFunctionPassManager
LLVMPassManagerBuilderSetDisableUnrollLoops
LLVMPassManagerBuilderSetOptLevel
LLVMPassManagerBuilderSetSizeLevel
LLVMPassManagerBuilderUseInlinerWithThreshold
LLVMPointerSize
LLVMPointerType
LLVMPositionBuilder