Skip to content

Commit c845946

Browse files
committed
Auto merge of rust-lang#97905 - nnethercote:revert-infallible-encoder, r=bjorn3
Revert part of rust-lang#94372 to improve performance rust-lang#94732 was supposed to give small but widespread performance improvements, as judged from three per-merge performance runs. But the performance run that occurred after merging included a roughly equal number of improvements and regressions, for unclear reasons. This PR is for a test run reverting those changes, to see what happens. r? `@ghost`
2 parents 75307c2 + 3186e31 commit c845946

File tree

25 files changed

+250
-173
lines changed

25 files changed

+250
-173
lines changed

compiler/rustc_ast/src/ast.rs

+3-3
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ use rustc_data_structures::stack::ensure_sufficient_stack;
3131
use rustc_data_structures::sync::Lrc;
3232
use rustc_data_structures::thin_vec::ThinVec;
3333
use rustc_macros::HashStable_Generic;
34-
use rustc_serialize::{Decodable, Decoder, Encodable, Encoder};
34+
use rustc_serialize::{self, Decoder, Encoder};
3535
use rustc_span::source_map::{respan, Spanned};
3636
use rustc_span::symbol::{kw, sym, Ident, Symbol};
3737
use rustc_span::{Span, DUMMY_SP};
@@ -2488,11 +2488,11 @@ rustc_index::newtype_index! {
24882488
}
24892489
}
24902490

2491-
impl<S: Encoder> Encodable<S> for AttrId {
2491+
impl<S: Encoder> rustc_serialize::Encodable<S> for AttrId {
24922492
fn encode(&self, _s: &mut S) {}
24932493
}
24942494

2495-
impl<D: Decoder> Decodable<D> for AttrId {
2495+
impl<D: Decoder> rustc_serialize::Decodable<D> for AttrId {
24962496
fn decode(_: &mut D) -> AttrId {
24972497
crate::attr::mk_attr_id()
24982498
}

compiler/rustc_codegen_ssa/src/lib.rs

+4-5
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,7 @@ use rustc_middle::dep_graph::WorkProduct;
2929
use rustc_middle::middle::dependency_format::Dependencies;
3030
use rustc_middle::middle::exported_symbols::SymbolExportKind;
3131
use rustc_middle::ty::query::{ExternProviders, Providers};
32-
use rustc_serialize::opaque::{MemDecoder, MemEncoder};
33-
use rustc_serialize::{Decodable, Decoder, Encodable, Encoder};
32+
use rustc_serialize::{opaque, Decodable, Decoder, Encodable, Encoder};
3433
use rustc_session::config::{CrateType, OutputFilenames, OutputType, RUST_CGU_EXT};
3534
use rustc_session::cstore::{self, CrateSource};
3635
use rustc_session::utils::NativeLibKind;
@@ -204,14 +203,14 @@ const RUSTC_VERSION: Option<&str> = option_env!("CFG_VERSION");
204203

205204
impl CodegenResults {
206205
pub fn serialize_rlink(codegen_results: &CodegenResults) -> Vec<u8> {
207-
let mut encoder = MemEncoder::new();
206+
let mut encoder = opaque::Encoder::new();
208207
encoder.emit_raw_bytes(RLINK_MAGIC);
209208
// `emit_raw_bytes` is used to make sure that the version representation does not depend on
210209
// Encoder's inner representation of `u32`.
211210
encoder.emit_raw_bytes(&RLINK_VERSION.to_be_bytes());
212211
encoder.emit_str(RUSTC_VERSION.unwrap());
213212
Encodable::encode(codegen_results, &mut encoder);
214-
encoder.finish()
213+
encoder.finish().unwrap()
215214
}
216215

217216
pub fn deserialize_rlink(data: Vec<u8>) -> Result<Self, String> {
@@ -231,7 +230,7 @@ impl CodegenResults {
231230
return Err(".rlink file was produced with encoding version {version_array}, but the current version is {RLINK_VERSION}".to_string());
232231
}
233232

234-
let mut decoder = MemDecoder::new(&data[4..], 0);
233+
let mut decoder = opaque::Decoder::new(&data[4..], 0);
235234
let rustc_version = decoder.read_str();
236235
let current_version = RUSTC_VERSION.unwrap();
237236
if rustc_version != current_version {

compiler/rustc_data_structures/src/fingerprint.rs

+5-5
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
use crate::stable_hasher;
2-
use rustc_serialize::{Decodable, Decoder, Encodable, Encoder};
2+
use rustc_serialize::{Decodable, Encodable};
33
use std::convert::TryInto;
44
use std::hash::{Hash, Hasher};
55

@@ -142,14 +142,14 @@ impl stable_hasher::StableHasherResult for Fingerprint {
142142

143143
impl_stable_hash_via_hash!(Fingerprint);
144144

145-
impl<E: Encoder> Encodable<E> for Fingerprint {
145+
impl<E: rustc_serialize::Encoder> Encodable<E> for Fingerprint {
146146
#[inline]
147147
fn encode(&self, s: &mut E) {
148148
s.emit_raw_bytes(&self.to_le_bytes());
149149
}
150150
}
151151

152-
impl<D: Decoder> Decodable<D> for Fingerprint {
152+
impl<D: rustc_serialize::Decoder> Decodable<D> for Fingerprint {
153153
#[inline]
154154
fn decode(d: &mut D) -> Self {
155155
Fingerprint::from_le_bytes(d.read_raw_bytes(16).try_into().unwrap())
@@ -184,7 +184,7 @@ impl std::fmt::Display for PackedFingerprint {
184184
}
185185
}
186186

187-
impl<E: Encoder> Encodable<E> for PackedFingerprint {
187+
impl<E: rustc_serialize::Encoder> Encodable<E> for PackedFingerprint {
188188
#[inline]
189189
fn encode(&self, s: &mut E) {
190190
// Copy to avoid taking reference to packed field.
@@ -193,7 +193,7 @@ impl<E: Encoder> Encodable<E> for PackedFingerprint {
193193
}
194194
}
195195

196-
impl<D: Decoder> Decodable<D> for PackedFingerprint {
196+
impl<D: rustc_serialize::Decoder> Decodable<D> for PackedFingerprint {
197197
#[inline]
198198
fn decode(d: &mut D) -> Self {
199199
Self(Fingerprint::decode(d))

compiler/rustc_incremental/src/persist/load.rs

+3-3
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ use rustc_data_structures::fx::FxHashMap;
44
use rustc_data_structures::memmap::Mmap;
55
use rustc_middle::dep_graph::{SerializedDepGraph, WorkProduct, WorkProductId};
66
use rustc_middle::ty::OnDiskCache;
7-
use rustc_serialize::opaque::MemDecoder;
7+
use rustc_serialize::opaque::Decoder;
88
use rustc_serialize::Decodable;
99
use rustc_session::config::IncrementalStateAssertion;
1010
use rustc_session::Session;
@@ -156,7 +156,7 @@ pub fn load_dep_graph(sess: &Session) -> DepGraphFuture {
156156

157157
if let LoadResult::Ok { data: (work_products_data, start_pos) } = load_result {
158158
// Decode the list of work_products
159-
let mut work_product_decoder = MemDecoder::new(&work_products_data[..], start_pos);
159+
let mut work_product_decoder = Decoder::new(&work_products_data[..], start_pos);
160160
let work_products: Vec<SerializedWorkProduct> =
161161
Decodable::decode(&mut work_product_decoder);
162162

@@ -193,7 +193,7 @@ pub fn load_dep_graph(sess: &Session) -> DepGraphFuture {
193193
LoadResult::DataOutOfDate => LoadResult::DataOutOfDate,
194194
LoadResult::Error { message } => LoadResult::Error { message },
195195
LoadResult::Ok { data: (bytes, start_pos) } => {
196-
let mut decoder = MemDecoder::new(&bytes, start_pos);
196+
let mut decoder = Decoder::new(&bytes, start_pos);
197197
let prev_commandline_args_hash = u64::decode(&mut decoder);
198198

199199
if prev_commandline_args_hash != expected_hash {

compiler/rustc_incremental/src/persist/save.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ use rustc_data_structures::sync::join;
33
use rustc_middle::dep_graph::{DepGraph, SerializedDepGraph, WorkProduct, WorkProductId};
44
use rustc_middle::ty::TyCtxt;
55
use rustc_serialize::opaque::{FileEncodeResult, FileEncoder};
6-
use rustc_serialize::Encodable;
6+
use rustc_serialize::{Encodable as RustcEncodable, Encoder};
77
use rustc_session::Session;
88
use std::fs;
99

compiler/rustc_metadata/src/rmeta/decoder.rs

+4-5
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,7 @@ use rustc_middle::ty::codec::TyDecoder;
2626
use rustc_middle::ty::fast_reject::SimplifiedType;
2727
use rustc_middle::ty::GeneratorDiagnosticData;
2828
use rustc_middle::ty::{self, ParameterizedOverTcx, Ty, TyCtxt, Visibility};
29-
use rustc_serialize::opaque::MemDecoder;
30-
use rustc_serialize::{Decodable, Decoder};
29+
use rustc_serialize::{opaque, Decodable, Decoder};
3130
use rustc_session::cstore::{
3231
CrateSource, ExternCrate, ForeignModule, LinkagePreference, NativeLib,
3332
};
@@ -155,7 +154,7 @@ struct ImportedSourceFile {
155154
}
156155

157156
pub(super) struct DecodeContext<'a, 'tcx> {
158-
opaque: MemDecoder<'a>,
157+
opaque: opaque::Decoder<'a>,
159158
cdata: Option<CrateMetadataRef<'a>>,
160159
blob: &'a MetadataBlob,
161160
sess: Option<&'tcx Session>,
@@ -187,7 +186,7 @@ pub(super) trait Metadata<'a, 'tcx>: Copy {
187186
fn decoder(self, pos: usize) -> DecodeContext<'a, 'tcx> {
188187
let tcx = self.tcx();
189188
DecodeContext {
190-
opaque: MemDecoder::new(self.blob(), pos),
189+
opaque: opaque::Decoder::new(self.blob(), pos),
191190
cdata: self.cdata(),
192191
blob: self.blob(),
193192
sess: self.sess().or(tcx.map(|tcx| tcx.sess)),
@@ -419,7 +418,7 @@ impl<'a, 'tcx> TyDecoder for DecodeContext<'a, 'tcx> {
419418
where
420419
F: FnOnce(&mut Self) -> R,
421420
{
422-
let new_opaque = MemDecoder::new(self.opaque.data, pos);
421+
let new_opaque = opaque::Decoder::new(self.opaque.data, pos);
423422
let old_opaque = mem::replace(&mut self.opaque, new_opaque);
424423
let old_state = mem::replace(&mut self.lazy_state, LazyState::NoNode);
425424
let r = f(self);

compiler/rustc_metadata/src/rmeta/encoder.rs

+11-5
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,7 @@ use rustc_middle::ty::codec::TyEncoder;
2727
use rustc_middle::ty::fast_reject::{self, SimplifiedType, TreatParams};
2828
use rustc_middle::ty::query::Providers;
2929
use rustc_middle::ty::{self, SymbolName, Ty, TyCtxt};
30-
use rustc_serialize::opaque::MemEncoder;
31-
use rustc_serialize::{Encodable, Encoder};
30+
use rustc_serialize::{opaque, Encodable, Encoder};
3231
use rustc_session::config::CrateType;
3332
use rustc_session::cstore::{ForeignModule, LinkagePreference, NativeLib};
3433
use rustc_span::hygiene::{ExpnIndex, HygieneEncodeContext, MacroKind};
@@ -44,7 +43,7 @@ use std::num::NonZeroUsize;
4443
use tracing::{debug, trace};
4544

4645
pub(super) struct EncodeContext<'a, 'tcx> {
47-
opaque: MemEncoder,
46+
opaque: opaque::Encoder,
4847
tcx: TyCtxt<'tcx>,
4948
feat: &'tcx rustc_feature::Features,
5049

@@ -94,6 +93,9 @@ macro_rules! encoder_methods {
9493
}
9594

9695
impl<'a, 'tcx> Encoder for EncodeContext<'a, 'tcx> {
96+
type Ok = <opaque::Encoder as Encoder>::Ok;
97+
type Err = <opaque::Encoder as Encoder>::Err;
98+
9799
encoder_methods! {
98100
emit_usize(usize);
99101
emit_u128(u128);
@@ -116,6 +118,10 @@ impl<'a, 'tcx> Encoder for EncodeContext<'a, 'tcx> {
116118
emit_str(&str);
117119
emit_raw_bytes(&[u8]);
118120
}
121+
122+
fn finish(self) -> Result<Self::Ok, Self::Err> {
123+
self.opaque.finish()
124+
}
119125
}
120126

121127
impl<'a, 'tcx, T> Encodable<EncodeContext<'a, 'tcx>> for LazyValue<T> {
@@ -2182,7 +2188,7 @@ pub fn encode_metadata(tcx: TyCtxt<'_>) -> EncodedMetadata {
21822188
}
21832189

21842190
fn encode_metadata_impl(tcx: TyCtxt<'_>) -> EncodedMetadata {
2185-
let mut encoder = MemEncoder::new();
2191+
let mut encoder = opaque::Encoder::new();
21862192
encoder.emit_raw_bytes(METADATA_HEADER);
21872193

21882194
// Will be filled with the root position after encoding everything.
@@ -2217,7 +2223,7 @@ fn encode_metadata_impl(tcx: TyCtxt<'_>) -> EncodedMetadata {
22172223
// culminating in the `CrateRoot` which points to all of it.
22182224
let root = ecx.encode_crate_root();
22192225

2220-
let mut result = ecx.opaque.finish();
2226+
let mut result = ecx.opaque.finish().unwrap();
22212227

22222228
// Encode the root position.
22232229
let header = METADATA_HEADER.len();

compiler/rustc_metadata/src/rmeta/mod.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ use rustc_middle::ty::fast_reject::SimplifiedType;
2222
use rustc_middle::ty::query::Providers;
2323
use rustc_middle::ty::{self, ReprOptions, Ty};
2424
use rustc_middle::ty::{GeneratorDiagnosticData, ParameterizedOverTcx, TyCtxt};
25-
use rustc_serialize::opaque::MemEncoder;
25+
use rustc_serialize::opaque::Encoder;
2626
use rustc_session::config::SymbolManglingVersion;
2727
use rustc_session::cstore::{CrateDepKind, ForeignModule, LinkagePreference, NativeLib};
2828
use rustc_span::edition::Edition;
@@ -323,7 +323,7 @@ macro_rules! define_tables {
323323
}
324324

325325
impl TableBuilders {
326-
fn encode(&self, buf: &mut MemEncoder) -> LazyTables {
326+
fn encode(&self, buf: &mut Encoder) -> LazyTables {
327327
LazyTables {
328328
$($name: self.$name.encode(buf)),+
329329
}

compiler/rustc_metadata/src/rmeta/table.rs

+3-3
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@ use rustc_data_structures::fingerprint::Fingerprint;
44
use rustc_hir::def::{CtorKind, CtorOf};
55
use rustc_index::vec::Idx;
66
use rustc_middle::ty::ParameterizedOverTcx;
7-
use rustc_serialize::opaque::MemEncoder;
8-
use rustc_serialize::Encoder;
7+
use rustc_serialize::opaque::Encoder;
8+
use rustc_serialize::Encoder as _;
99
use rustc_span::hygiene::MacroKind;
1010
use std::convert::TryInto;
1111
use std::marker::PhantomData;
@@ -281,7 +281,7 @@ where
281281
Some(value).write_to_bytes(&mut self.blocks[i]);
282282
}
283283

284-
pub(crate) fn encode<const N: usize>(&self, buf: &mut MemEncoder) -> LazyTable<I, T>
284+
pub(crate) fn encode<const N: usize>(&self, buf: &mut Encoder) -> LazyTable<I, T>
285285
where
286286
Option<T>: FixedSizeEncoding<ByteArray = [u8; N]>,
287287
{

compiler/rustc_middle/src/mir/graph_cyclic_cache.rs

+5-5
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ use rustc_data_structures::graph::{
33
};
44
use rustc_data_structures::stable_hasher::{HashStable, StableHasher};
55
use rustc_data_structures::sync::OnceCell;
6-
use rustc_serialize::{Decodable, Decoder, Encodable, Encoder};
6+
use rustc_serialize as serialize;
77

88
/// Helper type to cache the result of `graph::is_cyclic`.
99
#[derive(Clone, Debug)]
@@ -36,17 +36,17 @@ impl GraphIsCyclicCache {
3636
}
3737
}
3838

39-
impl<S: Encoder> Encodable<S> for GraphIsCyclicCache {
39+
impl<S: serialize::Encoder> serialize::Encodable<S> for GraphIsCyclicCache {
4040
#[inline]
4141
fn encode(&self, s: &mut S) {
42-
Encodable::encode(&(), s);
42+
serialize::Encodable::encode(&(), s);
4343
}
4444
}
4545

46-
impl<D: Decoder> Decodable<D> for GraphIsCyclicCache {
46+
impl<D: serialize::Decoder> serialize::Decodable<D> for GraphIsCyclicCache {
4747
#[inline]
4848
fn decode(d: &mut D) -> Self {
49-
let () = Decodable::decode(d);
49+
let () = serialize::Decodable::decode(d);
5050
Self::new()
5151
}
5252
}

compiler/rustc_middle/src/mir/predecessors.rs

+3-3
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
use rustc_data_structures::stable_hasher::{HashStable, StableHasher};
44
use rustc_data_structures::sync::OnceCell;
55
use rustc_index::vec::IndexVec;
6-
use rustc_serialize::{Decodable, Decoder, Encodable, Encoder};
6+
use rustc_serialize as serialize;
77
use smallvec::SmallVec;
88

99
use crate::mir::{BasicBlock, BasicBlockData};
@@ -54,12 +54,12 @@ impl PredecessorCache {
5454
}
5555
}
5656

57-
impl<S: Encoder> Encodable<S> for PredecessorCache {
57+
impl<S: serialize::Encoder> serialize::Encodable<S> for PredecessorCache {
5858
#[inline]
5959
fn encode(&self, _s: &mut S) {}
6060
}
6161

62-
impl<D: Decoder> Decodable<D> for PredecessorCache {
62+
impl<D: serialize::Decoder> serialize::Decodable<D> for PredecessorCache {
6363
#[inline]
6464
fn decode(_: &mut D) -> Self {
6565
Self::new()

compiler/rustc_middle/src/mir/switch_sources.rs

+3-3
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ use rustc_data_structures::stable_hasher::{HashStable, StableHasher};
55
use rustc_data_structures::stable_map::FxHashMap;
66
use rustc_data_structures::sync::OnceCell;
77
use rustc_index::vec::IndexVec;
8-
use rustc_serialize::{Decodable, Decoder, Encodable, Encoder};
8+
use rustc_serialize as serialize;
99
use smallvec::SmallVec;
1010

1111
use crate::mir::{BasicBlock, BasicBlockData, Terminator, TerminatorKind};
@@ -54,12 +54,12 @@ impl SwitchSourceCache {
5454
}
5555
}
5656

57-
impl<S: Encoder> Encodable<S> for SwitchSourceCache {
57+
impl<S: serialize::Encoder> serialize::Encodable<S> for SwitchSourceCache {
5858
#[inline]
5959
fn encode(&self, _s: &mut S) {}
6060
}
6161

62-
impl<D: Decoder> Decodable<D> for SwitchSourceCache {
62+
impl<D: serialize::Decoder> serialize::Decodable<D> for SwitchSourceCache {
6363
#[inline]
6464
fn decode(_: &mut D) -> Self {
6565
Self::new()

compiler/rustc_middle/src/mir/traversal.rs

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
use rustc_data_structures::stable_hasher::{HashStable, StableHasher};
22
use rustc_data_structures::sync::OnceCell;
33
use rustc_index::bit_set::BitSet;
4-
use rustc_serialize::{Decodable, Decoder, Encodable, Encoder};
4+
use rustc_serialize as serialize;
55

66
use super::*;
77

@@ -365,12 +365,12 @@ impl PostorderCache {
365365
}
366366
}
367367

368-
impl<S: Encoder> Encodable<S> for PostorderCache {
368+
impl<S: serialize::Encoder> serialize::Encodable<S> for PostorderCache {
369369
#[inline]
370370
fn encode(&self, _s: &mut S) {}
371371
}
372372

373-
impl<D: Decoder> Decodable<D> for PostorderCache {
373+
impl<D: serialize::Decoder> serialize::Decodable<D> for PostorderCache {
374374
#[inline]
375375
fn decode(_: &mut D) -> Self {
376376
Self::new()

0 commit comments

Comments
 (0)