Skip to content

Commit 089e75e

Browse files
committed
Encapsulate CPlace constructors
1 parent 3f04e73 commit 089e75e

File tree

6 files changed

+19
-12
lines changed

6 files changed

+19
-12
lines changed

src/abi.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -330,7 +330,7 @@ fn local_place<'a, 'tcx: 'a>(
330330
}
331331

332332
// Take stack_addr in advance to avoid many duplicate instructions
333-
CPlace::Addr(place.to_addr(fx), None, layout)
333+
CPlace::for_addr(place.to_addr(fx), layout)
334334
};
335335

336336
let prev_place = fx.local_map.insert(local, place);
@@ -471,7 +471,7 @@ pub fn codegen_fn_prelude<'a, 'tcx: 'a>(
471471
PassMode::ByRef => {
472472
fx.local_map.insert(
473473
RETURN_PLACE,
474-
CPlace::Addr(ret_param.unwrap(), None, ret_layout),
474+
CPlace::for_addr(ret_param.unwrap(), ret_layout),
475475
);
476476
}
477477
}

src/base.rs

+4-5
Original file line numberDiff line numberDiff line change
@@ -538,7 +538,7 @@ fn trans_stmt<'a, 'tcx: 'a>(
538538

539539
// FIXME avoid forcing to stack
540540
let place =
541-
CPlace::Addr(operand.force_stack(fx), None, operand.layout());
541+
CPlace::for_addr(operand.force_stack(fx), operand.layout());
542542
let discr = trans_get_discriminant(fx, place, fx.layout_of(to_ty));
543543
lval.write_cvalue(fx, discr);
544544
} else {
@@ -1162,19 +1162,18 @@ pub fn trans_place<'a, 'tcx: 'a>(
11621162
let elem_layout = fx.layout_of(elem_ty);
11631163
let ptr = base.to_addr(fx);
11641164
let len = crate::constant::force_eval_const(fx, len).unwrap_usize(fx.tcx);
1165-
CPlace::Addr(
1165+
CPlace::for_addr(
11661166
fx.bcx.ins().iadd_imm(ptr, elem_layout.size.bytes() as i64 * from as i64),
1167-
None,
11681167
fx.layout_of(fx.tcx.mk_array(elem_ty, len - from as u64 - to as u64)),
11691168
)
11701169
}
11711170
ty::Slice(elem_ty) => {
11721171
let elem_layout = fx.layout_of(elem_ty);
11731172
let (ptr, len) = base.to_addr_maybe_unsized(fx);
11741173
let len = len.unwrap();
1175-
CPlace::Addr(
1174+
CPlace::for_addr_with_extra(
11761175
fx.bcx.ins().iadd_imm(ptr, elem_layout.size.bytes() as i64 * from as i64),
1177-
Some(fx.bcx.ins().iadd_imm(len, -(from as i64 + to as i64))),
1176+
fx.bcx.ins().iadd_imm(len, -(from as i64 + to as i64)),
11781177
base.layout(),
11791178
)
11801179
}

src/constant.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -234,7 +234,7 @@ fn cplace_for_dataid<'a, 'tcx: 'a>(
234234
let global_ptr = fx.bcx.ins().global_value(fx.pointer_type, local_data_id);
235235
let layout = fx.layout_of(fx.monomorphize(&ty));
236236
assert!(!layout.is_unsized(), "unsized statics aren't supported");
237-
CPlace::Addr(global_ptr, None, layout)
237+
CPlace::for_addr(global_ptr, layout)
238238
}
239239

240240
fn define_all_allocs<'a, 'tcx: 'a, B: Backend + 'a>(

src/intrinsics.rs

+3-3
Original file line numberDiff line numberDiff line change
@@ -144,7 +144,7 @@ pub fn codegen_intrinsic_call<'a, 'tcx: 'a>(
144144
};
145145
discriminant_value, (c val) {
146146
let pointee_layout = fx.layout_of(val.layout().ty.builtin_deref(true).unwrap().ty);
147-
let place = CPlace::Addr(val.load_scalar(fx), None, pointee_layout);
147+
let place = CPlace::for_addr(val.load_scalar(fx), pointee_layout);
148148
let discr = crate::base::trans_get_discriminant(fx, place, ret.layout());
149149
ret.write_cvalue(fx, discr);
150150
};
@@ -426,7 +426,7 @@ pub fn codegen_intrinsic_call<'a, 'tcx: 'a>(
426426
ret.write_cvalue(fx, val);
427427
};
428428
_ if intrinsic.starts_with("atomic_store"), (v ptr, c val) {
429-
let dest = CPlace::Addr(ptr, None, val.layout());
429+
let dest = CPlace::for_addr(ptr, val.layout());
430430
dest.write_cvalue(fx, val);
431431
};
432432
_ if intrinsic.starts_with("atomic_xchg"), <T> (v ptr, c src) {
@@ -436,7 +436,7 @@ pub fn codegen_intrinsic_call<'a, 'tcx: 'a>(
436436
ret.write_cvalue(fx, CValue::by_val(old, fx.layout_of(T)));
437437

438438
// Write new
439-
let dest = CPlace::Addr(ptr, None, src.layout());
439+
let dest = CPlace::for_addr(ptr, src.layout());
440440
dest.write_cvalue(fx, src);
441441
};
442442
_ if intrinsic.starts_with("atomic_cxchg"), <T> (v ptr, v test_old, v new) { // both atomic_cxchg_* and atomic_cxchgweak_*

src/trap.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -49,5 +49,5 @@ pub fn trap_unreachable_ret_place<'tcx>(fx: &mut FunctionCx<'_, 'tcx, impl crane
4949
let true_ = fx.bcx.ins().iconst(types::I32, 1);
5050
fx.bcx.ins().trapnz(true_, TrapCode::User(!0));
5151
let zero = fx.bcx.ins().iconst(fx.pointer_type, 0);
52-
CPlace::Addr(zero, None, dest_layout)
52+
CPlace::for_addr(zero, dest_layout)
5353
}

src/value_and_place.rs

+8
Original file line numberDiff line numberDiff line change
@@ -219,6 +219,14 @@ impl<'a, 'tcx: 'a> CPlace<'tcx> {
219219
CPlace::Var(local, layout)
220220
}
221221

222+
pub fn for_addr(addr: Value, layout: TyLayout<'tcx>) -> CPlace<'tcx> {
223+
CPlace::Addr(addr, None, layout)
224+
}
225+
226+
pub fn for_addr_with_extra(addr: Value, extra: Value, layout: TyLayout<'tcx>) -> CPlace<'tcx> {
227+
CPlace::Addr(addr, Some(extra), layout)
228+
}
229+
222230
pub fn to_cvalue(self, fx: &mut FunctionCx<'a, 'tcx, impl Backend>) -> CValue<'tcx> {
223231
match self {
224232
CPlace::Var(var, layout) => CValue::ByVal(fx.bcx.use_var(mir_var(var)), layout),

0 commit comments

Comments
 (0)