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.
This commit is contained in:
parent
f78592f1bc
commit
5a6992916e
22
src/abi.rs
22
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 =
|
||||
|
Loading…
x
Reference in New Issue
Block a user