about summary refs log tree commit diff
diff options
context:
space:
mode:
authorNicholas Nethercote <n.nethercote@gmail.com>2022-08-26 10:37:51 +1000
committerNicholas Nethercote <n.nethercote@gmail.com>2022-08-26 10:45:45 +1000
commit5a6992916e8957927260171f8802b0d8b8809ec5 (patch)
tree0d715f36c8329eeccc1071f821a0cbf19127feb0
parentf78592f1bcfba609cc83361dc39c795729292eb1 (diff)
downloadrust-5a6992916e8957927260171f8802b0d8b8809ec5.tar.gz
rust-5a6992916e8957927260171f8802b0d8b8809ec5.zip
Simplify arg capacity calculations.
Currently they try to be very precise. But they are wrong, i.e. they
don't match what's happening in the loop below. This code isn't hot
enough for it to matter that much.
-rw-r--r--src/abi.rs22
1 files changed, 3 insertions, 19 deletions
diff --git a/src/abi.rs b/src/abi.rs
index 7f313583c82..87b730d29cd 100644
--- a/src/abi.rs
+++ b/src/abi.rs
@@ -107,26 +107,10 @@ pub trait FnAbiGccExt<'gcc, 'tcx> {
 impl<'gcc, 'tcx> FnAbiGccExt<'gcc, 'tcx> for FnAbi<'tcx, Ty<'tcx>> {
     fn gcc_type(&self, cx: &CodegenCx<'gcc, 'tcx>) -> (Type<'gcc>, Vec<Type<'gcc>>, bool, FxHashSet<usize>) {
         let mut on_stack_param_indices = FxHashSet::default();
-        let args_capacity: usize = self.args.iter().map(|arg|
-            if arg.pad.is_some() {
-                1
-            }
-            else {
-                0
-            } +
-            if let PassMode::Pair(_, _) = arg.mode {
-                2
-            } else {
-                1
-            }
-        ).sum();
+
+        // This capacity calculation is approximate.
         let mut argument_tys = Vec::with_capacity(
-            if let PassMode::Indirect { .. } = self.ret.mode {
-                1
-            }
-            else {
-                0
-            } + args_capacity,
+            self.args.len() + if let PassMode::Indirect { .. } = self.ret.mode { 1 } else { 0 }
         );
 
         let return_ty =