diff options
| author | Denis Merigoux <denis.merigoux@gmail.com> | 2018-08-28 17:50:57 +0200 |
|---|---|---|
| committer | Eduard-Mihai Burtescu <edy.burt@gmail.com> | 2018-11-16 14:11:59 +0200 |
| commit | d3258448045d672b0cd273cb1ea9381b470c2ca2 (patch) | |
| tree | 8c4b20fa7ddb041ede6b9040ee11eeb91f721980 /src/librustc_codegen_llvm/mir | |
| parent | 8714e6bce6b04482723f0b735879533c82c114fa (diff) | |
| download | rust-d3258448045d672b0cd273cb1ea9381b470c2ca2.tar.gz rust-d3258448045d672b0cd273cb1ea9381b470c2ca2.zip | |
Replaced Codegen field access by trait method
Diffstat (limited to 'src/librustc_codegen_llvm/mir')
| -rw-r--r-- | src/librustc_codegen_llvm/mir/block.rs | 74 | ||||
| -rw-r--r-- | src/librustc_codegen_llvm/mir/constant.rs | 10 | ||||
| -rw-r--r-- | src/librustc_codegen_llvm/mir/mod.rs | 18 | ||||
| -rw-r--r-- | src/librustc_codegen_llvm/mir/operand.rs | 54 | ||||
| -rw-r--r-- | src/librustc_codegen_llvm/mir/place.rs | 74 | ||||
| -rw-r--r-- | src/librustc_codegen_llvm/mir/rvalue.rs | 84 |
6 files changed, 157 insertions, 157 deletions
diff --git a/src/librustc_codegen_llvm/mir/block.rs b/src/librustc_codegen_llvm/mir/block.rs index d9a9cdebd66..65930c264b3 100644 --- a/src/librustc_codegen_llvm/mir/block.rs +++ b/src/librustc_codegen_llvm/mir/block.rs @@ -177,7 +177,7 @@ impl FunctionCx<'a, 'll, 'tcx, &'ll Value> { lp = bx.insert_value(lp, lp1, 1); bx.resume(lp); } else { - bx.call(bx.cx.eh_unwind_resume(), &[lp0], cleanup_bundle); + bx.call(bx.cx().eh_unwind_resume(), &[lp0], cleanup_bundle); bx.unreachable(); } } @@ -185,7 +185,7 @@ impl FunctionCx<'a, 'll, 'tcx, &'ll Value> { mir::TerminatorKind::Abort => { // Call core::intrinsics::abort() - let fnname = bx.cx.get_intrinsic(&("llvm.trap")); + let fnname = bx.cx().get_intrinsic(&("llvm.trap")); bx.call(fnname, &[], None); bx.unreachable(); } @@ -209,7 +209,7 @@ impl FunctionCx<'a, 'll, 'tcx, &'ll Value> { bx.cond_br(discr.immediate(), lltrue, llfalse); } } else { - let switch_llty = bx.cx.layout_of(switch_ty).immediate_llvm_type(bx.cx); + let switch_llty = bx.cx().layout_of(switch_ty).immediate_llvm_type(bx.cx()); let llval = CodegenCx::c_uint_big(switch_llty, values[0]); let cmp = bx.icmp(IntPredicate::IntEQ, discr.immediate(), llval); bx.cond_br(cmp, lltrue, llfalse); @@ -219,7 +219,7 @@ impl FunctionCx<'a, 'll, 'tcx, &'ll Value> { let switch = bx.switch(discr.immediate(), llblock(self, *otherwise), values.len()); - let switch_llty = bx.cx.layout_of(switch_ty).immediate_llvm_type(bx.cx); + let switch_llty = bx.cx().layout_of(switch_ty).immediate_llvm_type(bx.cx()); for (&value, target) in values.iter().zip(targets) { let llval = CodegenCx::c_uint_big(switch_llty, value); let llbb = llblock(self, *target); @@ -269,7 +269,7 @@ impl FunctionCx<'a, 'll, 'tcx, &'ll Value> { } }; bx.load( - bx.pointercast(llslot, cast_ty.llvm_type(bx.cx).ptr_to()), + bx.pointercast(llslot, cast_ty.llvm_type(bx.cx()).ptr_to()), self.fn_ty.ret.layout.align) } }; @@ -283,7 +283,7 @@ impl FunctionCx<'a, 'll, 'tcx, &'ll Value> { mir::TerminatorKind::Drop { ref location, target, unwind } => { let ty = location.ty(self.mir, bx.tcx()).to_ty(bx.tcx()); let ty = self.monomorphize(&ty); - let drop_fn = monomorphize::resolve_drop_in_place(bx.cx.tcx, ty); + let drop_fn = monomorphize::resolve_drop_in_place(bx.cx().tcx, ty); if let ty::InstanceDef::DropGlue(_, None) = drop_fn.def { // we don't actually need to drop anything. @@ -302,19 +302,19 @@ impl FunctionCx<'a, 'll, 'tcx, &'ll Value> { }; let (drop_fn, fn_ty) = match ty.sty { ty::Dynamic(..) => { - let sig = drop_fn.fn_sig(bx.cx.tcx); + let sig = drop_fn.fn_sig(bx.tcx()); let sig = bx.tcx().normalize_erasing_late_bound_regions( ty::ParamEnv::reveal_all(), &sig, ); - let fn_ty = FnType::new_vtable(bx.cx, sig, &[]); + let fn_ty = FnType::new_vtable(bx.cx(), sig, &[]); let vtable = args[1]; args = &args[..1]; (meth::DESTRUCTOR.get_fn(&bx, vtable, &fn_ty), fn_ty) } _ => { - (callee::get_fn(bx.cx, drop_fn), - FnType::of_instance(bx.cx, &drop_fn)) + (callee::get_fn(bx.cx(), drop_fn), + FnType::of_instance(bx.cx(), &drop_fn)) } }; do_call(self, bx, fn_ty, drop_fn, args, @@ -333,7 +333,7 @@ impl FunctionCx<'a, 'll, 'tcx, &'ll Value> { // NOTE: Unlike binops, negation doesn't have its own // checked operation, just a comparison with the minimum // value, so we have to check for the assert message. - if !bx.cx.check_overflow { + if !bx.cx().check_overflow { if let mir::interpret::EvalErrorKind::OverflowNeg = *msg { const_cond = Some(expected); } @@ -346,8 +346,8 @@ impl FunctionCx<'a, 'll, 'tcx, &'ll Value> { } // Pass the condition through llvm.expect for branch hinting. - let expect = bx.cx.get_intrinsic(&"llvm.expect.i1"); - let cond = bx.call(expect, &[cond, CodegenCx::c_bool(bx.cx, expected)], None); + let expect = bx.cx().get_intrinsic(&"llvm.expect.i1"); + let cond = bx.call(expect, &[cond, CodegenCx::c_bool(bx.cx(), expected)], None); // Create the failure block and the conditional branch to it. let lltarget = llblock(self, target); @@ -365,9 +365,9 @@ impl FunctionCx<'a, 'll, 'tcx, &'ll Value> { // Get the location information. let loc = bx.sess().source_map().lookup_char_pos(span.lo()); let filename = Symbol::intern(&loc.file.name.to_string()).as_str(); - let filename = CodegenCx::c_str_slice(bx.cx, filename); - let line = CodegenCx::c_u32(bx.cx, loc.line as u32); - let col = CodegenCx::c_u32(bx.cx, loc.col.to_usize() as u32 + 1); + let filename = CodegenCx::c_str_slice(bx.cx(), filename); + let line = CodegenCx::c_u32(bx.cx(), loc.line as u32); + let col = CodegenCx::c_u32(bx.cx(), loc.col.to_usize() as u32 + 1); let align = tcx.data_layout.aggregate_align .max(tcx.data_layout.i32_align) .max(tcx.data_layout.pointer_align); @@ -378,9 +378,9 @@ impl FunctionCx<'a, 'll, 'tcx, &'ll Value> { let len = self.codegen_operand(&mut bx, len).immediate(); let index = self.codegen_operand(&mut bx, index).immediate(); - let file_line_col = CodegenCx::c_struct(bx.cx, + let file_line_col = CodegenCx::c_struct(bx.cx(), &[filename, line, col], false); - let file_line_col = consts::addr_of(bx.cx, + let file_line_col = consts::addr_of(bx.cx(), file_line_col, align, Some("panic_bounds_check_loc")); @@ -390,13 +390,13 @@ impl FunctionCx<'a, 'll, 'tcx, &'ll Value> { _ => { let str = msg.description(); let msg_str = Symbol::intern(str).as_str(); - let msg_str = CodegenCx::c_str_slice(bx.cx, msg_str); + let msg_str = CodegenCx::c_str_slice(bx.cx(), msg_str); let msg_file_line_col = CodegenCx::c_struct( - bx.cx, + bx.cx(), &[msg_str, filename, line, col], false ); - let msg_file_line_col = consts::addr_of(bx.cx, + let msg_file_line_col = consts::addr_of(bx.cx(), msg_file_line_col, align, Some("panic_loc")); @@ -408,8 +408,8 @@ impl FunctionCx<'a, 'll, 'tcx, &'ll Value> { // Obtain the panic entry point. let def_id = common::langcall(bx.tcx(), Some(span), "", lang_item); let instance = ty::Instance::mono(bx.tcx(), def_id); - let fn_ty = FnType::of_instance(bx.cx, &instance); - let llfn = callee::get_fn(bx.cx, instance); + let fn_ty = FnType::of_instance(bx.cx(), &instance); + let llfn = callee::get_fn(bx.cx(), instance); // Codegen the actual panic invoke/call. do_call(self, bx, fn_ty, llfn, &args, None, cleanup); @@ -431,7 +431,7 @@ impl FunctionCx<'a, 'll, 'tcx, &'ll Value> { let (instance, mut llfn) = match callee.layout.ty.sty { ty::FnDef(def_id, substs) => { - (Some(ty::Instance::resolve(bx.cx.tcx, + (Some(ty::Instance::resolve(bx.cx().tcx, ty::ParamEnv::reveal_all(), def_id, substs).unwrap()), @@ -470,7 +470,7 @@ impl FunctionCx<'a, 'll, 'tcx, &'ll Value> { // we can do what we like. Here, we declare that transmuting // into an uninhabited type is impossible, so anything following // it must be unreachable. - assert_eq!(bx.cx.layout_of(sig.output()).abi, layout::Abi::Uninhabited); + assert_eq!(bx.cx().layout_of(sig.output()).abi, layout::Abi::Uninhabited); bx.unreachable(); } return; @@ -484,7 +484,7 @@ impl FunctionCx<'a, 'll, 'tcx, &'ll Value> { let fn_ty = match def { Some(ty::InstanceDef::Virtual(..)) => { - FnType::new_vtable(bx.cx, sig, &extra_args) + FnType::new_vtable(bx.cx(), sig, &extra_args) } Some(ty::InstanceDef::DropGlue(_, None)) => { // empty drop glue - a nop. @@ -492,7 +492,7 @@ impl FunctionCx<'a, 'll, 'tcx, &'ll Value> { funclet_br(self, bx, target); return; } - _ => FnType::new(bx.cx, sig, &extra_args) + _ => FnType::new(bx.cx(), sig, &extra_args) }; // emit a panic instead of instantiating an uninhabited type @@ -563,7 +563,7 @@ impl FunctionCx<'a, 'll, 'tcx, &'ll Value> { let dest = match ret_dest { _ if fn_ty.ret.is_indirect() => llargs[0], ReturnDest::Nothing => { - CodegenCx::c_undef(fn_ty.ret.memory_ty(bx.cx).ptr_to()) + CodegenCx::c_undef(fn_ty.ret.memory_ty(bx.cx()).ptr_to()) } ReturnDest::IndirectOperand(dst, _) | ReturnDest::Store(dst) => dst.llval, @@ -597,7 +597,7 @@ impl FunctionCx<'a, 'll, 'tcx, &'ll Value> { ); return OperandRef { val: Immediate(llval), - layout: bx.cx.layout_of(ty), + layout: bx.cx().layout_of(ty), }; }, @@ -615,7 +615,7 @@ impl FunctionCx<'a, 'll, 'tcx, &'ll Value> { ); return OperandRef { val: Immediate(llval), - layout: bx.cx.layout_of(ty) + layout: bx.cx().layout_of(ty) }; } } @@ -625,7 +625,7 @@ impl FunctionCx<'a, 'll, 'tcx, &'ll Value> { }).collect(); - let callee_ty = instance.as_ref().unwrap().ty(bx.cx.tcx); + let callee_ty = instance.as_ref().unwrap().ty(bx.cx().tcx); codegen_intrinsic_call(&bx, callee_ty, &fn_ty, &args, dest, terminator.source_info.span); @@ -722,7 +722,7 @@ impl FunctionCx<'a, 'll, 'tcx, &'ll Value> { let fn_ptr = match (llfn, instance) { (Some(llfn), _) => llfn, - (None, Some(instance)) => callee::get_fn(bx.cx, instance), + (None, Some(instance)) => callee::get_fn(bx.cx(), instance), _ => span_bug!(span, "no llfn for call"), }; @@ -744,7 +744,7 @@ impl FunctionCx<'a, 'll, 'tcx, &'ll Value> { arg: &ArgType<'tcx, Ty<'tcx>>) { // Fill padding with undef value, where applicable. if let Some(ty) = arg.pad { - llargs.push(CodegenCx::c_undef(ty.llvm_type(bx.cx))); + llargs.push(CodegenCx::c_undef(ty.llvm_type(bx.cx()))); } if arg.is_ignore() { @@ -804,7 +804,7 @@ impl FunctionCx<'a, 'll, 'tcx, &'ll Value> { if by_ref && !arg.is_indirect() { // Have to load the argument, maybe while casting it. if let PassMode::Cast(ty) = arg.mode { - llval = bx.load(bx.pointercast(llval, ty.llvm_type(bx.cx).ptr_to()), + llval = bx.load(bx.pointercast(llval, ty.llvm_type(bx.cx()).ptr_to()), align.min(arg.layout.align)); } else { // We can't use `PlaceRef::load` here because the argument @@ -855,7 +855,7 @@ impl FunctionCx<'a, 'll, 'tcx, &'ll Value> { &mut self, bx: &Builder<'a, 'll, 'tcx> ) -> PlaceRef<'tcx, &'ll Value> { - let cx = bx.cx; + let cx = bx.cx(); if let Some(slot) = self.personality_slot { slot } else { @@ -992,7 +992,7 @@ impl FunctionCx<'a, 'll, 'tcx, &'ll Value> { LocalRef::Place(place) => self.codegen_transmute_into(bx, src, place), LocalRef::UnsizedPlace(_) => bug!("transmute must not involve unsized locals"), LocalRef::Operand(None) => { - let dst_layout = bx.cx.layout_of(self.monomorphized_place_ty(dst)); + let dst_layout = bx.cx().layout_of(self.monomorphized_place_ty(dst)); assert!(!dst_layout.ty.has_erasable_regions()); let place = PlaceRef::alloca(bx, dst_layout, "transmute_temp"); place.storage_live(bx); @@ -1016,7 +1016,7 @@ impl FunctionCx<'a, 'll, 'tcx, &'ll Value> { src: &mir::Operand<'tcx>, dst: PlaceRef<'tcx, &'ll Value>) { let src = self.codegen_operand(bx, src); - let llty = src.layout.llvm_type(bx.cx); + let llty = src.layout.llvm_type(bx.cx()); let cast_ptr = bx.pointercast(dst.llval, llty.ptr_to()); let align = src.layout.align.min(dst.layout.align); src.val.store(bx, PlaceRef::new_sized(cast_ptr, src.layout, align)); diff --git a/src/librustc_codegen_llvm/mir/constant.rs b/src/librustc_codegen_llvm/mir/constant.rs index ed1ef2db681..fb6bc0ec7c7 100644 --- a/src/librustc_codegen_llvm/mir/constant.rs +++ b/src/librustc_codegen_llvm/mir/constant.rs @@ -194,20 +194,20 @@ impl FunctionCx<'a, 'll, 'tcx, &'ll Value> { c, )?; if let Some(prim) = field.val.try_to_scalar() { - let layout = bx.cx.layout_of(field_ty); + let layout = bx.cx().layout_of(field_ty); let scalar = match layout.abi { layout::Abi::Scalar(ref x) => x, _ => bug!("from_const: invalid ByVal layout: {:#?}", layout) }; Ok(scalar_to_llvm( - bx.cx, prim, scalar, - layout.immediate_llvm_type(bx.cx), + bx.cx(), prim, scalar, + layout.immediate_llvm_type(bx.cx()), )) } else { bug!("simd shuffle field {:?}", field) } }).collect(); - let llval = CodegenCx::c_struct(bx.cx, &values?, false); + let llval = CodegenCx::c_struct(bx.cx(), &values?, false); Ok((llval, c.ty)) }) .unwrap_or_else(|_| { @@ -217,7 +217,7 @@ impl FunctionCx<'a, 'll, 'tcx, &'ll Value> { ); // We've errored, so we don't have to produce working code. let ty = self.monomorphize(&ty); - let llty = bx.cx.layout_of(ty).llvm_type(bx.cx); + let llty = bx.cx().layout_of(ty).llvm_type(bx.cx()); (CodegenCx::c_undef(llty), ty) }) } diff --git a/src/librustc_codegen_llvm/mir/mod.rs b/src/librustc_codegen_llvm/mir/mod.rs index e3546688e2b..06b1026dca9 100644 --- a/src/librustc_codegen_llvm/mir/mod.rs +++ b/src/librustc_codegen_llvm/mir/mod.rs @@ -275,7 +275,7 @@ pub fn codegen_mir( let mut allocate_local = |local| { let decl = &mir.local_decls[local]; - let layout = bx.cx.layout_of(fx.monomorphize(&decl.ty)); + let layout = bx.cx().layout_of(fx.monomorphize(&decl.ty)); assert!(!layout.ty.has_erasable_regions()); if let Some(name) = decl.name { @@ -285,7 +285,7 @@ pub fn codegen_mir( if !memory_locals.contains(local) && !dbg { debug!("alloc: {:?} ({}) -> operand", local, name); - return LocalRef::new_operand(bx.cx, layout); + return LocalRef::new_operand(bx.cx(), layout); } debug!("alloc: {:?} ({}) -> place", local, name); @@ -327,7 +327,7 @@ pub fn codegen_mir( // alloca in advance. Instead we wait until we see the // definition and update the operand there. debug!("alloc: {:?} -> operand", local); - LocalRef::new_operand(bx.cx, layout) + LocalRef::new_operand(bx.cx(), layout) } } }; @@ -420,8 +420,8 @@ fn create_funclets( // C++ personality function, but `catch (...)` has no type so // it's null. The 64 here is actually a bitfield which // represents that this is a catch-all block. - let null = CodegenCx::c_null(Type::i8p(bx.cx)); - let sixty_four = CodegenCx::c_i32(bx.cx, 64); + let null = CodegenCx::c_null(Type::i8p(bx.cx())); + let sixty_four = CodegenCx::c_i32(bx.cx(), 64); cleanup = cp_bx.catch_pad(cs, &[null, sixty_four, null]); cp_bx.br(llbb); } @@ -480,7 +480,7 @@ fn arg_local_refs( _ => bug!("spread argument isn't a tuple?!") }; - let place = PlaceRef::alloca(bx, bx.cx.layout_of(arg_ty), &name); + let place = PlaceRef::alloca(bx, bx.cx().layout_of(arg_ty), &name); for i in 0..tupled_arg_tys.len() { let arg = &fx.fn_ty.args[idx]; idx += 1; @@ -523,7 +523,7 @@ fn arg_local_refs( let local = |op| LocalRef::Operand(Some(op)); match arg.mode { PassMode::Ignore => { - return local(OperandRef::new_zst(bx.cx, arg.layout)); + return local(OperandRef::new_zst(bx.cx(), arg.layout)); } PassMode::Direct(_) => { let llarg = llvm::get_param(bx.llfn(), llarg_idx as c_uint); @@ -602,7 +602,7 @@ fn arg_local_refs( // Or is it the closure environment? let (closure_layout, env_ref) = match arg.layout.ty.sty { ty::RawPtr(ty::TypeAndMut { ty, .. }) | - ty::Ref(_, ty, _) => (bx.cx.layout_of(ty), true), + ty::Ref(_, ty, _) => (bx.cx().layout_of(ty), true), _ => (arg.layout, false) }; @@ -624,7 +624,7 @@ fn arg_local_refs( let env_alloca = !env_ref && llvm_util::get_major_version() < 6; let env_ptr = if env_alloca { let scratch = PlaceRef::alloca(bx, - bx.cx.layout_of(tcx.mk_mut_ptr(arg.layout.ty)), + bx.cx().layout_of(tcx.mk_mut_ptr(arg.layout.ty)), "__debuginfo_env_ptr"); bx.store(place.llval, scratch.llval, scratch.align); scratch.llval diff --git a/src/librustc_codegen_llvm/mir/operand.rs b/src/librustc_codegen_llvm/mir/operand.rs index 9e88c60d2f2..ab70f897b80 100644 --- a/src/librustc_codegen_llvm/mir/operand.rs +++ b/src/librustc_codegen_llvm/mir/operand.rs @@ -81,10 +81,10 @@ impl OperandRef<'tcx, &'ll Value> { pub fn from_const(bx: &Builder<'a, 'll, 'tcx>, val: &'tcx ty::Const<'tcx>) -> Result<OperandRef<'tcx, &'ll Value>, ErrorHandled> { - let layout = bx.cx.layout_of(val.ty); + let layout = bx.cx().layout_of(val.ty); if layout.is_zst() { - return Ok(OperandRef::new_zst(bx.cx, layout)); + return Ok(OperandRef::new_zst(bx.cx(), layout)); } let val = match val.val { @@ -95,10 +95,10 @@ impl OperandRef<'tcx, &'ll Value> { _ => bug!("from_const: invalid ByVal layout: {:#?}", layout) }; let llval = scalar_to_llvm( - bx.cx, + bx.cx(), x, scalar, - layout.immediate_llvm_type(bx.cx), + layout.immediate_llvm_type(bx.cx()), ); OperandValue::Immediate(llval) }, @@ -108,14 +108,14 @@ impl OperandRef<'tcx, &'ll Value> { _ => bug!("from_const: invalid ScalarPair layout: {:#?}", layout) }; let a_llval = scalar_to_llvm( - bx.cx, + bx.cx(), a, a_scalar, - layout.scalar_pair_element_llvm_type(bx.cx, 0, true), + layout.scalar_pair_element_llvm_type(bx.cx(), 0, true), ); - let b_layout = layout.scalar_pair_element_llvm_type(bx.cx, 1, true); + let b_layout = layout.scalar_pair_element_llvm_type(bx.cx(), 1, true); let b_llval = scalar_to_llvm( - bx.cx, + bx.cx(), b, b_scalar, b_layout, @@ -163,7 +163,7 @@ impl OperandRef<'tcx, &'ll Value> { /// For other cases, see `immediate`. pub fn immediate_or_packed_pair(self, bx: &Builder<'a, 'll, 'tcx>) -> &'ll Value { if let OperandValue::Pair(a, b) = self.val { - let llty = self.layout.llvm_type(bx.cx); + let llty = self.layout.llvm_type(bx.cx()); debug!("Operand::immediate_or_packed_pair: packing {:?} into {:?}", self, llty); // Reconstruct the immediate aggregate. @@ -200,13 +200,13 @@ impl OperandRef<'tcx, &'ll Value> { bx: &Builder<'a, 'll, 'tcx>, i: usize, ) -> OperandRef<'tcx, &'ll Value> { - let field = self.layout.field(bx.cx, i); + let field = self.layout.field(bx.cx(), i); let offset = self.layout.fields.offset(i); let mut val = match (self.val, &self.layout.abi) { // If the field is ZST, it has no data. _ if field.is_zst() => { - return OperandRef::new_zst(bx.cx, field); + return OperandRef::new_zst(bx.cx(), field); } // Newtype of a scalar, scalar pair or vector. @@ -219,12 +219,12 @@ impl OperandRef<'tcx, &'ll Value> { // Extract a scalar component from a pair. (OperandValue::Pair(a_llval, b_llval), &layout::Abi::ScalarPair(ref a, ref b)) => { if offset.bytes() == 0 { - assert_eq!(field.size, a.value.size(bx.cx)); + assert_eq!(field.size, a.value.size(bx.cx())); OperandValue::Immediate(a_llval) } else { - assert_eq!(offset, a.value.size(bx.cx) - .abi_align(b.value.align(bx.cx))); - assert_eq!(field.size, b.value.size(bx.cx)); + assert_eq!(offset, a.value.size(bx.cx()) + .abi_align(b.value.align(bx.cx()))); + assert_eq!(field.size, b.value.size(bx.cx())); OperandValue::Immediate(b_llval) } } @@ -232,7 +232,7 @@ impl OperandRef<'tcx, &'ll Value> { // `#[repr(simd)]` types are also immediate. (OperandValue::Immediate(llval), &layout::Abi::Vector { .. }) => { OperandValue::Immediate( - bx.extract_element(llval, CodegenCx::c_usize(bx.cx, i as u64))) + bx.extract_element(llval, CodegenCx::c_usize(bx.cx(), i as u64))) } _ => bug!("OperandRef::extract_field({:?}): not applicable", self) @@ -241,11 +241,11 @@ impl OperandRef<'tcx, &'ll Value> { // HACK(eddyb) have to bitcast pointers until LLVM removes pointee types. match val { OperandValue::Immediate(ref mut llval) => { - *llval = bx.bitcast(*llval, field.immediate_llvm_type(bx.cx)); + *llval = bx.bitcast(*llval, field.immediate_llvm_type(bx.cx())); } OperandValue::Pair(ref mut a, ref mut b) => { - *a = bx.bitcast(*a, field.scalar_pair_element_llvm_type(bx.cx, 0, true)); - *b = bx.bitcast(*b, field.scalar_pair_element_llvm_type(bx.cx, 1, true)); + *a = bx.bitcast(*a, field.scalar_pair_element_llvm_type(bx.cx(), 0, true)); + *b = bx.bitcast(*b, field.scalar_pair_element_llvm_type(bx.cx(), 1, true)); } OperandValue::Ref(..) => bug!() } @@ -349,7 +349,7 @@ impl OperandValue<&'ll Value> { // Allocate an appropriate region on the stack, and copy the value into it let (llsize, _) = glue::size_and_align_of_dst(bx, unsized_ty, Some(llextra)); - let lldst = bx.array_alloca(Type::i8(bx.cx), llsize, "unsized_tmp", max_align); + let lldst = bx.array_alloca(Type::i8(bx.cx()), llsize, "unsized_tmp", max_align); base::call_memcpy(bx, lldst, max_align, llptr, min_align, llsize, flags); // Store the allocated region and the extra to the indirect place. @@ -394,9 +394,9 @@ impl FunctionCx<'a, 'll, 'tcx, &'ll Value> { // ZSTs don't require any actual memory access. // FIXME(eddyb) deduplicate this with the identical // checks in `codegen_consume` and `extract_field`. - let elem = o.layout.field(bx.cx, 0); + let elem = o.layout.field(bx.cx(), 0); if elem.is_zst() { - return Some(OperandRef::new_zst(bx.cx, elem)); + return Some(OperandRef::new_zst(bx.cx(), elem)); } } _ => {} @@ -415,11 +415,11 @@ impl FunctionCx<'a, 'll, 'tcx, &'ll Value> { debug!("codegen_consume(place={:?})", place); let ty = self.monomorphized_place_ty(place); - let layout = bx.cx.layout_of(ty); + let layout = bx.cx().layout_of(ty); // ZSTs don't require any actual memory access. if layout.is_zst() { - return OperandRef::new_zst(bx.cx, layout); + return OperandRef::new_zst(bx.cx(), layout); } if let Some(o) = self.maybe_codegen_consume_direct(bx, place) { @@ -458,12 +458,12 @@ impl FunctionCx<'a, 'll, 'tcx, &'ll Value> { } // Allow RalfJ to sleep soundly knowing that even refactorings that remove // the above error (or silence it under some conditions) will not cause UB - let fnname = bx.cx.get_intrinsic(&("llvm.trap")); + let fnname = bx.cx().get_intrinsic(&("llvm.trap")); bx.call(fnname, &[], None); // We've errored, so we don't have to produce working code. - let layout = bx.cx.layout_of(ty); + let layout = bx.cx().layout_of(ty); PlaceRef::new_sized( - CodegenCx::c_undef(layout.llvm_type(bx.cx).ptr_to()), + CodegenCx::c_undef(layout.llvm_type(bx.cx()).ptr_to()), layout, layout.align, ).load(bx) diff --git a/src/librustc_codegen_llvm/mir/place.rs b/src/librustc_codegen_llvm/mir/place.rs index 1360c0307b3..ae421c6b97d 100644 --- a/src/librustc_codegen_llvm/mir/place.rs +++ b/src/librustc_codegen_llvm/mir/place.rs @@ -64,15 +64,15 @@ impl PlaceRef<'tcx, &'ll Value> { alloc: &mir::interpret::Allocation, offset: Size, ) -> PlaceRef<'tcx, &'ll Value> { - let init = const_alloc_to_llvm(bx.cx, alloc); - let base_addr = consts::addr_of(bx.cx, init, layout.align, None); + let init = const_alloc_to_llvm(bx.cx(), alloc); + let base_addr = consts::addr_of(bx.cx(), init, layout.align, None); let llval = unsafe { LLVMConstInBoundsGEP( - consts::bitcast(base_addr, Type::i8p(bx.cx)), - &CodegenCx::c_usize(bx.cx, offset.bytes()), + consts::bitcast(base_addr, Type::i8p(bx.cx())), + &CodegenCx::c_usize(bx.cx(), offset.bytes()), 1, )}; - let llval = consts::bitcast(llval, layout.llvm_type(bx.cx).ptr_to()); + let llval = consts::bitcast(llval, layout.llvm_type(bx.cx()).ptr_to()); PlaceRef::new_sized(llval, layout, alloc.align) } @@ -80,7 +80,7 @@ impl PlaceRef<'tcx, &'ll Value> { -> PlaceRef<'tcx, &'ll Value> { debug!("alloca({:?}: {:?})", name, layout); assert!(!layout.is_unsized(), "tried to statically allocate unsized place"); - let tmp = bx.alloca(layout.llvm_type(bx.cx), name, layout.align); + let tmp = bx.alloca(layout.llvm_type(bx.cx()), name, layout.align); Self::new_sized(tmp, layout, layout.align) } @@ -92,8 +92,8 @@ impl PlaceRef<'tcx, &'ll Value> { ) -> PlaceRef<'tcx, &'ll Value> { debug!("alloca_unsized_indirect({:?}: {:?})", name, layout); assert!(layout.is_unsized(), "tried to allocate indirect place for sized values"); - let ptr_ty = bx.cx.tcx.mk_mut_ptr(layout.ty); - let ptr_layout = bx.cx.layout_of(ptr_ty); + let ptr_ty = bx.cx().tcx.mk_mut_ptr(layout.ty); + let ptr_layout = bx.cx().layout_of(ptr_ty); Self::alloca(bx, ptr_layout, name) } @@ -116,14 +116,14 @@ impl PlaceRef<'tcx, &'ll Value> { assert_eq!(self.llextra.is_some(), self.layout.is_unsized()); if self.layout.is_zst() { - return OperandRef::new_zst(bx.cx, self.layout); + return OperandRef::new_zst(bx.cx(), self.layout); } let scalar_load_metadata = |load, scalar: &layout::Scalar| { let vr = scalar.valid_range.clone(); match scalar.value { layout::Int(..) => { - let range = scalar.valid_range_exclusive(bx.cx); + let range = scalar.valid_range_exclusive(bx.cx()); if range.start != range.end { bx.range_metadata(load, range); } @@ -160,7 +160,7 @@ impl PlaceRef<'tcx, &'ll Value> { let load = bx.load(llptr, self.align); scalar_load_metadata(load, scalar); if scalar.is_bool() { - bx.trunc(load, Type::i1(bx.cx)) + bx.trunc(load, Type::i1(bx.cx())) } else { load } @@ -179,7 +179,7 @@ impl PlaceRef<'tcx, &'ll Value> { bx: &Builder<'a, 'll, 'tcx>, ix: usize, ) -> PlaceRef<'tcx, &'ll Value> { - let cx = bx.cx; + let cx = bx.cx(); let field = self.layout.field(cx, ix); let offset = self.layout.fields.offset(ix); let effective_field_align = self.align.restrict_for_offset(offset); @@ -287,7 +287,7 @@ impl PlaceRef<'tcx, &'ll Value> { bx: &Builder<'a, 'll, 'tcx>, cast_to: Ty<'tcx> ) -> &'ll Value { - let cast_to = bx.cx.layout_of(cast_to).immediate_llvm_type(bx.cx); + let cast_to = bx.cx().layout_of(cast_to).immediate_llvm_type(bx.cx()); if self.layout.abi.is_uninhabited() { return CodegenCx::c_undef(cast_to); } @@ -295,7 +295,7 @@ impl PlaceRef<'tcx, &'ll Value> { layout::Variants::Single { index } => { let discr_val = self.layout.ty.ty_adt_def().map_or( index.as_u32() as u128, - |def| def.discriminant_for_variant(bx.cx.tcx, index).val); + |def| def.discriminant_for_variant(bx.cx().tcx, index).val); return CodegenCx::c_uint_big(cast_to, discr_val); } layout::Variants::Tagged { .. } | @@ -323,7 +323,7 @@ impl PlaceRef<'tcx, &'ll Value> { niche_start, .. } => { - let niche_llty = discr.layout.immediate_llvm_type(bx.cx); + let niche_llty = discr.layout.immediate_llvm_type(bx.cx()); if niche_variants.start() == niche_variants.end() { // FIXME(eddyb) Check the actual primitive type here. let niche_llval = if niche_start == 0 { @@ -352,7 +352,7 @@ impl PlaceRef<'tcx, &'ll Value> { /// Set the discriminant for a new value of the given case of the given /// representation. pub fn codegen_set_discr(&self, bx: &Builder<'a, 'll, 'tcx>, variant_index: VariantIdx) { - if self.layout.for_variant(bx.cx, variant_index).abi.is_uninhabited() { + if self.layout.for_variant(bx.cx(), variant_index).abi.is_uninhabited() { return; } match self.layout.variants { @@ -365,7 +365,7 @@ impl PlaceRef<'tcx, &'ll Value> { .discriminant_for_variant(bx.tcx(), variant_index) .val; bx.store( - CodegenCx::c_uint_big(ptr.layout.llvm_type(bx.cx), to), + CodegenCx::c_uint_big(ptr.layout.llvm_type(bx.cx()), to), ptr.llval, ptr.align); } @@ -380,16 +380,16 @@ impl PlaceRef<'tcx, &'ll Value> { bx.sess().target.target.arch == "aarch64" { // Issue #34427: As workaround for LLVM bug on ARM, // use memset of 0 before assigning niche value. - let llptr = bx.pointercast(self.llval, Type::i8(bx.cx).ptr_to()); - let fill_byte = CodegenCx::c_u8(bx.cx, 0); + let llptr = bx.pointercast(self.llval, Type::i8(bx.cx()).ptr_to()); + let fill_byte = CodegenCx::c_u8(bx.cx(), 0); let (size, align) = self.layout.size_and_align(); - let size = CodegenCx::c_usize(bx.cx, size.bytes()); - let align = CodegenCx::c_u32(bx.cx, align.abi() as u32); + let size = CodegenCx::c_usize(bx.cx(), size.bytes()); + let align = CodegenCx::c_u32(bx.cx(), align.abi() as u32); base::call_memset(bx, llptr, fill_byte, size, align, false); } let niche = self.project_field(bx, 0); - let niche_llty = niche.layout.immediate_llvm_type(bx.cx); + let niche_llty = niche.layout.immediate_llvm_type(bx.cx()); let niche_value = variant_index.as_u32() - niche_variants.start().as_u32(); let niche_value = (niche_value as u128) .wrapping_add(niche_start); @@ -409,9 +409,9 @@ impl PlaceRef<'tcx, &'ll Value> { pub fn project_index(&self, bx: &Builder<'a, 'll, 'tcx>, llindex: &'ll Value) -> PlaceRef<'tcx, &'ll Value> { PlaceRef { - llval: bx.inbounds_gep(self.llval, &[CodegenCx::c_usize(bx.cx, 0), llindex]), + llval: bx.inbounds_gep(self.llval, &[CodegenCx::c_usize(bx.cx(), 0), llindex]), llextra: None, - layout: self.layout.field(bx.cx, 0), + layout: self.layout.field(bx.cx(), 0), align: self.align } } @@ -419,10 +419,10 @@ impl PlaceRef<'tcx, &'ll Value> { pub fn project_downcast(&self, bx: &Builder<'a, 'll, 'tcx>, variant_index: VariantIdx) -> PlaceRef<'tcx, &'ll Value> { let mut downcast = *self; - downcast.layout = self.layout.for_variant(bx.cx, variant_index); + downcast.layout = self.layout.for_variant(bx.cx(), variant_index); // Cast to the appropriate variant struct type. - let variant_ty = downcast.layout.llvm_type(bx.cx); + let variant_ty = downcast.layout.llvm_type(bx.cx()); downcast.llval = bx.pointercast(downcast.llval, variant_ty.ptr_to()); downcast @@ -444,7 +444,7 @@ impl FunctionCx<'a, 'll, 'tcx, &'ll Value> { -> PlaceRef<'tcx, &'ll Value> { debug!("codegen_place(place={:?})", place); - let cx = bx.cx; + let cx = bx.cx(); let tcx = cx.tcx; if let mir::Place::Local(index) = *place { @@ -482,9 +482,9 @@ impl FunctionCx<'a, 'll, 'tcx, &'ll Value> { // and compile-time agree on values // With floats that won't always be true // so we generate an abort - let fnname = bx.cx.get_intrinsic(&("llvm.trap")); + let fnname = bx.cx().get_intrinsic(&("llvm.trap")); bx.call(fnname, &[], None); - let llval = CodegenCx::c_undef(layout.llvm_type(bx.cx).ptr_to()); + let llval = CodegenCx::c_undef(layout.llvm_type(bx.cx()).ptr_to()); PlaceRef::new_sized(llval, layout, layout.align) } } @@ -498,7 +498,7 @@ impl FunctionCx<'a, 'll, 'tcx, &'ll Value> { elem: mir::ProjectionElem::Deref }) => { // Load the pointer from its location. - self.codegen_consume(bx, base).deref(bx.cx) + self.codegen_consume(bx, base).deref(bx.cx()) } mir::Place::Projection(ref projection) => { let cg_base = self.codegen_place(bx, &projection.base); @@ -517,34 +517,34 @@ impl FunctionCx<'a, 'll, 'tcx, &'ll Value> { mir::ProjectionElem::ConstantIndex { offset, from_end: false, min_length: _ } => { - let lloffset = CodegenCx::c_usize(bx.cx, offset as u64); + let lloffset = CodegenCx::c_usize(bx.cx(), offset as u64); cg_base.project_index(bx, lloffset) } mir::ProjectionElem::ConstantIndex { offset, from_end: true, min_length: _ } => { - let lloffset = CodegenCx::c_usize(bx.cx, offset as u64); - let lllen = cg_base.len(bx.cx); + let lloffset = CodegenCx::c_usize(bx.cx(), offset as u64); + let lllen = cg_base.len(bx.cx()); let llindex = bx.sub(lllen, lloffset); cg_base.project_index(bx, llindex) } mir::ProjectionElem::Subslice { from, to } => { let mut subslice = cg_base.project_index(bx, - CodegenCx::c_usize(bx.cx, from as u64)); + CodegenCx::c_usize(bx.cx(), from as u64)); let projected_ty = PlaceTy::Ty { ty: cg_base.layout.ty } .projection_ty(tcx, &projection.elem) .to_ty(bx.tcx()); - subslice.layout = bx.cx.layout_of(self.monomorphize(&projected_ty)); + subslice.layout = bx.cx().layout_of(self.monomorphize(&projected_ty)); if subslice.layout.is_unsized() { subslice.llextra = Some(bx.sub(cg_base.llextra.unwrap(), - CodegenCx::c_usize(bx.cx, (from as u64) + (to as u64)))); + CodegenCx::c_usize(bx.cx(), (from as u64) + (to as u64)))); } // Cast the place pointer type to the new // array or slice type (*[%_; new_len]). subslice.llval = bx.pointercast(subslice.llval, - subslice.layout.llvm_type(bx.cx).ptr_to()); + subslice.layout.llvm_type(bx.cx()).ptr_to()); subslice } diff --git a/src/librustc_codegen_llvm/mir/rvalue.rs b/src/librustc_codegen_llvm/mir/rvalue.rs index 38557f02606..c15bc6a9704 100644 --- a/src/librustc_codegen_llvm/mir/rvalue.rs +++ b/src/librustc_codegen_llvm/mir/rvalue.rs @@ -103,28 +103,28 @@ impl FunctionCx<'a, 'll, 'tcx, &'ll Value> { return bx; } - let start = dest.project_index(&bx, CodegenCx::c_usize(bx.cx, 0)).llval; + let start = dest.project_index(&bx, CodegenCx::c_usize(bx.cx(), 0)).llval; if let OperandValue::Immediate(v) = cg_elem.val { - let align = CodegenCx::c_i32(bx.cx, dest.align.abi() as i32); - let size = CodegenCx::c_usize(bx.cx, dest.layout.size.bytes()); + let align = CodegenCx::c_i32(bx.cx(), dest.align.abi() as i32); + let size = CodegenCx::c_usize(bx.cx(), dest.layout.size.bytes()); // Use llvm.memset.p0i8.* to initialize all zero arrays if CodegenCx::is_const_integral(v) && CodegenCx::const_to_uint(v) == 0 { - let fill = CodegenCx::c_u8(bx.cx, 0); + let fill = CodegenCx::c_u8(bx.cx(), 0); base::call_memset(&bx, start, fill, size, align, false); return bx; } // Use llvm.memset.p0i8.* to initialize byte arrays let v = base::from_immediate(&bx, v); - if CodegenCx::val_ty(v) == Type::i8(bx.cx) { + if CodegenCx::val_ty(v) == Type::i8(bx.cx()) { base::call_memset(&bx, start, v, size, align, false); return bx; } } - let count = CodegenCx::c_usize(bx.cx, count); + let count = CodegenCx::c_usize(bx.cx(), count); let end = dest.project_index(&bx, count).llval; let header_bx = bx.build_sibling_block("repeat_loop_header"); @@ -140,7 +140,7 @@ impl FunctionCx<'a, 'll, 'tcx, &'ll Value> { cg_elem.val.store(&body_bx, PlaceRef::new_sized(current, cg_elem.layout, dest.align)); - let next = body_bx.inbounds_gep(current, &[CodegenCx::c_usize(bx.cx, 1)]); + let next = body_bx.inbounds_gep(current, &[CodegenCx::c_usize(bx.cx(), 1)]); body_bx.br(header_bx.llbb()); header_bx.add_incoming_to_phi(current, next, body_bx.llbb()); @@ -210,18 +210,18 @@ impl FunctionCx<'a, 'll, 'tcx, &'ll Value> { mir::Rvalue::Cast(ref kind, ref source, mir_cast_ty) => { let operand = self.codegen_operand(&bx, source); debug!("cast operand is {:?}", operand); - let cast = bx.cx.layout_of(self.monomorphize(&mir_cast_ty)); + let cast = bx.cx().layout_of(self.monomorphize(&mir_cast_ty)); let val = match *kind { mir::CastKind::ReifyFnPointer => { match operand.layout.ty.sty { ty::FnDef(def_id, substs) => { - if bx.cx.tcx.has_attr(def_id, "rustc_args_required_const") { + if bx.cx().tcx.has_attr(def_id, "rustc_args_required_const") { bug!("reifying a fn ptr that requires \ const arguments"); } OperandValue::Immediate( - callee::resolve_and_get_fn(bx.cx, def_id, substs)) + callee::resolve_and_get_fn(bx.cx(), def_id, substs)) } _ => { bug!("{} cannot be reified to a fn ptr", operand.layout.ty) @@ -232,8 +232,8 @@ impl FunctionCx<'a, 'll, 'tcx, &'ll Value> { match operand.layout.ty.sty { ty::Closure(def_id, substs) => { let instance = monomorphize::resolve_closure( - bx.cx.tcx, def_id, substs, ty::ClosureKind::FnOnce); - OperandValue::Immediate(callee::get_fn(bx.cx, instance)) + bx.cx().tcx, def_id, substs, ty::ClosureKind::FnOnce); + OperandValue::Immediate(callee::get_fn(bx.cx(), instance)) } _ => { bug!("{} cannot be cast to a fn ptr", operand.layout.ty) @@ -256,7 +256,7 @@ impl FunctionCx<'a, 'll, 'tcx, &'ll Value> { // HACK(eddyb) have to bitcast pointers // until LLVM removes pointee types. let lldata = bx.pointercast(lldata, - cast.scalar_pair_element_llvm_type(bx.cx, 0, true)); + cast.scalar_pair_element_llvm_type(bx.cx(), 0, true)); OperandValue::Pair(lldata, llextra) } OperandValue::Immediate(lldata) => { @@ -275,12 +275,12 @@ impl FunctionCx<'a, 'll, 'tcx, &'ll Value> { if let OperandValue::Pair(data_ptr, meta) = operand.val { if cast.is_llvm_scalar_pair() { let data_cast = bx.pointercast(data_ptr, - cast.scalar_pair_element_llvm_type(bx.cx, 0, true)); + cast.scalar_pair_element_llvm_type(bx.cx(), 0, true)); OperandValue::Pair(data_cast, meta) } else { // cast to thin-ptr // Cast of fat-ptr to thin-ptr is an extraction of data-ptr and // pointer-cast of that pointer to desired pointer type. - let llcast_ty = cast.immediate_llvm_type(bx.cx); + let llcast_ty = cast.immediate_llvm_type(bx.cx()); let llval = bx.pointercast(data_ptr, llcast_ty); OperandValue::Immediate(llval) } @@ -290,7 +290,7 @@ impl FunctionCx<'a, 'll, 'tcx, &'ll Value> { } mir::CastKind::Misc => { assert!(cast.is_llvm_immediate()); - let ll_t_out = cast.immediate_llvm_type(bx.cx); + let ll_t_out = cast.immediate_llvm_type(bx.cx()); if operand.layout.abi.is_uninhabited() { return (bx, OperandRef { val: OperandValue::Immediate(CodegenCx::c_undef(ll_t_out)), @@ -300,12 +300,12 @@ impl FunctionCx<'a, 'll, 'tcx, &'ll Value> { let r_t_in = CastTy::from_ty(operand.layout.ty) .expect("bad input type for cast"); let r_t_out = CastTy::from_ty(cast.ty).expect("bad output type for cast"); - let ll_t_in = operand.layout.immediate_llvm_type(bx.cx); + let ll_t_in = operand.layout.immediate_llvm_type(bx.cx()); match operand.layout.variants { layout::Variants::Single { index } => { if let Some(def) = operand.layout.ty.ty_adt_def() { let discr_val = def - .discriminant_for_variant(bx.cx.tcx, index) + .discriminant_for_variant(bx.cx().tcx, index) .val; let discr = CodegenCx::c_uint_big(ll_t_out, discr_val); return (bx, OperandRef { @@ -328,7 +328,7 @@ impl FunctionCx<'a, 'll, 'tcx, &'ll Value> { // then `i1 1` (i.e. E::B) is effectively `i8 -1`. signed = !scalar.is_bool() && s; - let er = scalar.valid_range_exclusive(bx.cx); + let er = scalar.valid_range_exclusive(bx.cx()); if er.end != er.start && scalar.valid_range.end() > scalar.valid_range.start() { // We want `table[e as usize]` to not @@ -367,7 +367,7 @@ impl FunctionCx<'a, 'll, 'tcx, &'ll Value> { (CastTy::FnPtr, CastTy::Int(_)) => bx.ptrtoint(llval, ll_t_out), (CastTy::Int(_), CastTy::Ptr(_)) => { - let usize_llval = bx.intcast(llval, bx.cx.isize_ty, signed); + let usize_llval = bx.intcast(llval, bx.cx().isize_ty, signed); bx.inttoptr(usize_llval, ll_t_out) } (CastTy::Int(_), CastTy::Float) => @@ -394,7 +394,7 @@ impl FunctionCx<'a, 'll, 'tcx, &'ll Value> { // Note: places are indirect, so storing the `llval` into the // destination effectively creates a reference. - let val = if !bx.cx.type_has_metadata(ty) { + let val = if !bx.cx().type_has_metadata(ty) { OperandValue::Immediate(cg_place.llval) } else { OperandValue::Pair(cg_place.llval, cg_place.llextra.unwrap()) @@ -412,7 +412,7 @@ impl FunctionCx<'a, 'll, 'tcx, &'ll Value> { let size = self.evaluate_array_len(&bx, place); let operand = OperandRef { val: OperandValue::Immediate(size), - layout: bx.cx.layout_of(bx.tcx().types.usize), + layout: bx.cx().layout_of(bx.tcx().types.usize), }; (bx, operand) } @@ -438,7 +438,7 @@ impl FunctionCx<'a, 'll, 'tcx, &'ll Value> { }; let operand = OperandRef { val: OperandValue::Immediate(llresult), - layout: bx.cx.layout_of( + layout: bx.cx().layout_of( op.ty(bx.tcx(), lhs.layout.ty, rhs.layout.ty)), }; (bx, operand) @@ -453,7 +453,7 @@ impl FunctionCx<'a, 'll, 'tcx, &'ll Value> { let operand_ty = bx.tcx().intern_tup(&[val_ty, bx.tcx().types.bool]); let operand = OperandRef { val: result, - layout: bx.cx.layout_of(operand_ty) + layout: bx.cx().layout_of(operand_ty) }; (bx, operand) @@ -488,8 +488,8 @@ impl FunctionCx<'a, 'll, 'tcx, &'ll Value> { } mir::Rvalue::NullaryOp(mir::NullOp::SizeOf, ty) => { - assert!(bx.cx.type_is_sized(ty)); - let val = CodegenCx::c_usize(bx.cx, bx.cx.size_of(ty).bytes()); + assert!(bx.cx().type_is_sized(ty)); + let val = CodegenCx::c_usize(bx.cx(), bx.cx().size_of(ty).bytes()); let tcx = bx.tcx(); (bx, OperandRef { val: OperandValue::Immediate(val), @@ -499,11 +499,11 @@ impl FunctionCx<'a, 'll, 'tcx, &'ll Value> { mir::Rvalue::NullaryOp(mir::NullOp::Box, content_ty) => { let content_ty: Ty<'tcx> = self.monomorphize(&content_ty); - let (size, align) = bx.cx.size_and_align_of(content_ty); - let llsize = CodegenCx::c_usize(bx.cx, size.bytes()); - let llalign = CodegenCx::c_usize(bx.cx, align.abi()); - let box_layout = bx.cx.layout_of(bx.tcx().mk_box(content_ty)); - let llty_ptr = box_layout.llvm_type(bx.cx); + let (size, align) = bx.cx().size_and_align_of(content_ty); + let llsize = CodegenCx::c_usize(bx.cx(), size.bytes()); + let llalign = CodegenCx::c_usize(bx.cx(), align.abi()); + let box_layout = bx.cx().layout_of(bx.tcx().mk_box(content_ty)); + let llty_ptr = box_layout.llvm_type(bx.cx()); // Allocate space: let def_id = match bx.tcx().lang_items().require(ExchangeMallocFnLangItem) { @@ -513,7 +513,7 @@ impl FunctionCx<'a, 'll, 'tcx, &'ll Value> { } }; let instance = ty::Instance::mono(bx.tcx(), def_id); - let r = callee::get_fn(bx.cx, instance); + let r = callee::get_fn(bx.cx(), instance); let val = bx.pointercast(bx.call(r, &[llsize, llalign], None), llty_ptr); let operand = OperandRef { @@ -547,14 +547,14 @@ impl FunctionCx<'a, 'll, 'tcx, &'ll Value> { if let mir::Place::Local(index) = *place { if let LocalRef::Operand(Some(op)) = self.locals[index] { if let ty::Array(_, n) = op.layout.ty.sty { - let n = n.unwrap_usize(bx.cx.tcx); - return CodegenCx::c_usize(bx.cx, n); + let n = n.unwrap_usize(bx.cx().tcx); + return CodegenCx::c_usize(bx.cx(), n); } } } // use common size calculation for non zero-sized types let cg_value = self.codegen_place(&bx, place); - return cg_value.len(bx.cx); + return cg_value.len(bx.cx()); } pub fn codegen_scalar_binop( @@ -606,7 +606,7 @@ impl FunctionCx<'a, 'll, 'tcx, &'ll Value> { mir::BinOp::Shr => common::build_unchecked_rshift(bx, input_ty, lhs, rhs), mir::BinOp::Ne | mir::BinOp::Lt | mir::BinOp::Gt | mir::BinOp::Eq | mir::BinOp::Le | mir::BinOp::Ge => if is_unit { - CodegenCx::c_bool(bx.cx, match op { + CodegenCx::c_bool(bx.cx(), match op { mir::BinOp::Ne | mir::BinOp::Lt | mir::BinOp::Gt => false, mir::BinOp::Eq | mir::BinOp::Le | mir::BinOp::Ge => true, _ => unreachable!() @@ -683,9 +683,9 @@ impl FunctionCx<'a, 'll, 'tcx, &'ll Value> { // with #[rustc_inherit_overflow_checks] and inlined from // another crate (mostly core::num generic/#[inline] fns), // while the current crate doesn't use overflow checks. - if !bx.cx.check_overflow { + if !bx.cx().check_overflow { let val = self.codegen_scalar_binop(bx, op, lhs, rhs, input_ty); - return OperandValue::Pair(val, CodegenCx::c_bool(bx.cx, false)); + return OperandValue::Pair(val, CodegenCx::c_bool(bx.cx(), false)); } let (val, of) = match op { @@ -817,7 +817,7 @@ fn get_overflow_intrinsic( }, }; - bx.cx.get_intrinsic(&name) + bx.cx().get_intrinsic(&name) } fn cast_int_to_float(bx: &Builder<'_, 'll, '_>, @@ -838,7 +838,7 @@ fn cast_int_to_float(bx: &Builder<'_, 'll, '_>, << (Single::MAX_EXP - Single::PRECISION as i16); let max = CodegenCx::c_uint_big(int_ty, MAX_F32_PLUS_HALF_ULP); let overflow = bx.icmp(IntPredicate::IntUGE, x, max); - let infinity_bits = CodegenCx::c_u32(bx.cx, ieee::Single::INFINITY.to_bits() as u32); + let infinity_bits = CodegenCx::c_u32(bx.cx(), ieee::Single::INFINITY.to_bits() as u32); let infinity = consts::bitcast(infinity_bits, float_ty); bx.select(overflow, infinity, bx.uitofp(x, float_ty)) } else { @@ -907,8 +907,8 @@ fn cast_float_to_int(bx: &Builder<'_, 'll, '_>, } let float_bits_to_llval = |bits| { let bits_llval = match float_ty.float_width() { - 32 => CodegenCx::c_u32(bx.cx, bits as u32), - 64 => CodegenCx::c_u64(bx.cx, bits as u64), + 32 => CodegenCx::c_u32(bx.cx(), bits as u32), + 64 => CodegenCx::c_u64(bx.cx(), bits as u64), n => bug!("unsupported float width {}", n), }; consts::bitcast(bits_llval, float_ty) |
