Skip to content

Commit 17ef249

Browse files
committed
Use implicit deref instead of BuilderMethods::cx() at more places
1 parent cec0cf5 commit 17ef249

File tree

6 files changed

+169
-169
lines changed

6 files changed

+169
-169
lines changed

src/librustc_codegen_llvm/builder.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1472,6 +1472,7 @@ impl BuilderMethods<'a, 'tcx> for Builder<'a, 'll, 'tcx> {
14721472

14731473
impl StaticBuilderMethods<'tcx> for Builder<'a, 'll, 'tcx> {
14741474
fn get_static(&self, def_id: DefId) -> &'ll Value {
1475+
// Forward to the `get_static` method of `CodegenCx`
14751476
self.cx().get_static(def_id)
14761477
}
14771478
}

src/librustc_codegen_ssa/base.rs

Lines changed: 37 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ use rustc::middle::lang_items::StartFnLangItem;
2121
use rustc::middle::weak_lang_items;
2222
use rustc::mir::mono::{Stats, CodegenUnitNameBuilder};
2323
use rustc::ty::{self, Ty, TyCtxt};
24-
use rustc::ty::layout::{self, Align, TyLayout, LayoutOf, VariantIdx, HasTyCtxt};
24+
use rustc::ty::layout::{self, Align, TyLayout, VariantIdx, HasTyCtxt};
2525
use rustc::ty::query::Providers;
2626
use rustc::middle::cstore::{self, LinkagePreference};
2727
use rustc::util::common::{time, print_time_passes_entry};
@@ -162,16 +162,16 @@ pub fn compare_simd_types<'a, 'tcx: 'a, Bx: BuilderMethods<'a, 'tcx>>(
162162
/// The `old_info` argument is a bit funny. It is intended for use
163163
/// in an upcast, where the new vtable for an object will be derived
164164
/// from the old one.
165-
pub fn unsized_info<'tcx, Cx: CodegenMethods<'tcx>>(
166-
cx: &Cx,
165+
pub fn unsized_info<'a, 'tcx: 'a, Bx: BuilderMethods<'a, 'tcx>>(
166+
bx: &Bx,
167167
source: Ty<'tcx>,
168168
target: Ty<'tcx>,
169-
old_info: Option<Cx::Value>,
170-
) -> Cx::Value {
171-
let (source, target) = cx.tcx().struct_lockstep_tails(source, target);
169+
old_info: Option<Bx::Value>,
170+
) -> Bx::Value {
171+
let (source, target) = bx.tcx().struct_lockstep_tails(source, target);
172172
match (&source.sty, &target.sty) {
173173
(&ty::Array(_, len), &ty::Slice(_)) => {
174-
cx.const_usize(len.unwrap_usize(cx.tcx()))
174+
bx.const_usize(len.unwrap_usize(bx.tcx()))
175175
}
176176
(&ty::Dynamic(..), &ty::Dynamic(..)) => {
177177
// For now, upcasts are limited to changes in marker
@@ -180,10 +180,10 @@ pub fn unsized_info<'tcx, Cx: CodegenMethods<'tcx>>(
180180
old_info.expect("unsized_info: missing old info for trait upcast")
181181
}
182182
(_, &ty::Dynamic(ref data, ..)) => {
183-
let vtable_ptr = cx.layout_of(cx.tcx().mk_mut_ptr(target))
184-
.field(cx, FAT_PTR_EXTRA);
185-
cx.const_ptrcast(meth::get_vtable(cx, source, data.principal()),
186-
cx.backend_type(vtable_ptr))
183+
let vtable_ptr = bx.layout_of(bx.tcx().mk_mut_ptr(target))
184+
.field(bx, FAT_PTR_EXTRA);
185+
bx.const_ptrcast(meth::get_vtable(bx.cx(), source, data.principal()),
186+
bx.backend_type(vtable_ptr))
187187
}
188188
_ => bug!("unsized_info: invalid unsizing {:?} -> {:?}",
189189
source,
@@ -206,40 +206,40 @@ pub fn unsize_thin_ptr<'a, 'tcx: 'a, Bx: BuilderMethods<'a, 'tcx>>(
206206
&ty::RawPtr(ty::TypeAndMut { ty: b, .. })) |
207207
(&ty::RawPtr(ty::TypeAndMut { ty: a, .. }),
208208
&ty::RawPtr(ty::TypeAndMut { ty: b, .. })) => {
209-
assert!(bx.cx().type_is_sized(a));
210-
let ptr_ty = bx.cx().type_ptr_to(bx.cx().backend_type(bx.cx().layout_of(b)));
211-
(bx.pointercast(src, ptr_ty), unsized_info(bx.cx(), a, b, None))
209+
assert!(bx.type_is_sized(a));
210+
let ptr_ty = bx.type_ptr_to(bx.backend_type(bx.layout_of(b)));
211+
(bx.pointercast(src, ptr_ty), unsized_info(bx, a, b, None))
212212
}
213213
(&ty::Adt(def_a, _), &ty::Adt(def_b, _)) if def_a.is_box() && def_b.is_box() => {
214214
let (a, b) = (src_ty.boxed_ty(), dst_ty.boxed_ty());
215-
assert!(bx.cx().type_is_sized(a));
216-
let ptr_ty = bx.cx().type_ptr_to(bx.cx().backend_type(bx.cx().layout_of(b)));
217-
(bx.pointercast(src, ptr_ty), unsized_info(bx.cx(), a, b, None))
215+
assert!(bx.type_is_sized(a));
216+
let ptr_ty = bx.type_ptr_to(bx.backend_type(bx.layout_of(b)));
217+
(bx.pointercast(src, ptr_ty), unsized_info(bx, a, b, None))
218218
}
219219
(&ty::Adt(def_a, _), &ty::Adt(def_b, _)) => {
220220
assert_eq!(def_a, def_b);
221221

222-
let src_layout = bx.cx().layout_of(src_ty);
223-
let dst_layout = bx.cx().layout_of(dst_ty);
222+
let src_layout = bx.layout_of(src_ty);
223+
let dst_layout = bx.layout_of(dst_ty);
224224
let mut result = None;
225225
for i in 0..src_layout.fields.count() {
226-
let src_f = src_layout.field(bx.cx(), i);
226+
let src_f = src_layout.field(bx, i);
227227
assert_eq!(src_layout.fields.offset(i).bytes(), 0);
228228
assert_eq!(dst_layout.fields.offset(i).bytes(), 0);
229229
if src_f.is_zst() {
230230
continue;
231231
}
232232
assert_eq!(src_layout.size, src_f.size);
233233

234-
let dst_f = dst_layout.field(bx.cx(), i);
234+
let dst_f = dst_layout.field(bx, i);
235235
assert_ne!(src_f.ty, dst_f.ty);
236236
assert_eq!(result, None);
237237
result = Some(unsize_thin_ptr(bx, src, src_f.ty, dst_f.ty));
238238
}
239239
let (lldata, llextra) = result.unwrap();
240240
// HACK(eddyb) have to bitcast pointers until LLVM removes pointee types.
241-
(bx.bitcast(lldata, bx.cx().scalar_pair_element_backend_type(dst_layout, 0, true)),
242-
bx.bitcast(llextra, bx.cx().scalar_pair_element_backend_type(dst_layout, 1, true)))
241+
(bx.bitcast(lldata, bx.scalar_pair_element_backend_type(dst_layout, 0, true)),
242+
bx.bitcast(llextra, bx.scalar_pair_element_backend_type(dst_layout, 1, true)))
243243
}
244244
_ => bug!("unsize_thin_ptr: called on bad types"),
245245
}
@@ -261,8 +261,8 @@ pub fn coerce_unsized_into<'a, 'tcx: 'a, Bx: BuilderMethods<'a, 'tcx>>(
261261
// i.e., &'a fmt::Debug+Send => &'a fmt::Debug
262262
// So we need to pointercast the base to ensure
263263
// the types match up.
264-
let thin_ptr = dst.layout.field(bx.cx(), FAT_PTR_ADDR);
265-
(bx.pointercast(base, bx.cx().backend_type(thin_ptr)), info)
264+
let thin_ptr = dst.layout.field(bx, FAT_PTR_ADDR);
265+
(bx.pointercast(base, bx.backend_type(thin_ptr)), info)
266266
}
267267
OperandValue::Immediate(base) => {
268268
unsize_thin_ptr(bx, base, src_ty, dst_ty)
@@ -323,16 +323,16 @@ fn cast_shift_rhs<'a, 'tcx: 'a, Bx: BuilderMethods<'a, 'tcx>>(
323323
) -> Bx::Value {
324324
// Shifts may have any size int on the rhs
325325
if op.is_shift() {
326-
let mut rhs_llty = bx.cx().val_ty(rhs);
327-
let mut lhs_llty = bx.cx().val_ty(lhs);
328-
if bx.cx().type_kind(rhs_llty) == TypeKind::Vector {
329-
rhs_llty = bx.cx().element_type(rhs_llty)
326+
let mut rhs_llty = bx.val_ty(rhs);
327+
let mut lhs_llty = bx.val_ty(lhs);
328+
if bx.type_kind(rhs_llty) == TypeKind::Vector {
329+
rhs_llty = bx.element_type(rhs_llty)
330330
}
331-
if bx.cx().type_kind(lhs_llty) == TypeKind::Vector {
332-
lhs_llty = bx.cx().element_type(lhs_llty)
331+
if bx.type_kind(lhs_llty) == TypeKind::Vector {
332+
lhs_llty = bx.element_type(lhs_llty)
333333
}
334-
let rhs_sz = bx.cx().int_width(rhs_llty);
335-
let lhs_sz = bx.cx().int_width(lhs_llty);
334+
let rhs_sz = bx.int_width(rhs_llty);
335+
let lhs_sz = bx.int_width(lhs_llty);
336336
if lhs_sz < rhs_sz {
337337
bx.trunc(rhs, lhs_llty)
338338
} else if lhs_sz > rhs_sz {
@@ -360,8 +360,8 @@ pub fn from_immediate<'a, 'tcx: 'a, Bx: BuilderMethods<'a, 'tcx>>(
360360
bx: &mut Bx,
361361
val: Bx::Value
362362
) -> Bx::Value {
363-
if bx.cx().val_ty(val) == bx.cx().type_i1() {
364-
bx.zext(val, bx.cx().type_i8())
363+
if bx.val_ty(val) == bx.type_i1() {
364+
bx.zext(val, bx.type_i8())
365365
} else {
366366
val
367367
}
@@ -384,7 +384,7 @@ pub fn to_immediate_scalar<'a, 'tcx: 'a, Bx: BuilderMethods<'a, 'tcx>>(
384384
scalar: &layout::Scalar,
385385
) -> Bx::Value {
386386
if scalar.is_bool() {
387-
return bx.trunc(val, bx.cx().type_i1());
387+
return bx.trunc(val, bx.type_i1());
388388
}
389389
val
390390
}
@@ -403,7 +403,7 @@ pub fn memcpy_ty<'a, 'tcx: 'a, Bx: BuilderMethods<'a, 'tcx>>(
403403
return;
404404
}
405405

406-
bx.memcpy(dst, dst_align, src, src_align, bx.cx().const_usize(size), flags);
406+
bx.memcpy(dst, dst_align, src, src_align, bx.const_usize(size), flags);
407407
}
408408

409409
pub fn codegen_instance<'a, 'tcx: 'a, Bx: BuilderMethods<'a, 'tcx>>(

src/librustc_codegen_ssa/mir/block.rs

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
use rustc::middle::lang_items;
22
use rustc::ty::{self, Ty, TypeFoldable};
3-
use rustc::ty::layout::{self, LayoutOf, HasTyCtxt};
3+
use rustc::ty::layout::{self, HasTyCtxt};
44
use rustc::mir;
55
use rustc::mir::interpret::EvalErrorKind;
66
use rustc_target::abi::call::{ArgType, FnType, PassMode, IgnoreMode};
@@ -1012,13 +1012,12 @@ impl<'a, 'tcx: 'a, Bx: BuilderMethods<'a, 'tcx>> FunctionCx<'a, 'tcx, Bx> {
10121012
&mut self,
10131013
bx: &mut Bx
10141014
) -> PlaceRef<'tcx, Bx::Value> {
1015-
let cx = bx.cx();
10161015
if let Some(slot) = self.personality_slot {
10171016
slot
10181017
} else {
1019-
let layout = cx.layout_of(cx.tcx().intern_tup(&[
1020-
cx.tcx().mk_mut_ptr(cx.tcx().types.u8),
1021-
cx.tcx().types.i32
1018+
let layout = bx.layout_of(bx.tcx().intern_tup(&[
1019+
bx.tcx().mk_mut_ptr(bx.tcx().types.u8),
1020+
bx.tcx().types.i32
10221021
]));
10231022
let slot = PlaceRef::alloca(bx, layout, "personalityslot");
10241023
self.personality_slot = Some(slot);

src/librustc_codegen_ssa/mir/operand.rs

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
use rustc::mir::interpret::{ConstValue, ErrorHandled};
22
use rustc::mir;
33
use rustc::ty;
4-
use rustc::ty::layout::{self, Align, LayoutOf, TyLayout};
4+
use rustc::ty::layout::{self, Align, TyLayout};
55

66
use crate::base;
77
use crate::MemFlags;
@@ -148,11 +148,11 @@ impl<'a, 'tcx: 'a, V: CodegenObject> OperandRef<'tcx, V> {
148148
bx: &mut Bx
149149
) -> V {
150150
if let OperandValue::Pair(a, b) = self.val {
151-
let llty = bx.cx().backend_type(self.layout);
151+
let llty = bx.backend_type(self.layout);
152152
debug!("Operand::immediate_or_packed_pair: packing {:?} into {:?}",
153153
self, llty);
154154
// Reconstruct the immediate aggregate.
155-
let mut llpair = bx.cx().const_undef(llty);
155+
let mut llpair = bx.const_undef(llty);
156156
let imm_a = base::from_immediate(bx, a);
157157
let imm_b = base::from_immediate(bx, b);
158158
llpair = bx.insert_value(llpair, imm_a, 0);
@@ -190,7 +190,7 @@ impl<'a, 'tcx: 'a, V: CodegenObject> OperandRef<'tcx, V> {
190190
bx: &mut Bx,
191191
i: usize
192192
) -> Self {
193-
let field = self.layout.field(bx.cx(), i);
193+
let field = self.layout.field(bx, i);
194194
let offset = self.layout.fields.offset(i);
195195

196196
let mut val = match (self.val, &self.layout.abi) {
@@ -209,20 +209,20 @@ impl<'a, 'tcx: 'a, V: CodegenObject> OperandRef<'tcx, V> {
209209
// Extract a scalar component from a pair.
210210
(OperandValue::Pair(a_llval, b_llval), &layout::Abi::ScalarPair(ref a, ref b)) => {
211211
if offset.bytes() == 0 {
212-
assert_eq!(field.size, a.value.size(bx.cx()));
212+
assert_eq!(field.size, a.value.size(bx));
213213
OperandValue::Immediate(a_llval)
214214
} else {
215-
assert_eq!(offset, a.value.size(bx.cx())
216-
.align_to(b.value.align(bx.cx()).abi));
217-
assert_eq!(field.size, b.value.size(bx.cx()));
215+
assert_eq!(offset, a.value.size(bx)
216+
.align_to(b.value.align(bx).abi));
217+
assert_eq!(field.size, b.value.size(bx));
218218
OperandValue::Immediate(b_llval)
219219
}
220220
}
221221

222222
// `#[repr(simd)]` types are also immediate.
223223
(OperandValue::Immediate(llval), &layout::Abi::Vector { .. }) => {
224224
OperandValue::Immediate(
225-
bx.extract_element(llval, bx.cx().const_usize(i as u64)))
225+
bx.extract_element(llval, bx.const_usize(i as u64)))
226226
}
227227

228228
_ => bug!("OperandRef::extract_field({:?}): not applicable", self)
@@ -231,7 +231,7 @@ impl<'a, 'tcx: 'a, V: CodegenObject> OperandRef<'tcx, V> {
231231
// HACK(eddyb) have to bitcast pointers until LLVM removes pointee types.
232232
// Bools in union fields needs to be truncated.
233233
let to_immediate_or_cast = |bx: &mut Bx, val, ty| {
234-
if ty == bx.cx().type_i1() {
234+
if ty == bx.type_i1() {
235235
bx.trunc(val, ty)
236236
} else {
237237
bx.bitcast(val, ty)
@@ -240,12 +240,12 @@ impl<'a, 'tcx: 'a, V: CodegenObject> OperandRef<'tcx, V> {
240240

241241
match val {
242242
OperandValue::Immediate(ref mut llval) => {
243-
*llval = to_immediate_or_cast(bx, *llval, bx.cx().immediate_backend_type(field));
243+
*llval = to_immediate_or_cast(bx, *llval, bx.immediate_backend_type(field));
244244
}
245245
OperandValue::Pair(ref mut a, ref mut b) => {
246-
*a = to_immediate_or_cast(bx, *a, bx.cx()
246+
*a = to_immediate_or_cast(bx, *a, bx
247247
.scalar_pair_element_backend_type(field, 0, true));
248-
*b = to_immediate_or_cast(bx, *b, bx.cx()
248+
*b = to_immediate_or_cast(bx, *b, bx
249249
.scalar_pair_element_backend_type(field, 1, true));
250250
}
251251
OperandValue::Ref(..) => bug!()
@@ -359,7 +359,7 @@ impl<'a, 'tcx: 'a, V: CodegenObject> OperandValue<V> {
359359

360360
// Allocate an appropriate region on the stack, and copy the value into it
361361
let (llsize, _) = glue::size_and_align_of_dst(bx, unsized_ty, Some(llextra));
362-
let lldst = bx.array_alloca(bx.cx().type_i8(), llsize, "unsized_tmp", max_align);
362+
let lldst = bx.array_alloca(bx.type_i8(), llsize, "unsized_tmp", max_align);
363363
bx.memcpy(lldst, max_align, llptr, min_align, llsize, flags);
364364

365365
// Store the allocated region and the extra to the indirect place.
@@ -404,7 +404,7 @@ impl<'a, 'tcx: 'a, Bx: BuilderMethods<'a, 'tcx>> FunctionCx<'a, 'tcx, Bx> {
404404
// ZSTs don't require any actual memory access.
405405
// FIXME(eddyb) deduplicate this with the identical
406406
// checks in `codegen_consume` and `extract_field`.
407-
let elem = o.layout.field(bx.cx(), 0);
407+
let elem = o.layout.field(bx, 0);
408408
if elem.is_zst() {
409409
return Some(OperandRef::new_zst(bx, elem));
410410
}
@@ -425,7 +425,7 @@ impl<'a, 'tcx: 'a, Bx: BuilderMethods<'a, 'tcx>> FunctionCx<'a, 'tcx, Bx> {
425425
debug!("codegen_consume(place={:?})", place);
426426

427427
let ty = self.monomorphized_place_ty(place);
428-
let layout = bx.cx().layout_of(ty);
428+
let layout = bx.layout_of(ty);
429429

430430
// ZSTs don't require any actual memory access.
431431
if layout.is_zst() {
@@ -471,9 +471,9 @@ impl<'a, 'tcx: 'a, Bx: BuilderMethods<'a, 'tcx>> FunctionCx<'a, 'tcx, Bx> {
471471
// the above error (or silence it under some conditions) will not cause UB
472472
bx.abort();
473473
// We've errored, so we don't have to produce working code.
474-
let layout = bx.cx().layout_of(ty);
474+
let layout = bx.layout_of(ty);
475475
bx.load_operand(PlaceRef::new_sized(
476-
bx.cx().const_undef(bx.cx().type_ptr_to(bx.cx().backend_type(layout))),
476+
bx.const_undef(bx.type_ptr_to(bx.backend_type(layout))),
477477
layout,
478478
layout.align.abi,
479479
))

0 commit comments

Comments
 (0)