Auto merge of #49433 - varkor:metadata-skip-mir-opt, r=michaelwoerister
Skip MIR encoding for cargo check Resolves #48662. r? @michaelwoerister
This commit is contained in:
commit
d6a2dd9912
@ -246,6 +246,10 @@ pub fn values<'a>(&'a self) -> BTreeMapValuesIter<'a, OutputType, Option<PathBuf
|
||||
self.0.values()
|
||||
}
|
||||
|
||||
pub fn len(&self) -> usize {
|
||||
self.0.len()
|
||||
}
|
||||
|
||||
// True if any of the output types require codegen or linking.
|
||||
pub fn should_trans(&self) -> bool {
|
||||
self.0.keys().any(|k| match *k {
|
||||
|
@ -168,7 +168,7 @@ macro_rules! controller_entry_point {
|
||||
|
||||
write_out_deps(sess, &outputs, &output_paths);
|
||||
if sess.opts.output_types.contains_key(&OutputType::DepInfo) &&
|
||||
sess.opts.output_types.keys().count() == 1 {
|
||||
sess.opts.output_types.len() == 1 {
|
||||
return Ok(())
|
||||
}
|
||||
|
||||
|
@ -864,6 +864,11 @@ fn encode_info_for_trait_item(&mut self, def_id: DefId) -> Entry<'tcx> {
|
||||
}
|
||||
}
|
||||
|
||||
fn metadata_output_only(&self) -> bool {
|
||||
// MIR optimisation can be skipped when we're just interested in the metadata.
|
||||
!self.tcx.sess.opts.output_types.should_trans()
|
||||
}
|
||||
|
||||
fn encode_info_for_impl_item(&mut self, def_id: DefId) -> Entry<'tcx> {
|
||||
debug!("IsolatedEncoder::encode_info_for_impl_item({:?})", def_id);
|
||||
let tcx = self.tcx;
|
||||
@ -908,7 +913,8 @@ fn encode_info_for_impl_item(&mut self, def_id: DefId) -> Entry<'tcx> {
|
||||
} else if let hir::ImplItemKind::Method(ref sig, body) = ast_item.node {
|
||||
let generics = self.tcx.generics_of(def_id);
|
||||
let types = generics.parent_types as usize + generics.types.len();
|
||||
let needs_inline = types > 0 || tcx.trans_fn_attrs(def_id).requests_inline();
|
||||
let needs_inline = (types > 0 || tcx.trans_fn_attrs(def_id).requests_inline()) &&
|
||||
!self.metadata_output_only();
|
||||
let is_const_fn = sig.constness == hir::Constness::Const;
|
||||
let ast = if is_const_fn { Some(body) } else { None };
|
||||
let always_encode_mir = self.tcx.sess.opts.debugging_opts.always_encode_mir;
|
||||
@ -1199,7 +1205,8 @@ fn encode_info_for_item(&mut self, (def_id, item): (DefId, &'tcx hir::Item)) ->
|
||||
hir::ItemConst(..) => self.encode_optimized_mir(def_id),
|
||||
hir::ItemFn(_, _, constness, _, ref generics, _) => {
|
||||
let has_tps = generics.ty_params().next().is_some();
|
||||
let needs_inline = has_tps || tcx.trans_fn_attrs(def_id).requests_inline();
|
||||
let needs_inline = (has_tps || tcx.trans_fn_attrs(def_id).requests_inline()) &&
|
||||
!self.metadata_output_only();
|
||||
let always_encode_mir = self.tcx.sess.opts.debugging_opts.always_encode_mir;
|
||||
if needs_inline || constness == hir::Constness::Const || always_encode_mir {
|
||||
self.encode_optimized_mir(def_id)
|
||||
|
Loading…
Reference in New Issue
Block a user