diff --git a/compiler/rustc_metadata/src/rmeta/table.rs b/compiler/rustc_metadata/src/rmeta/table.rs
index 03bd4170ea990..e74e999832a8d 100644
--- a/compiler/rustc_metadata/src/rmeta/table.rs
+++ b/compiler/rustc_metadata/src/rmeta/table.rs
@@ -172,8 +172,16 @@ where
pub(crate) fn encode(&self, buf: &mut Encoder) -> Lazy
> {
let pos = buf.position();
+ // Since all of the data are serialized as u32, adding some padding
+ // should make encoding/decoding slightly faster.
+ let pad = (4 - (pos % 4)) % 4;
+ let pad_bytes = [0, 0, 0];
+ buf.emit_raw_bytes(&pad_bytes[..pad]);
buf.emit_raw_bytes(&self.bytes);
- Lazy::from_position_and_meta(NonZeroUsize::new(pos as usize).unwrap(), self.bytes.len())
+ Lazy::from_position_and_meta(
+ NonZeroUsize::new(pos as usize + pad).unwrap(),
+ self.bytes.len(),
+ )
}
}