Rollup merge of #32469 - nikomatsakis:shared-cgu, r=eddyb
make available monomorphizations shared by CGU The current setup means that all generics are local to a codegen-unit, which means massive duplication.
This commit is contained in:
commit
e3e58247a3
@ -80,6 +80,7 @@ pub struct SharedCrateContext<'a, 'tcx: 'a> {
|
|||||||
mir_map: &'a MirMap<'tcx>,
|
mir_map: &'a MirMap<'tcx>,
|
||||||
mir_cache: RefCell<DefIdMap<Rc<mir::Mir<'tcx>>>>,
|
mir_cache: RefCell<DefIdMap<Rc<mir::Mir<'tcx>>>>,
|
||||||
|
|
||||||
|
available_monomorphizations: RefCell<FnvHashSet<String>>,
|
||||||
available_drop_glues: RefCell<FnvHashMap<DropGlueKind<'tcx>, String>>,
|
available_drop_glues: RefCell<FnvHashMap<DropGlueKind<'tcx>, String>>,
|
||||||
use_dll_storage_attrs: bool,
|
use_dll_storage_attrs: bool,
|
||||||
|
|
||||||
@ -105,7 +106,6 @@ pub struct LocalCrateContext<'tcx> {
|
|||||||
/// Cache instances of monomorphic and polymorphic items
|
/// Cache instances of monomorphic and polymorphic items
|
||||||
instances: RefCell<FnvHashMap<Instance<'tcx>, ValueRef>>,
|
instances: RefCell<FnvHashMap<Instance<'tcx>, ValueRef>>,
|
||||||
monomorphizing: RefCell<DefIdMap<usize>>,
|
monomorphizing: RefCell<DefIdMap<usize>>,
|
||||||
available_monomorphizations: RefCell<FnvHashSet<String>>,
|
|
||||||
/// Cache generated vtables
|
/// Cache generated vtables
|
||||||
vtables: RefCell<FnvHashMap<ty::PolyTraitRef<'tcx>, ValueRef>>,
|
vtables: RefCell<FnvHashMap<ty::PolyTraitRef<'tcx>, ValueRef>>,
|
||||||
/// Cache of constant strings,
|
/// Cache of constant strings,
|
||||||
@ -357,6 +357,7 @@ impl<'b, 'tcx> SharedCrateContext<'b, 'tcx> {
|
|||||||
},
|
},
|
||||||
check_overflow: check_overflow,
|
check_overflow: check_overflow,
|
||||||
check_drop_flag_for_sanity: check_drop_flag_for_sanity,
|
check_drop_flag_for_sanity: check_drop_flag_for_sanity,
|
||||||
|
available_monomorphizations: RefCell::new(FnvHashSet()),
|
||||||
available_drop_glues: RefCell::new(FnvHashMap()),
|
available_drop_glues: RefCell::new(FnvHashMap()),
|
||||||
use_dll_storage_attrs: use_dll_storage_attrs,
|
use_dll_storage_attrs: use_dll_storage_attrs,
|
||||||
translation_items: RefCell::new(FnvHashMap()),
|
translation_items: RefCell::new(FnvHashMap()),
|
||||||
@ -474,7 +475,6 @@ impl<'tcx> LocalCrateContext<'tcx> {
|
|||||||
external_srcs: RefCell::new(NodeMap()),
|
external_srcs: RefCell::new(NodeMap()),
|
||||||
instances: RefCell::new(FnvHashMap()),
|
instances: RefCell::new(FnvHashMap()),
|
||||||
monomorphizing: RefCell::new(DefIdMap()),
|
monomorphizing: RefCell::new(DefIdMap()),
|
||||||
available_monomorphizations: RefCell::new(FnvHashSet()),
|
|
||||||
vtables: RefCell::new(FnvHashMap()),
|
vtables: RefCell::new(FnvHashMap()),
|
||||||
const_cstr_cache: RefCell::new(FnvHashMap()),
|
const_cstr_cache: RefCell::new(FnvHashMap()),
|
||||||
const_unsized: RefCell::new(FnvHashMap()),
|
const_unsized: RefCell::new(FnvHashMap()),
|
||||||
@ -723,7 +723,7 @@ impl<'b, 'tcx> CrateContext<'b, 'tcx> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub fn available_monomorphizations<'a>(&'a self) -> &'a RefCell<FnvHashSet<String>> {
|
pub fn available_monomorphizations<'a>(&'a self) -> &'a RefCell<FnvHashSet<String>> {
|
||||||
&self.local.available_monomorphizations
|
&self.shared.available_monomorphizations
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn available_drop_glues(&self) -> &RefCell<FnvHashMap<DropGlueKind<'tcx>, String>> {
|
pub fn available_drop_glues(&self) -> &RefCell<FnvHashMap<DropGlueKind<'tcx>, String>> {
|
||||||
|
Loading…
Reference in New Issue
Block a user