Skip to content

Commit 6402b63

Browse files
committed
Use the new C API for PassManagerBuilder.
1 parent 4cee063 commit 6402b63

File tree

6 files changed

+59
-67
lines changed

6 files changed

+59
-67
lines changed

mk/rustllvm.mk

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
# rustc LLVM-extensions (C++) library variables and rules
33
######################################################################
44

5-
RUSTLLVM_OBJS_CS := $(addprefix rustllvm/, Passes.cpp RustWrapper.cpp)
5+
RUSTLLVM_OBJS_CS := $(addprefix rustllvm/, RustWrapper.cpp)
66

77
RUSTLLVM_DEF := rustllvm/rustllvm$(CFG_DEF_SUFFIX)
88

src/comp/back/link.rs

+24-9
Original file line numberDiff line numberDiff line change
@@ -117,19 +117,34 @@ mod write {
117117
if opts.optimize != 0u {
118118
let fpm = mk_pass_manager();
119119
llvm::LLVMAddTargetData(td.lltd, fpm.llpm);
120-
llvm::LLVMAddStandardFunctionPasses(fpm.llpm, 2u);
120+
121+
let FPMB = llvm::LLVMPassManagerBuilderCreate();
122+
llvm::LLVMPassManagerBuilderSetOptLevel(FPMB, 2u);
123+
llvm::LLVMPassManagerBuilderPopulateFunctionPassManager(FPMB,
124+
fpm.llpm);
125+
llvm::LLVMPassManagerBuilderDispose(FPMB);
126+
121127
llvm::LLVMRunPassManager(fpm.llpm, llmod);
122128
let threshold: uint = 225u;
123129
if opts.optimize == 3u { threshold = 275u; }
124-
llvm::LLVMAddStandardModulePasses(pm.llpm,
125-
// optimization level
126-
opts.optimize,
127-
False, // optimize for size
128-
True, // unit-at-a-time
129-
True, // unroll loops
130-
True, // simplify lib calls
131-
threshold); // inline threshold
132130

131+
let MPMB = llvm::LLVMPassManagerBuilderCreate();
132+
llvm::LLVMPassManagerBuilderSetOptLevel(MPMB, opts.optimize);
133+
llvm::LLVMPassManagerBuilderSetSizeLevel(MPMB, 0);
134+
llvm::LLVMPassManagerBuilderSetDisableUnitAtATime(MPMB, False);
135+
llvm::LLVMPassManagerBuilderSetDisableUnrollLoops(MPMB, False);
136+
llvm::LLVMPassManagerBuilderSetDisableSimplifyLibCalls(MPMB,
137+
False);
138+
139+
if threshold != 0u {
140+
llvm::LLVMPassManagerBuilderUseInlinerWithThreshold(MPMB,
141+
threshold);
142+
}
143+
144+
llvm::LLVMPassManagerBuilderPopulateModulePassManager(MPMB,
145+
pm.llpm);
146+
147+
llvm::LLVMPassManagerBuilderDispose(MPMB);
133148
}
134149
if opts.verify { llvm::LLVMAddVerifierPass(pm.llpm); }
135150
if is_object_or_assembly_or_exe(opts.output_type) {

src/comp/lib/llvm.rs

+24-7
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,7 @@ native "cdecl" mod llvm = "rustllvm" {
141141
type ModuleProviderRef;
142142
type MemoryBufferRef;
143143
type PassManagerRef;
144+
type PassManagerBuilderRef;
144145
type UseRef;
145146
type TargetDataRef;
146147

@@ -798,13 +799,29 @@ native "cdecl" mod llvm = "rustllvm" {
798799
fn LLVMAddTypeBasedAliasAnalysisPass(PM: PassManagerRef);
799800
fn LLVMAddBasicAliasAnalysisPass(PM: PassManagerRef);
800801

801-
fn LLVMAddStandardFunctionPasses(PM: PassManagerRef,
802-
OptimizationLevel: uint);
803-
fn LLVMAddStandardModulePasses(PM: PassManagerRef,
804-
OptimizationLevel: uint,
805-
OptimizeSize: Bool, UnitAtATime: Bool,
806-
UnrollLoops: Bool, SimplifyLibCalls: Bool,
807-
InliningThreshold: uint);
802+
fn LLVMPassManagerBuilderCreate() -> PassManagerBuilderRef;
803+
fn LLVMPassManagerBuilderDispose(PMB: PassManagerBuilderRef);
804+
fn LLVMPassManagerBuilderSetOptLevel(PMB: PassManagerBuilderRef,
805+
OptimizationLevel: uint);
806+
fn LLVMPassManagerBuilderSetSizeLevel(PMB: PassManagerBuilderRef,
807+
Value: Bool);
808+
fn LLVMPassManagerBuilderSetDisableUnitAtATime(PMB: PassManagerBuilderRef,
809+
Value: Bool);
810+
fn LLVMPassManagerBuilderSetDisableUnrollLoops(PMB: PassManagerBuilderRef,
811+
Value: Bool);
812+
fn LLVMPassManagerBuilderSetDisableSimplifyLibCalls(PMB:
813+
PassManagerBuilderRef,
814+
Value: Bool);
815+
fn LLVMPassManagerBuilderUseInlinerWithThreshold(PMB:
816+
PassManagerBuilderRef,
817+
threshold: uint);
818+
fn LLVMPassManagerBuilderPopulateModulePassManager(PMB:
819+
PassManagerBuilderRef,
820+
PM: PassManagerRef);
821+
822+
fn LLVMPassManagerBuilderPopulateFunctionPassManager(PMB:
823+
PassManagerBuilderRef,
824+
PM: PassManagerRef);
808825

809826
/** Destroys a memory buffer. */
810827
fn LLVMDisposeMemoryBuffer(MemBuf: MemoryBufferRef);

src/rustllvm/Passes.cpp

-37
This file was deleted.

src/rustllvm/RustWrapper.cpp

-8
Original file line numberDiff line numberDiff line change
@@ -45,14 +45,6 @@ extern "C" const char *LLVMRustGetLastError(void) {
4545
}
4646

4747
extern "C" void LLVMAddBasicAliasAnalysisPass(LLVMPassManagerRef PM);
48-
extern "C" void LLVMAddStandardModulePasses(LLVMPassManagerRef PM,
49-
unsigned int OptimizationLevel, bool OptimizeSize, bool UnitAtATime,
50-
bool UnrollLoops, bool SimplifyLibCalls,
51-
unsigned int InliningThreshold);
52-
53-
int *RustHackToFetchPassesO = (int*)LLVMAddBasicAliasAnalysisPass;
54-
int *RustHackToFetchPasses2O = (int*)LLVMAddStandardModulePasses;
55-
5648

5749
extern "C" bool LLVMLinkModules(LLVMModuleRef Dest, LLVMModuleRef Src) {
5850
static std::string err;

src/rustllvm/rustllvm.def.in

+10-5
Original file line numberDiff line numberDiff line change
@@ -57,21 +57,17 @@ LLVMAddLoopIdiomPass
5757
LLVMAddLoopRotatePass
5858
LLVMAddLoopUnrollPass
5959
LLVMAddLoopUnswitchPass
60-
LLVMAddLowerSetJmpPass
6160
LLVMAddMemCpyOptPass
6261
LLVMAddModule
6362
LLVMAddModuleProvider
6463
LLVMAddPromoteMemoryToRegisterPass
6564
LLVMAddPruneEHPass
66-
LLVMAddRaiseAllocationsPass
6765
LLVMAddReassociatePass
6866
LLVMAddSCCPPass
6967
LLVMAddScalarReplAggregatesPass
7068
LLVMAddScalarReplAggregatesPassSSA
7169
LLVMAddScalarReplAggregatesPassWithThreshold
7270
LLVMAddSimplifyLibCallsPass
73-
LLVMAddStandardFunctionPasses
74-
LLVMAddStandardModulePasses
7571
LLVMAddStripDeadPrototypesPass
7672
LLVMAddStripSymbolsPass
7773
LLVMAddTailCallEliminationPass
@@ -489,7 +485,6 @@ LLVMIsAUIToFPInst
489485
LLVMIsAUnaryInstruction
490486
LLVMIsAUndefValue
491487
LLVMIsAUnreachableInst
492-
LLVMIsAUnwindInst
493488
LLVMIsAUser
494489
LLVMIsAVAArgInst
495490
LLVMIsAZExtInst
@@ -522,6 +517,16 @@ LLVMPPCFP128Type
522517
LLVMPPCFP128TypeInContext
523518
LLVMParseBitcode
524519
LLVMParseBitcodeInContext
520+
LLVMPassManagerBuilderCreate
521+
LLVMPassManagerBuilderDispose
522+
LLVMPassManagerBuilderPopulateModulePassManager
523+
LLVMPassManagerBuilderSetDisableSimplifyLibCalls
524+
LLVMPassManagerBuilderSetDisableUnitAtATime
525+
LLVMPassManagerBuilderPopulateFunctionPassManager
526+
LLVMPassManagerBuilderSetDisableUnrollLoops
527+
LLVMPassManagerBuilderSetOptLevel
528+
LLVMPassManagerBuilderSetSizeLevel
529+
LLVMPassManagerBuilderUseInlinerWithThreshold
525530
LLVMPointerSize
526531
LLVMPointerType
527532
LLVMPositionBuilder

0 commit comments

Comments
 (0)