Skip to content

Commit 38cd6d4

Browse files
Ariel Ben-Yehudaarielb1
authored andcommitted
share stored predicates
while most of the duplication in predicates was caused by stubs, this is still a 5% win on libcore. 567924 liballoc-bb943c5a.rlib 1425564 liballoc_jemalloc-bb943c5a.rlib 10520 liballoc_system-bb943c5a.rlib 154842 libarena-bb943c5a.rlib 4113790 libcollections-bb943c5a.rlib 18513674 libcore-bb943c5a.rlib 199466 libflate-bb943c5a.rlib 249548 libfmt_macros-bb943c5a.rlib 560488 libgetopts-bb943c5a.rlib 226772 libgraphviz-bb943c5a.rlib 442966 liblibc-bb943c5a.rlib 189884 liblog-bb943c5a.rlib 736764 librand-bb943c5a.rlib 609874 librbml-bb943c5a.rlib 1411678 librustc_back-bb943c5a.rlib 38770354 librustc-bb943c5a.rlib 12868 librustc_bitflags-bb943c5a.rlib 2327196 librustc_borrowck-bb943c5a.rlib 582178 librustc_data_structures-bb943c5a.rlib 9379344 librustc_driver-bb943c5a.rlib 9540324 librustc_front-bb943c5a.rlib 1614996 librustc_lint-bb943c5a.rlib 79217876 librustc_llvm-bb943c5a.rlib 4833518 librustc_mir-bb943c5a.rlib 3535794 librustc_platform_intrinsics-bb943c5a.rlib 603190 librustc_privacy-bb943c5a.rlib 3158032 librustc_resolve-bb943c5a.rlib 14300126 librustc_trans-bb943c5a.rlib 12024054 librustc_typeck-bb943c5a.rlib 1834852 librustc_unicode-bb943c5a.rlib 15611582 librustdoc-bb943c5a.rlib 2926594 libserialize-bb943c5a.rlib 8780060 libstd-bb943c5a.rlib 3077200 libsyntax-bb943c5a.rlib 917984 libterm-bb943c5a.rlib 1369754 libtest-bb943c5a.rlib
1 parent d981659 commit 38cd6d4

File tree

3 files changed

+115
-66
lines changed

3 files changed

+115
-66
lines changed

src/librustc/metadata/common.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -222,9 +222,9 @@ pub const tag_type_param_def: usize = 0x94;
222222
pub const tag_item_generics: usize = 0x95;
223223
pub const tag_method_ty_generics: usize = 0x96;
224224

225-
pub const tag_predicate: usize = 0x97;
226-
pub const tag_predicate_space: usize = 0x98;
227-
pub const tag_predicate_data: usize = 0x99;
225+
pub const tag_type_predicate: usize = 0x97;
226+
pub const tag_self_predicate: usize = 0x98;
227+
pub const tag_fn_predicate: usize = 0x99;
228228

229229
pub const tag_unsafety: usize = 0x9a;
230230

src/librustc/metadata/decoder.rs

Lines changed: 24 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1473,6 +1473,19 @@ fn doc_generics<'tcx>(base_doc: rbml::Doc,
14731473
ty::Generics { types: types, regions: regions }
14741474
}
14751475

1476+
fn doc_predicate<'tcx>(cdata: Cmd,
1477+
doc: rbml::Doc,
1478+
tcx: &ty::ctxt<'tcx>)
1479+
-> ty::Predicate<'tcx>
1480+
{
1481+
let predicate_pos = cdata.xref_index.lookup(
1482+
cdata.data(), reader::doc_as_u32(doc)).unwrap() as usize;
1483+
TyDecoder::new(
1484+
cdata.data(), cdata.cnum, predicate_pos, tcx,
1485+
&mut |_, did| translate_def_id(cdata, did)
1486+
).parse_predicate()
1487+
}
1488+
14761489
fn doc_predicates<'tcx>(base_doc: rbml::Doc,
14771490
tcx: &ty::ctxt<'tcx>,
14781491
cdata: Cmd,
@@ -1482,17 +1495,17 @@ fn doc_predicates<'tcx>(base_doc: rbml::Doc,
14821495
let doc = reader::get_doc(base_doc, tag);
14831496

14841497
let mut predicates = subst::VecPerParamSpace::empty();
1485-
for predicate_doc in reader::tagged_docs(doc, tag_predicate) {
1486-
let space_doc = reader::get_doc(predicate_doc, tag_predicate_space);
1487-
let space = subst::ParamSpace::from_uint(reader::doc_as_u8(space_doc) as usize);
1488-
1489-
let data_doc = reader::get_doc(predicate_doc, tag_predicate_data);
1490-
let data =
1491-
TyDecoder::with_doc(tcx, cdata.cnum, data_doc,
1492-
&mut |_, did| translate_def_id(cdata, did))
1493-
.parse_predicate();
1494-
1495-
predicates.push(space, data);
1498+
for predicate_doc in reader::tagged_docs(doc, tag_type_predicate) {
1499+
predicates.push(subst::TypeSpace,
1500+
doc_predicate(cdata, predicate_doc, tcx));
1501+
}
1502+
for predicate_doc in reader::tagged_docs(doc, tag_self_predicate) {
1503+
predicates.push(subst::SelfSpace,
1504+
doc_predicate(cdata, predicate_doc, tcx));
1505+
}
1506+
for predicate_doc in reader::tagged_docs(doc, tag_fn_predicate) {
1507+
predicates.push(subst::FnSpace,
1508+
doc_predicate(cdata, predicate_doc, tcx));
14961509
}
14971510

14981511
ty::GenericPredicates { predicates: predicates }

0 commit comments

Comments
 (0)