未验证 提交 e14bc2d3 编写于 作者: K kennytm 提交者: GitHub

Rollup merge of #50972 - nikic:no-parallel, r=michaelwoerister

Add -Z no-parallel-llvm flag

Codegen issues commonly only manifest under specific circumstances,
e.g. if multiple codegen units are used and ThinLTO is enabled.
However, these configuration are threaded, making the use of LLVM
debugging facilities hard, as output is interleaved.

This patch adds a -Z no-parallel-llvm flag, which allows disabling
parallelization of codegen and linking, while otherwise preserving
behavior with regard to codegen units and LTO.
......@@ -1337,6 +1337,8 @@ fn parse_cross_lang_lto(slot: &mut CrossLangLto, v: Option<&str>) -> bool {
"enable the experimental Chalk-based trait solving engine"),
cross_lang_lto: CrossLangLto = (CrossLangLto::Disabled, parse_cross_lang_lto, [TRACKED],
"generate build artifacts that are compatible with linker-based LTO."),
no_parallel_llvm: bool = (false, parse_bool, [UNTRACKED],
"don't run LLVM in parallel (while keeping codegen-units and ThinLTO)"),
}
pub fn default_lib_output() -> CrateType {
......
......@@ -1738,7 +1738,9 @@ fn start_executing_work(tcx: TyCtxt,
.binary_search_by_key(&cost, |&(_, cost)| cost)
.unwrap_or_else(|e| e);
work_items.insert(insertion_index, (work, cost));
helper.request_token();
if !cgcx.opts.debugging_opts.no_parallel_llvm {
helper.request_token();
}
}
}
......@@ -1842,7 +1844,9 @@ fn start_executing_work(tcx: TyCtxt,
};
work_items.insert(insertion_index, (llvm_work_item, cost));
helper.request_token();
if !cgcx.opts.debugging_opts.no_parallel_llvm {
helper.request_token();
}
assert_eq!(main_thread_worker_state,
MainThreadWorkerState::Codegenning);
main_thread_worker_state = MainThreadWorkerState::Idle;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册