Skip to content

Commit ece98a4

Browse files
committed
Simplify CPlaceInner::Addr branch of write_cvalue_maybe_transmute
1 parent d169ee3 commit ece98a4

File tree

1 file changed

+28
-18
lines changed

1 file changed

+28
-18
lines changed

src/value_and_place.rs

Lines changed: 28 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -162,6 +162,7 @@ impl<'tcx> CValue<'tcx> {
162162
}
163163

164164
/// Load a value with layout.abi of scalar
165+
#[track_caller]
165166
pub(crate) fn load_scalar(self, fx: &mut FunctionCx<'_, '_, 'tcx>) -> Value {
166167
let layout = self.1;
167168
match self.0 {
@@ -184,6 +185,7 @@ impl<'tcx> CValue<'tcx> {
184185
}
185186

186187
/// Load a value pair with layout.abi of scalar pair
188+
#[track_caller]
187189
pub(crate) fn load_scalar_pair(self, fx: &mut FunctionCx<'_, '_, 'tcx>) -> (Value, Value) {
188190
let layout = self.1;
189191
match self.0 {
@@ -609,30 +611,38 @@ impl<'tcx> CPlace<'tcx> {
609611

610612
let mut flags = MemFlags::new();
611613
flags.set_notrap();
612-
match from.layout().abi {
613-
Abi::Scalar(_) => {
614-
let val = from.load_scalar(fx);
615-
to_ptr.store(fx, val, flags);
616-
return;
617-
}
618-
Abi::ScalarPair(a_scalar, b_scalar) => {
619-
let (value, extra) = from.load_scalar_pair(fx);
620-
let b_offset = scalar_pair_calculate_b_offset(fx.tcx, a_scalar, b_scalar);
621-
to_ptr.store(fx, value, flags);
622-
to_ptr.offset(fx, b_offset).store(fx, extra, flags);
623-
return;
624-
}
625-
_ => {}
626-
}
627614

628615
match from.0 {
629616
CValueInner::ByVal(val) => {
630617
to_ptr.store(fx, val, flags);
631618
}
632-
CValueInner::ByValPair(_, _) => {
633-
bug!("Non ScalarPair abi {:?} for ByValPair CValue", dst_layout.abi);
634-
}
619+
CValueInner::ByValPair(val1, val2) => match from.layout().abi {
620+
Abi::ScalarPair(a_scalar, b_scalar) => {
621+
let b_offset =
622+
scalar_pair_calculate_b_offset(fx.tcx, a_scalar, b_scalar);
623+
to_ptr.store(fx, val1, flags);
624+
to_ptr.offset(fx, b_offset).store(fx, val2, flags);
625+
}
626+
_ => bug!("Non ScalarPair abi {:?} for ByValPair CValue", dst_layout.abi),
627+
},
635628
CValueInner::ByRef(from_ptr, None) => {
629+
match from.layout().abi {
630+
Abi::Scalar(_) => {
631+
let val = from.load_scalar(fx);
632+
to_ptr.store(fx, val, flags);
633+
return;
634+
}
635+
Abi::ScalarPair(a_scalar, b_scalar) => {
636+
let b_offset =
637+
scalar_pair_calculate_b_offset(fx.tcx, a_scalar, b_scalar);
638+
let (val1, val2) = from.load_scalar_pair(fx);
639+
to_ptr.store(fx, val1, flags);
640+
to_ptr.offset(fx, b_offset).store(fx, val2, flags);
641+
return;
642+
}
643+
_ => {}
644+
}
645+
636646
let from_addr = from_ptr.get_addr(fx);
637647
let to_addr = to_ptr.get_addr(fx);
638648
let src_layout = from.1;

0 commit comments

Comments
 (0)