Default to disabling the new pass manager for the s390x targets.
This commit is contained in:
parent
44995f7afb
commit
4593d78e96
2 changed files with 13 additions and 4 deletions
|
@ -596,7 +596,7 @@ pub(crate) fn run_pass_manager(
|
||||||
// tools/lto/LTOCodeGenerator.cpp
|
// tools/lto/LTOCodeGenerator.cpp
|
||||||
debug!("running the pass manager");
|
debug!("running the pass manager");
|
||||||
unsafe {
|
unsafe {
|
||||||
if write::should_use_new_llvm_pass_manager(config) {
|
if write::should_use_new_llvm_pass_manager(cgcx, config) {
|
||||||
let opt_stage = if thin { llvm::OptStage::ThinLTO } else { llvm::OptStage::FatLTO };
|
let opt_stage = if thin { llvm::OptStage::ThinLTO } else { llvm::OptStage::FatLTO };
|
||||||
let opt_level = config.opt_level.unwrap_or(config::OptLevel::No);
|
let opt_level = config.opt_level.unwrap_or(config::OptLevel::No);
|
||||||
write::optimize_with_new_llvm_pass_manager(
|
write::optimize_with_new_llvm_pass_manager(
|
||||||
|
|
|
@ -377,10 +377,19 @@ fn get_pgo_sample_use_path(config: &ModuleConfig) -> Option<CString> {
|
||||||
.map(|path_buf| CString::new(path_buf.to_string_lossy().as_bytes()).unwrap())
|
.map(|path_buf| CString::new(path_buf.to_string_lossy().as_bytes()).unwrap())
|
||||||
}
|
}
|
||||||
|
|
||||||
pub(crate) fn should_use_new_llvm_pass_manager(config: &ModuleConfig) -> bool {
|
pub(crate) fn should_use_new_llvm_pass_manager(
|
||||||
|
cgcx: &CodegenContext<LlvmCodegenBackend>,
|
||||||
|
config: &ModuleConfig,
|
||||||
|
) -> bool {
|
||||||
// The new pass manager is enabled by default for LLVM >= 13.
|
// The new pass manager is enabled by default for LLVM >= 13.
|
||||||
// This matches Clang, which also enables it since Clang 13.
|
// This matches Clang, which also enables it since Clang 13.
|
||||||
config.new_llvm_pass_manager.unwrap_or_else(|| llvm_util::get_version() >= (13, 0, 0))
|
|
||||||
|
// FIXME: There are some perf issues with the new pass manager
|
||||||
|
// when targeting s390x, so it is temporarily disabled for that
|
||||||
|
// arch, see https://github.com/rust-lang/rust/issues/89609
|
||||||
|
config
|
||||||
|
.new_llvm_pass_manager
|
||||||
|
.unwrap_or_else(|| cgcx.target_arch != "s390x" && llvm_util::get_version() >= (13, 0, 0))
|
||||||
}
|
}
|
||||||
|
|
||||||
pub(crate) unsafe fn optimize_with_new_llvm_pass_manager(
|
pub(crate) unsafe fn optimize_with_new_llvm_pass_manager(
|
||||||
|
@ -482,7 +491,7 @@ pub(crate) unsafe fn optimize(
|
||||||
}
|
}
|
||||||
|
|
||||||
if let Some(opt_level) = config.opt_level {
|
if let Some(opt_level) = config.opt_level {
|
||||||
if should_use_new_llvm_pass_manager(config) {
|
if should_use_new_llvm_pass_manager(cgcx, config) {
|
||||||
let opt_stage = match cgcx.lto {
|
let opt_stage = match cgcx.lto {
|
||||||
Lto::Fat => llvm::OptStage::PreLinkFatLTO,
|
Lto::Fat => llvm::OptStage::PreLinkFatLTO,
|
||||||
Lto::Thin | Lto::ThinLocal => llvm::OptStage::PreLinkThinLTO,
|
Lto::Thin | Lto::ThinLocal => llvm::OptStage::PreLinkThinLTO,
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue