Skip to content

Commit 2d2a3be

Browse files
committed
Move ArgAbi::pad_i32 into PassMode::Cast.
Because it's only needed for that variant. This shrinks the types and clarifies the logic.
1 parent 1c98947 commit 2d2a3be

File tree

2 files changed

+11
-8
lines changed

2 files changed

+11
-8
lines changed

Diff for: src/abi/pass_mode.rs

+7-4
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,10 @@ impl<'tcx> ArgAbiExt<'tcx> for ArgAbi<'tcx, Ty<'tcx>> {
100100
}
101101
_ => unreachable!("{:?}", self.layout.abi),
102102
},
103-
PassMode::Cast(ref cast) => cast_target_to_abi_params(cast),
103+
PassMode::Cast(ref cast, pad_i32) => {
104+
assert!(!pad_i32, "padding support not yet implemented");
105+
cast_target_to_abi_params(cast)
106+
}
104107
PassMode::Indirect { attrs, extra_attrs: None, on_stack } => {
105108
if on_stack {
106109
// Abi requires aligning struct size to pointer size
@@ -145,7 +148,7 @@ impl<'tcx> ArgAbiExt<'tcx> for ArgAbi<'tcx, Ty<'tcx>> {
145148
}
146149
_ => unreachable!("{:?}", self.layout.abi),
147150
},
148-
PassMode::Cast(ref cast) => {
151+
PassMode::Cast(ref cast, _) => {
149152
(None, cast_target_to_abi_params(cast).into_iter().collect())
150153
}
151154
PassMode::Indirect { attrs: _, extra_attrs: None, on_stack } => {
@@ -226,7 +229,7 @@ pub(super) fn adjust_arg_for_abi<'tcx>(
226229
let (a, b) = arg.load_scalar_pair(fx);
227230
smallvec![a, b]
228231
}
229-
PassMode::Cast(ref cast) => to_casted_value(fx, arg, cast),
232+
PassMode::Cast(ref cast, _) => to_casted_value(fx, arg, cast),
230233
PassMode::Indirect { .. } => {
231234
if is_owned {
232235
match arg.force_stack(fx) {
@@ -284,7 +287,7 @@ pub(super) fn cvalue_for_param<'tcx>(
284287
assert_eq!(block_params.len(), 2, "{:?}", block_params);
285288
Some(CValue::by_val_pair(block_params[0], block_params[1], arg_abi.layout))
286289
}
287-
PassMode::Cast(ref cast) => {
290+
PassMode::Cast(ref cast, _) => {
288291
Some(from_casted_value(fx, &block_params, arg_abi.layout, cast))
289292
}
290293
PassMode::Indirect { attrs: _, extra_attrs: None, on_stack: _ } => {

Diff for: src/abi/returning.rs

+4-4
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ pub(super) fn codegen_return_param<'tcx>(
1313
block_params_iter: &mut impl Iterator<Item = Value>,
1414
) -> CPlace<'tcx> {
1515
let (ret_place, ret_param): (_, SmallVec<[_; 2]>) = match fx.fn_abi.as_ref().unwrap().ret.mode {
16-
PassMode::Ignore | PassMode::Direct(_) | PassMode::Pair(_, _) | PassMode::Cast(_) => {
16+
PassMode::Ignore | PassMode::Direct(_) | PassMode::Pair(_, _) | PassMode::Cast(..) => {
1717
let is_ssa = ssa_analyzed[RETURN_PLACE] == crate::analyze::SsaKind::Ssa;
1818
(
1919
super::make_local_place(
@@ -75,7 +75,7 @@ pub(super) fn codegen_with_call_return_arg<'tcx>(
7575
PassMode::Indirect { attrs: _, extra_attrs: Some(_), on_stack: _ } => {
7676
unreachable!("unsized return value")
7777
}
78-
PassMode::Direct(_) | PassMode::Pair(_, _) | PassMode::Cast(_) => (None, None),
78+
PassMode::Direct(_) | PassMode::Pair(_, _) | PassMode::Cast(..) => (None, None),
7979
};
8080

8181
let call_inst = f(fx, return_ptr);
@@ -92,7 +92,7 @@ pub(super) fn codegen_with_call_return_arg<'tcx>(
9292
ret_place
9393
.write_cvalue(fx, CValue::by_val_pair(ret_val_a, ret_val_b, ret_arg_abi.layout));
9494
}
95-
PassMode::Cast(ref cast) => {
95+
PassMode::Cast(ref cast, _) => {
9696
let results =
9797
fx.bcx.inst_results(call_inst).iter().copied().collect::<SmallVec<[Value; 2]>>();
9898
let result =
@@ -131,7 +131,7 @@ pub(crate) fn codegen_return(fx: &mut FunctionCx<'_, '_, '_>) {
131131
let (ret_val_a, ret_val_b) = place.to_cvalue(fx).load_scalar_pair(fx);
132132
fx.bcx.ins().return_(&[ret_val_a, ret_val_b]);
133133
}
134-
PassMode::Cast(ref cast) => {
134+
PassMode::Cast(ref cast, _) => {
135135
let place = fx.get_local_place(RETURN_PLACE);
136136
let ret_val = place.to_cvalue(fx);
137137
let ret_vals = super::pass_mode::to_casted_value(fx, ret_val, cast);

0 commit comments

Comments
 (0)