Skip to content

Commit daf79b5

Browse files
committed
Avoid the stack in a couple more cases in write_cvalue_maybe_transmute
1 parent ab836ca commit daf79b5

File tree

1 file changed

+7
-6
lines changed

1 file changed

+7
-6
lines changed

src/value_and_place.rs

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -599,12 +599,13 @@ impl<'tcx> CPlace<'tcx> {
599599
transmute_scalar(fx, var, data, dst_ty);
600600
}
601601
CPlaceInner::VarPair(_local, var1, var2) => {
602-
let (data1, data2) = if from.layout().ty == dst_layout.ty {
603-
CValue(from.0, dst_layout).load_scalar_pair(fx)
604-
} else {
605-
let (ptr, meta) = from.force_stack(fx);
606-
assert!(meta.is_none());
607-
CValue(CValueInner::ByRef(ptr, None), dst_layout).load_scalar_pair(fx)
602+
let (data1, data2) = match from.1.abi {
603+
Abi::ScalarPair(_, _) => CValue(from.0, dst_layout).load_scalar_pair(fx),
604+
_ => {
605+
let (ptr, meta) = from.force_stack(fx);
606+
assert!(meta.is_none());
607+
CValue(CValueInner::ByRef(ptr, None), dst_layout).load_scalar_pair(fx)
608+
}
608609
};
609610
let (dst_ty1, dst_ty2) = fx.clif_pair_type(self.layout().ty).unwrap();
610611
transmute_scalar(fx, var1, data1, dst_ty1);

0 commit comments

Comments
 (0)