mirror of
https://github.com/rust-lang/rust.git
synced 2025-02-18 09:53:26 +00:00
Stub out more PassManagerBuilder functions
This commit is contained in:
parent
3cf0809a8d
commit
6dc0bcc5db
@ -634,8 +634,8 @@ pub(crate) unsafe fn optimize(
|
|||||||
extra_passes.as_ptr(),
|
extra_passes.as_ptr(),
|
||||||
extra_passes.len() as size_t,
|
extra_passes.len() as size_t,
|
||||||
);
|
);
|
||||||
llvm::LLVMPassManagerBuilderPopulateFunctionPassManager(b, fpm);
|
llvm::LLVMRustPassManagerBuilderPopulateFunctionPassManager(b, fpm);
|
||||||
llvm::LLVMPassManagerBuilderPopulateModulePassManager(b, mpm);
|
llvm::LLVMRustPassManagerBuilderPopulateModulePassManager(b, mpm);
|
||||||
});
|
});
|
||||||
|
|
||||||
have_name_anon_globals_pass = have_name_anon_globals_pass || prepare_for_thin_lto;
|
have_name_anon_globals_pass = have_name_anon_globals_pass || prepare_for_thin_lto;
|
||||||
@ -1091,7 +1091,7 @@ pub unsafe fn with_llvm_pmb(
|
|||||||
// Create the PassManagerBuilder for LLVM. We configure it with
|
// Create the PassManagerBuilder for LLVM. We configure it with
|
||||||
// reasonable defaults and prepare it to actually populate the pass
|
// reasonable defaults and prepare it to actually populate the pass
|
||||||
// manager.
|
// manager.
|
||||||
let builder = llvm::LLVMPassManagerBuilderCreate();
|
let builder = llvm::LLVMRustPassManagerBuilderCreate();
|
||||||
let opt_size = config.opt_size.map_or(llvm::CodeGenOptSizeNone, |x| to_llvm_opt_settings(x).1);
|
let opt_size = config.opt_size.map_or(llvm::CodeGenOptSizeNone, |x| to_llvm_opt_settings(x).1);
|
||||||
let inline_threshold = config.inline_threshold;
|
let inline_threshold = config.inline_threshold;
|
||||||
let pgo_gen_path = get_pgo_gen_path(config);
|
let pgo_gen_path = get_pgo_gen_path(config);
|
||||||
@ -1108,14 +1108,9 @@ pub unsafe fn with_llvm_pmb(
|
|||||||
pgo_gen_path.as_ref().map_or(ptr::null(), |s| s.as_ptr()),
|
pgo_gen_path.as_ref().map_or(ptr::null(), |s| s.as_ptr()),
|
||||||
pgo_use_path.as_ref().map_or(ptr::null(), |s| s.as_ptr()),
|
pgo_use_path.as_ref().map_or(ptr::null(), |s| s.as_ptr()),
|
||||||
pgo_sample_use_path.as_ref().map_or(ptr::null(), |s| s.as_ptr()),
|
pgo_sample_use_path.as_ref().map_or(ptr::null(), |s| s.as_ptr()),
|
||||||
|
opt_size as c_int,
|
||||||
);
|
);
|
||||||
|
|
||||||
llvm::LLVMPassManagerBuilderSetSizeLevel(builder, opt_size as u32);
|
|
||||||
|
|
||||||
if opt_size != llvm::CodeGenOptSizeNone {
|
|
||||||
llvm::LLVMPassManagerBuilderSetDisableUnrollLoops(builder, 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
llvm::LLVMRustAddBuilderLibraryInfo(builder, llmod, config.no_builtins);
|
llvm::LLVMRustAddBuilderLibraryInfo(builder, llmod, config.no_builtins);
|
||||||
|
|
||||||
// Here we match what clang does (kinda). For O0 we only inline
|
// Here we match what clang does (kinda). For O0 we only inline
|
||||||
@ -1124,16 +1119,16 @@ pub unsafe fn with_llvm_pmb(
|
|||||||
// thresholds copied from clang.
|
// thresholds copied from clang.
|
||||||
match (opt_level, opt_size, inline_threshold) {
|
match (opt_level, opt_size, inline_threshold) {
|
||||||
(.., Some(t)) => {
|
(.., Some(t)) => {
|
||||||
llvm::LLVMPassManagerBuilderUseInlinerWithThreshold(builder, t);
|
llvm::LLVMRustPassManagerBuilderUseInlinerWithThreshold(builder, t);
|
||||||
}
|
}
|
||||||
(llvm::CodeGenOptLevel::Aggressive, ..) => {
|
(llvm::CodeGenOptLevel::Aggressive, ..) => {
|
||||||
llvm::LLVMPassManagerBuilderUseInlinerWithThreshold(builder, 275);
|
llvm::LLVMRustPassManagerBuilderUseInlinerWithThreshold(builder, 275);
|
||||||
}
|
}
|
||||||
(_, llvm::CodeGenOptSizeDefault, _) => {
|
(_, llvm::CodeGenOptSizeDefault, _) => {
|
||||||
llvm::LLVMPassManagerBuilderUseInlinerWithThreshold(builder, 75);
|
llvm::LLVMRustPassManagerBuilderUseInlinerWithThreshold(builder, 75);
|
||||||
}
|
}
|
||||||
(_, llvm::CodeGenOptSizeAggressive, _) => {
|
(_, llvm::CodeGenOptSizeAggressive, _) => {
|
||||||
llvm::LLVMPassManagerBuilderUseInlinerWithThreshold(builder, 25);
|
llvm::LLVMRustPassManagerBuilderUseInlinerWithThreshold(builder, 25);
|
||||||
}
|
}
|
||||||
(llvm::CodeGenOptLevel::None, ..) => {
|
(llvm::CodeGenOptLevel::None, ..) => {
|
||||||
llvm::LLVMRustAddAlwaysInlinePass(builder, config.emit_lifetime_markers);
|
llvm::LLVMRustAddAlwaysInlinePass(builder, config.emit_lifetime_markers);
|
||||||
@ -1142,12 +1137,12 @@ pub unsafe fn with_llvm_pmb(
|
|||||||
llvm::LLVMRustAddAlwaysInlinePass(builder, config.emit_lifetime_markers);
|
llvm::LLVMRustAddAlwaysInlinePass(builder, config.emit_lifetime_markers);
|
||||||
}
|
}
|
||||||
(llvm::CodeGenOptLevel::Default, ..) => {
|
(llvm::CodeGenOptLevel::Default, ..) => {
|
||||||
llvm::LLVMPassManagerBuilderUseInlinerWithThreshold(builder, 225);
|
llvm::LLVMRustPassManagerBuilderUseInlinerWithThreshold(builder, 225);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
f(builder);
|
f(builder);
|
||||||
llvm::LLVMPassManagerBuilderDispose(builder);
|
llvm::LLVMRustPassManagerBuilderDispose(builder);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Create a `__imp_<symbol> = &symbol` global for every public static `symbol`.
|
// Create a `__imp_<symbol> = &symbol` global for every public static `symbol`.
|
||||||
|
@ -1825,20 +1825,18 @@ extern "C" {
|
|||||||
|
|
||||||
pub fn LLVMAddAnalysisPasses<'a>(T: &'a TargetMachine, PM: &PassManager<'a>);
|
pub fn LLVMAddAnalysisPasses<'a>(T: &'a TargetMachine, PM: &PassManager<'a>);
|
||||||
|
|
||||||
pub fn LLVMPassManagerBuilderCreate() -> &'static mut PassManagerBuilder;
|
pub fn LLVMRustPassManagerBuilderCreate() -> &'static mut PassManagerBuilder;
|
||||||
pub fn LLVMPassManagerBuilderDispose(PMB: &'static mut PassManagerBuilder);
|
pub fn LLVMRustPassManagerBuilderDispose(PMB: &'static mut PassManagerBuilder);
|
||||||
pub fn LLVMPassManagerBuilderSetSizeLevel(PMB: &PassManagerBuilder, Value: Bool);
|
pub fn LLVMRustPassManagerBuilderUseInlinerWithThreshold(
|
||||||
pub fn LLVMPassManagerBuilderSetDisableUnrollLoops(PMB: &PassManagerBuilder, Value: Bool);
|
|
||||||
pub fn LLVMPassManagerBuilderUseInlinerWithThreshold(
|
|
||||||
PMB: &PassManagerBuilder,
|
PMB: &PassManagerBuilder,
|
||||||
threshold: c_uint,
|
threshold: c_uint,
|
||||||
);
|
);
|
||||||
pub fn LLVMPassManagerBuilderPopulateModulePassManager(
|
pub fn LLVMRustPassManagerBuilderPopulateModulePassManager(
|
||||||
PMB: &PassManagerBuilder,
|
PMB: &PassManagerBuilder,
|
||||||
PM: &PassManager<'_>,
|
PM: &PassManager<'_>,
|
||||||
);
|
);
|
||||||
|
|
||||||
pub fn LLVMPassManagerBuilderPopulateFunctionPassManager(
|
pub fn LLVMRustPassManagerBuilderPopulateFunctionPassManager(
|
||||||
PMB: &PassManagerBuilder,
|
PMB: &PassManagerBuilder,
|
||||||
PM: &PassManager<'_>,
|
PM: &PassManager<'_>,
|
||||||
);
|
);
|
||||||
@ -2308,6 +2306,7 @@ extern "C" {
|
|||||||
PGOGenPath: *const c_char,
|
PGOGenPath: *const c_char,
|
||||||
PGOUsePath: *const c_char,
|
PGOUsePath: *const c_char,
|
||||||
PGOSampleUsePath: *const c_char,
|
PGOSampleUsePath: *const c_char,
|
||||||
|
SizeLevel: c_int,
|
||||||
);
|
);
|
||||||
pub fn LLVMRustAddLibraryInfo<'a>(
|
pub fn LLVMRustAddLibraryInfo<'a>(
|
||||||
PM: &PassManager<'a>,
|
PM: &PassManager<'a>,
|
||||||
|
@ -187,6 +187,41 @@ extern "C" void LLVMRustAddPass(LLVMPassManagerRef PMR, LLVMPassRef RustPass) {
|
|||||||
report_fatal_error("Legacy PM not supported with LLVM 15");
|
report_fatal_error("Legacy PM not supported with LLVM 15");
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
extern "C" LLVMPassManagerBuilderRef LLVMRustPassManagerBuilderCreate() {
|
||||||
|
#if LLVM_VERSION_LT(15, 0)
|
||||||
|
return LLVMPassManagerBuilderCreate();
|
||||||
|
#else
|
||||||
|
report_fatal_error("Legacy PM not supported with LLVM 15");
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
extern "C" void LLVMRustPassManagerBuilderDispose(LLVMPassManagerBuilderRef PMB) {
|
||||||
|
#if LLVM_VERSION_LT(15, 0)
|
||||||
|
LLVMPassManagerBuilderDispose(PMB);
|
||||||
|
#else
|
||||||
|
report_fatal_error("Legacy PM not supported with LLVM 15");
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
extern "C" void LLVMRustPassManagerBuilderPopulateFunctionPassManager(
|
||||||
|
LLVMPassManagerBuilderRef PMB, LLVMPassManagerRef PM) {
|
||||||
|
#if LLVM_VERSION_LT(15, 0)
|
||||||
|
LLVMPassManagerBuilderPopulateFunctionPassManager(PMB, PM);
|
||||||
|
#else
|
||||||
|
report_fatal_error("Legacy PM not supported with LLVM 15");
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
extern "C" void LLVMRustPassManagerBuilderPopulateModulePassManager(
|
||||||
|
LLVMPassManagerBuilderRef PMB, LLVMPassManagerRef PM) {
|
||||||
|
#if LLVM_VERSION_LT(15, 0)
|
||||||
|
LLVMPassManagerBuilderPopulateModulePassManager(PMB, PM);
|
||||||
|
#else
|
||||||
|
report_fatal_error("Legacy PM not supported with LLVM 15");
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
extern "C" void LLVMRustPassManagerBuilderPopulateLTOPassManager(
|
extern "C" void LLVMRustPassManagerBuilderPopulateLTOPassManager(
|
||||||
LLVMPassManagerBuilderRef PMB, LLVMPassManagerRef PM, bool Internalize, bool RunInliner) {
|
LLVMPassManagerBuilderRef PMB, LLVMPassManagerRef PM, bool Internalize, bool RunInliner) {
|
||||||
#if LLVM_VERSION_LT(15, 0)
|
#if LLVM_VERSION_LT(15, 0)
|
||||||
@ -208,6 +243,15 @@ void LLVMRustPassManagerBuilderPopulateThinLTOPassManager(
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
extern "C" void LLVMRustPassManagerBuilderUseInlinerWithThreshold(
|
||||||
|
LLVMPassManagerBuilderRef PMB, unsigned Threshold) {
|
||||||
|
#if LLVM_VERSION_LT(15, 0)
|
||||||
|
LLVMPassManagerBuilderUseInlinerWithThreshold(PMB, Threshold);
|
||||||
|
#else
|
||||||
|
report_fatal_error("Legacy PM not supported with LLVM 15");
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
extern "C"
|
extern "C"
|
||||||
void LLVMRustAddLastExtensionPasses(
|
void LLVMRustAddLastExtensionPasses(
|
||||||
LLVMPassManagerBuilderRef PMBR, LLVMPassRef *Passes, size_t NumPasses) {
|
LLVMPassManagerBuilderRef PMBR, LLVMPassRef *Passes, size_t NumPasses) {
|
||||||
@ -577,12 +621,16 @@ extern "C" void LLVMRustDisposeTargetMachine(LLVMTargetMachineRef TM) {
|
|||||||
extern "C" void LLVMRustConfigurePassManagerBuilder(
|
extern "C" void LLVMRustConfigurePassManagerBuilder(
|
||||||
LLVMPassManagerBuilderRef PMBR, LLVMRustCodeGenOptLevel OptLevel,
|
LLVMPassManagerBuilderRef PMBR, LLVMRustCodeGenOptLevel OptLevel,
|
||||||
bool MergeFunctions, bool SLPVectorize, bool LoopVectorize, bool PrepareForThinLTO,
|
bool MergeFunctions, bool SLPVectorize, bool LoopVectorize, bool PrepareForThinLTO,
|
||||||
const char* PGOGenPath, const char* PGOUsePath, const char* PGOSampleUsePath) {
|
const char* PGOGenPath, const char* PGOUsePath, const char* PGOSampleUsePath,
|
||||||
|
int SizeLevel) {
|
||||||
|
#if LLVM_VERSION_LT(15, 0)
|
||||||
unwrap(PMBR)->MergeFunctions = MergeFunctions;
|
unwrap(PMBR)->MergeFunctions = MergeFunctions;
|
||||||
unwrap(PMBR)->SLPVectorize = SLPVectorize;
|
unwrap(PMBR)->SLPVectorize = SLPVectorize;
|
||||||
unwrap(PMBR)->OptLevel = fromRust(OptLevel);
|
unwrap(PMBR)->OptLevel = fromRust(OptLevel);
|
||||||
unwrap(PMBR)->LoopVectorize = LoopVectorize;
|
unwrap(PMBR)->LoopVectorize = LoopVectorize;
|
||||||
unwrap(PMBR)->PrepareForThinLTO = PrepareForThinLTO;
|
unwrap(PMBR)->PrepareForThinLTO = PrepareForThinLTO;
|
||||||
|
unwrap(PMBR)->SizeLevel = SizeLevel;
|
||||||
|
unwrap(PMBR)->DisableUnrollLoops = SizeLevel != 0;
|
||||||
|
|
||||||
if (PGOGenPath) {
|
if (PGOGenPath) {
|
||||||
assert(!PGOUsePath && !PGOSampleUsePath);
|
assert(!PGOUsePath && !PGOSampleUsePath);
|
||||||
@ -594,6 +642,9 @@ extern "C" void LLVMRustConfigurePassManagerBuilder(
|
|||||||
} else if (PGOSampleUsePath) {
|
} else if (PGOSampleUsePath) {
|
||||||
unwrap(PMBR)->PGOSampleUse = PGOSampleUsePath;
|
unwrap(PMBR)->PGOSampleUse = PGOSampleUsePath;
|
||||||
}
|
}
|
||||||
|
#else
|
||||||
|
report_fatal_error("Legacy PM not supported with LLVM 15");
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
// Unfortunately, the LLVM C API doesn't provide a way to set the `LibraryInfo`
|
// Unfortunately, the LLVM C API doesn't provide a way to set the `LibraryInfo`
|
||||||
|
Loading…
Reference in New Issue
Block a user