From d80ff126bf4597fa44612abdb21d7d3ff6ecbce4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Steinbrink?= Date: Mon, 24 Aug 2015 21:50:50 +0200 Subject: [PATCH 1/3] Rename get_len() to get_meta() The functions is useful for all kinds of fat pointers, but get_len() just feels so wrong for trait object fat pointers. Let's use get_meta() because that's rather neutral. --- src/librustc_trans/trans/_match.rs | 12 ++++++------ src/librustc_trans/trans/base.rs | 8 ++++---- src/librustc_trans/trans/callee.rs | 2 +- src/librustc_trans/trans/expr.rs | 12 ++++++------ src/librustc_trans/trans/foreign.rs | 2 +- src/librustc_trans/trans/glue.rs | 2 +- src/librustc_trans/trans/intrinsic.rs | 2 +- src/librustc_trans/trans/tvec.rs | 2 +- 8 files changed, 21 insertions(+), 21 deletions(-) diff --git a/src/librustc_trans/trans/_match.rs b/src/librustc_trans/trans/_match.rs index bd7c67fa8bb..bd3e077aa55 100644 --- a/src/librustc_trans/trans/_match.rs +++ b/src/librustc_trans/trans/_match.rs @@ -886,9 +886,9 @@ fn compare_values<'blk, 'tcx>(cx: Block<'blk, 'tcx>, &format!("comparison of `{}`", rhs_t), StrEqFnLangItem); let lhs_data = Load(cx, expr::get_dataptr(cx, lhs)); - let lhs_len = Load(cx, expr::get_len(cx, lhs)); + let lhs_len = Load(cx, expr::get_meta(cx, lhs)); let rhs_data = Load(cx, expr::get_dataptr(cx, rhs)); - let rhs_len = Load(cx, expr::get_len(cx, rhs)); + let rhs_len = Load(cx, expr::get_meta(cx, rhs)); callee::trans_lang_call(cx, did, &[lhs_data, lhs_len, rhs_data, rhs_len], None, debug_loc) } @@ -910,14 +910,14 @@ fn compare_values<'blk, 'tcx>(cx: Block<'blk, 'tcx>, let rhs_str = alloc_ty(cx, ty_str_slice, "rhs_str"); Store(cx, GEPi(cx, rhs, &[0, 0]), expr::get_dataptr(cx, rhs_str)); - Store(cx, C_uint(cx.ccx(), pat_len), expr::get_len(cx, rhs_str)); + Store(cx, C_uint(cx.ccx(), pat_len), expr::get_meta(cx, rhs_str)); let lhs_str; if val_ty(lhs) == val_ty(rhs) { // Both the discriminant and the pattern are thin pointers lhs_str = alloc_ty(cx, ty_str_slice, "lhs_str"); Store(cx, GEPi(cx, lhs, &[0, 0]), expr::get_dataptr(cx, lhs_str)); - Store(cx, C_uint(cx.ccx(), pat_len), expr::get_len(cx, lhs_str)); + Store(cx, C_uint(cx.ccx(), pat_len), expr::get_meta(cx, lhs_str)); } else { // The discriminant is a fat pointer @@ -1196,9 +1196,9 @@ fn compile_submatch_continue<'a, 'p, 'blk, 'tcx>(mut bcx: Block<'blk, 'tcx>, let llty = type_of::type_of(bcx.ccx(), unsized_ty); let scratch = alloca_no_lifetime(bcx, llty, "__struct_field_fat_ptr"); let data = adt::trans_field_ptr(bcx, &*repr, struct_val, 0, arg_count); - let len = Load(bcx, expr::get_len(bcx, val.val)); + let len = Load(bcx, expr::get_meta(bcx, val.val)); Store(bcx, data, expr::get_dataptr(bcx, scratch)); - Store(bcx, len, expr::get_len(bcx, scratch)); + Store(bcx, len, expr::get_meta(bcx, scratch)); field_vals.push(scratch); } _ => {} diff --git a/src/librustc_trans/trans/base.rs b/src/librustc_trans/trans/base.rs index 6be2bb08464..0f53255197e 100644 --- a/src/librustc_trans/trans/base.rs +++ b/src/librustc_trans/trans/base.rs @@ -835,7 +835,7 @@ pub fn store_ty<'blk, 'tcx>(cx: Block<'blk, 'tcx>, v: ValueRef, dst: ValueRef, t if common::type_is_fat_ptr(cx.tcx(), t) { Store(cx, ExtractValue(cx, v, abi::FAT_PTR_ADDR), expr::get_dataptr(cx, dst)); - Store(cx, ExtractValue(cx, v, abi::FAT_PTR_EXTRA), expr::get_len(cx, dst)); + Store(cx, ExtractValue(cx, v, abi::FAT_PTR_EXTRA), expr::get_meta(cx, dst)); } else { let store = Store(cx, from_arg_ty(cx, v, t), to_arg_ty_ptr(cx, dst, t)); unsafe { @@ -1389,7 +1389,7 @@ pub fn create_datums_for_fn_args<'a, 'tcx>(mut bcx: Block<'a, 'tcx>, arg_scope_id, (data, extra), |(data, extra), bcx, dst| { Store(bcx, data, expr::get_dataptr(bcx, dst)); - Store(bcx, extra, expr::get_len(bcx, dst)); + Store(bcx, extra, expr::get_meta(bcx, dst)); bcx })) } else { @@ -1420,7 +1420,7 @@ pub fn create_datums_for_fn_args<'a, 'tcx>(mut bcx: Block<'a, 'tcx>, let data = get_param(bcx.fcx.llfn, idx); let extra = get_param(bcx.fcx.llfn, idx + 1); Store(bcx, data, expr::get_dataptr(bcx, lldest)); - Store(bcx, extra, expr::get_len(bcx, lldest)); + Store(bcx, extra, expr::get_meta(bcx, lldest)); idx += 2; } else { let datum = datum::Datum::new( @@ -1822,7 +1822,7 @@ fn trans_enum_variant_or_tuple_like_struct<'a, 'tcx>(ccx: &CrateContext<'a, 'tcx i); if common::type_is_fat_ptr(bcx.tcx(), arg_ty) { Store(bcx, get_param(fcx.llfn, llarg_idx), expr::get_dataptr(bcx, lldestptr)); - Store(bcx, get_param(fcx.llfn, llarg_idx + 1), expr::get_len(bcx, lldestptr)); + Store(bcx, get_param(fcx.llfn, llarg_idx + 1), expr::get_meta(bcx, lldestptr)); llarg_idx += 2; } else { let arg = get_param(fcx.llfn, llarg_idx); diff --git a/src/librustc_trans/trans/callee.rs b/src/librustc_trans/trans/callee.rs index d201114fd82..92b9ed9c3fb 100644 --- a/src/librustc_trans/trans/callee.rs +++ b/src/librustc_trans/trans/callee.rs @@ -1128,7 +1128,7 @@ pub fn trans_arg_datum<'blk, 'tcx>(bcx: Block<'blk, 'tcx>, if common::type_is_fat_ptr(bcx.tcx(), formal_arg_ty) { llargs.push(Load(bcx, expr::get_dataptr(bcx, val))); - llargs.push(Load(bcx, expr::get_len(bcx, val))); + llargs.push(Load(bcx, expr::get_meta(bcx, val))); } else { llargs.push(val); } diff --git a/src/librustc_trans/trans/expr.rs b/src/librustc_trans/trans/expr.rs index 8d1d9cb1d01..68f79dc386a 100644 --- a/src/librustc_trans/trans/expr.rs +++ b/src/librustc_trans/trans/expr.rs @@ -282,7 +282,7 @@ pub fn trans<'blk, 'tcx>(bcx: Block<'blk, 'tcx>, return DatumBlock::new(bcx, datum); } -pub fn get_len(bcx: Block, fat_ptr: ValueRef) -> ValueRef { +pub fn get_meta(bcx: Block, fat_ptr: ValueRef) -> ValueRef { GEPi(bcx, fat_ptr, &[0, abi::FAT_PTR_EXTRA]) } @@ -292,7 +292,7 @@ pub fn get_dataptr(bcx: Block, fat_ptr: ValueRef) -> ValueRef { pub fn copy_fat_ptr(bcx: Block, src_ptr: ValueRef, dst_ptr: ValueRef) { Store(bcx, Load(bcx, get_dataptr(bcx, src_ptr)), get_dataptr(bcx, dst_ptr)); - Store(bcx, Load(bcx, get_len(bcx, src_ptr)), get_len(bcx, dst_ptr)); + Store(bcx, Load(bcx, get_meta(bcx, src_ptr)), get_meta(bcx, dst_ptr)); } /// Retrieve the information we are losing (making dynamic) in an unsizing @@ -454,7 +454,7 @@ fn coerce_unsized<'blk, 'tcx>(bcx: Block<'blk, 'tcx>, // load out the original data pointer so we can repackage // it. (Load(bcx, get_dataptr(bcx, source.val)), - Some(Load(bcx, get_len(bcx, source.val)))) + Some(Load(bcx, get_meta(bcx, source.val)))) } else { let val = if source.kind.is_by_ref() { load_ty(bcx, source.val, source.ty) @@ -473,7 +473,7 @@ fn coerce_unsized<'blk, 'tcx>(bcx: Block<'blk, 'tcx>, let base = PointerCast(bcx, base, ptr_ty); Store(bcx, base, get_dataptr(bcx, target.val)); - Store(bcx, info, get_len(bcx, target.val)); + Store(bcx, info, get_meta(bcx, target.val)); } // This can be extended to enums and tuples in the future. @@ -729,8 +729,8 @@ fn trans_field<'blk, 'tcx, F>(bcx: Block<'blk, 'tcx>, } else { let scratch = rvalue_scratch_datum(bcx, d.ty, ""); Store(bcx, d.val, get_dataptr(bcx, scratch.val)); - let info = Load(bcx, get_len(bcx, base_datum.val)); - Store(bcx, info, get_len(bcx, scratch.val)); + let info = Load(bcx, get_meta(bcx, base_datum.val)); + Store(bcx, info, get_meta(bcx, scratch.val)); // Always generate an lvalue datum, because this pointer doesn't own // the data and cleanup is scheduled elsewhere. diff --git a/src/librustc_trans/trans/foreign.rs b/src/librustc_trans/trans/foreign.rs index b316d105d0c..929061b08b8 100644 --- a/src/librustc_trans/trans/foreign.rs +++ b/src/librustc_trans/trans/foreign.rs @@ -302,7 +302,7 @@ pub fn trans_native_call<'blk, 'tcx>(bcx: Block<'blk, 'tcx>, "__arg"); if type_is_fat_ptr(ccx.tcx(), passed_arg_tys[i]) { Store(bcx, llargs_rust[i + offset], expr::get_dataptr(bcx, scratch)); - Store(bcx, llargs_rust[i + offset + 1], expr::get_len(bcx, scratch)); + Store(bcx, llargs_rust[i + offset + 1], expr::get_meta(bcx, scratch)); offset += 1; } else { base::store_ty(bcx, llarg_rust, scratch, passed_arg_tys[i]); diff --git a/src/librustc_trans/trans/glue.rs b/src/librustc_trans/trans/glue.rs index fe20ae2cf39..d049d51d085 100644 --- a/src/librustc_trans/trans/glue.rs +++ b/src/librustc_trans/trans/glue.rs @@ -389,7 +389,7 @@ fn trans_struct_drop<'blk, 'tcx>(bcx: Block<'blk, 'tcx>, let (_, bcx) = if type_is_sized(bcx.tcx(), t) { invoke(bcx, dtor_addr, &[v0], dtor_ty, DebugLoc::None) } else { - let args = [Load(bcx, expr::get_dataptr(bcx, v0)), Load(bcx, expr::get_len(bcx, v0))]; + let args = [Load(bcx, expr::get_dataptr(bcx, v0)), Load(bcx, expr::get_meta(bcx, v0))]; invoke(bcx, dtor_addr, &args, dtor_ty, DebugLoc::None) }; diff --git a/src/librustc_trans/trans/intrinsic.rs b/src/librustc_trans/trans/intrinsic.rs index ded748e9894..a7f99be0762 100644 --- a/src/librustc_trans/trans/intrinsic.rs +++ b/src/librustc_trans/trans/intrinsic.rs @@ -449,7 +449,7 @@ pub fn trans_intrinsic_call<'a, 'blk, 'tcx>(mut bcx: Block<'blk, 'tcx>, } else { let scratch = rvalue_scratch_datum(bcx, tp_ty, "tmp"); Store(bcx, llargs[0], expr::get_dataptr(bcx, scratch.val)); - Store(bcx, llargs[1], expr::get_len(bcx, scratch.val)); + Store(bcx, llargs[1], expr::get_meta(bcx, scratch.val)); fcx.schedule_lifetime_end(cleanup::CustomScope(cleanup_scope), scratch.val); scratch.val }; diff --git a/src/librustc_trans/trans/tvec.rs b/src/librustc_trans/trans/tvec.rs index a9abc61c274..397c9c74835 100644 --- a/src/librustc_trans/trans/tvec.rs +++ b/src/librustc_trans/trans/tvec.rs @@ -310,7 +310,7 @@ pub fn get_base_and_len<'blk, 'tcx>(bcx: Block<'blk, 'tcx>, ty::TyArray(_, n) => get_fixed_base_and_len(bcx, llval, n), ty::TySlice(_) | ty::TyStr => { let base = Load(bcx, expr::get_dataptr(bcx, llval)); - let len = Load(bcx, expr::get_len(bcx, llval)); + let len = Load(bcx, expr::get_meta(bcx, llval)); (base, len) } From 110a34cd84585b9f8853331bd6df9f6dc9989220 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Steinbrink?= Date: Mon, 24 Aug 2015 22:05:20 +0200 Subject: [PATCH 2/3] Use get_dataptr() and get_meta() where appropriate --- src/librustc_trans/trans/_match.rs | 10 ++++------ src/librustc_trans/trans/base.rs | 8 ++++---- src/librustc_trans/trans/glue.rs | 9 ++++----- src/librustc_trans/trans/meth.rs | 5 ++--- src/librustc_trans/trans/tvec.rs | 5 ++--- 5 files changed, 16 insertions(+), 21 deletions(-) diff --git a/src/librustc_trans/trans/_match.rs b/src/librustc_trans/trans/_match.rs index bd3e077aa55..dc96aa40f47 100644 --- a/src/librustc_trans/trans/_match.rs +++ b/src/librustc_trans/trans/_match.rs @@ -188,7 +188,6 @@ pub use self::TransBindingMode::*; use self::Opt::*; use self::FailureHandler::*; -use back::abi; use llvm::{ValueRef, BasicBlockRef}; use middle::check_match::StaticInliner; use middle::check_match; @@ -730,9 +729,8 @@ fn bind_subslice_pat(bcx: Block, let slice_ty = bcx.tcx().mk_imm_ref(bcx.tcx().mk_region(ty::ReStatic), bcx.tcx().mk_slice(unit_ty)); let scratch = rvalue_scratch_datum(bcx, slice_ty, ""); - Store(bcx, slice_begin, - GEPi(bcx, scratch.val, &[0, abi::FAT_PTR_ADDR])); - Store(bcx, slice_len, GEPi(bcx, scratch.val, &[0, abi::FAT_PTR_EXTRA])); + Store(bcx, slice_begin, expr::get_dataptr(bcx, scratch.val)); + Store(bcx, slice_len, expr::get_meta(bcx, scratch.val)); scratch.val } @@ -909,14 +907,14 @@ fn compare_values<'blk, 'tcx>(cx: Block<'blk, 'tcx>, let ty_str_slice = cx.tcx().mk_static_str(); let rhs_str = alloc_ty(cx, ty_str_slice, "rhs_str"); - Store(cx, GEPi(cx, rhs, &[0, 0]), expr::get_dataptr(cx, rhs_str)); + Store(cx, expr::get_dataptr(cx, rhs), expr::get_dataptr(cx, rhs_str)); Store(cx, C_uint(cx.ccx(), pat_len), expr::get_meta(cx, rhs_str)); let lhs_str; if val_ty(lhs) == val_ty(rhs) { // Both the discriminant and the pattern are thin pointers lhs_str = alloc_ty(cx, ty_str_slice, "lhs_str"); - Store(cx, GEPi(cx, lhs, &[0, 0]), expr::get_dataptr(cx, lhs_str)); + Store(cx, expr::get_dataptr(cx, lhs), expr::get_dataptr(cx, lhs_str)); Store(cx, C_uint(cx.ccx(), pat_len), expr::get_meta(cx, lhs_str)); } else { diff --git a/src/librustc_trans/trans/base.rs b/src/librustc_trans/trans/base.rs index 0f53255197e..955a777bbbe 100644 --- a/src/librustc_trans/trans/base.rs +++ b/src/librustc_trans/trans/base.rs @@ -403,8 +403,8 @@ pub fn iter_structural_ty<'blk, 'tcx, F>(cx: Block<'blk, 'tcx>, let (data_ptr, info) = if common::type_is_sized(cx.tcx(), t) { (av, None) } else { - let data = GEPi(cx, av, &[0, abi::FAT_PTR_ADDR]); - let info = GEPi(cx, av, &[0, abi::FAT_PTR_EXTRA]); + let data = expr::get_dataptr(cx, av); + let info = expr::get_meta(cx, av); (Load(cx, data), Some(Load(cx, info))) }; @@ -420,8 +420,8 @@ pub fn iter_structural_ty<'blk, 'tcx, F>(cx: Block<'blk, 'tcx>, llfld_a } else { let scratch = datum::rvalue_scratch_datum(cx, field_ty, "__fat_ptr_iter"); - Store(cx, llfld_a, GEPi(cx, scratch.val, &[0, abi::FAT_PTR_ADDR])); - Store(cx, info.unwrap(), GEPi(cx, scratch.val, &[0, abi::FAT_PTR_EXTRA])); + Store(cx, llfld_a, expr::get_dataptr(cx, scratch.val)); + Store(cx, info.unwrap(), expr::get_meta(cx, scratch.val)); scratch.val }; cx = f(cx, val, field_ty); diff --git a/src/librustc_trans/trans/glue.rs b/src/librustc_trans/trans/glue.rs index d049d51d085..5083829005b 100644 --- a/src/librustc_trans/trans/glue.rs +++ b/src/librustc_trans/trans/glue.rs @@ -13,7 +13,6 @@ // Code relating to drop glue. -use back::abi; use back::link::*; use llvm; use llvm::{ValueRef, get_param}; @@ -524,14 +523,14 @@ fn make_drop_glue<'blk, 'tcx>(bcx: Block<'blk, 'tcx>, v0: ValueRef, g: DropGlueK // a safe-guard, assert TyBox not used with TyContents. assert!(!skip_dtor); if !type_is_sized(bcx.tcx(), content_ty) { - let llval = GEPi(bcx, v0, &[0, abi::FAT_PTR_ADDR]); + let llval = expr::get_dataptr(bcx, v0); let llbox = Load(bcx, llval); let llbox_as_usize = PtrToInt(bcx, llbox, Type::int(bcx.ccx())); let drop_flag_not_dropped_already = ICmp(bcx, llvm::IntNE, llbox_as_usize, dropped_pattern, DebugLoc::None); with_cond(bcx, drop_flag_not_dropped_already, |bcx| { let bcx = drop_ty(bcx, v0, content_ty, DebugLoc::None); - let info = GEPi(bcx, v0, &[0, abi::FAT_PTR_EXTRA]); + let info = expr::get_meta(bcx, v0); let info = Load(bcx, info); let (llsize, llalign) = size_and_align_of_dst(bcx, content_ty, info); @@ -590,8 +589,8 @@ fn make_drop_glue<'blk, 'tcx>(bcx: Block<'blk, 'tcx>, v0: ValueRef, g: DropGlueK // versus without calling Drop::drop. Assert caller is // okay with always calling the Drop impl, if any. assert!(!skip_dtor); - let data_ptr = GEPi(bcx, v0, &[0, abi::FAT_PTR_ADDR]); - let vtable_ptr = Load(bcx, GEPi(bcx, v0, &[0, abi::FAT_PTR_EXTRA])); + let data_ptr = expr::get_dataptr(bcx, v0); + let vtable_ptr = Load(bcx, expr::get_meta(bcx, v0)); let dtor = Load(bcx, vtable_ptr); Call(bcx, dtor, diff --git a/src/librustc_trans/trans/meth.rs b/src/librustc_trans/trans/meth.rs index 3fafd6e7d01..a86ef17a166 100644 --- a/src/librustc_trans/trans/meth.rs +++ b/src/librustc_trans/trans/meth.rs @@ -9,7 +9,6 @@ // except according to those terms. use arena::TypedArena; -use back::abi; use back::link; use llvm::{ValueRef, get_params}; use middle::subst::{Subst, Substs}; @@ -445,8 +444,8 @@ fn trans_trait_callee<'blk, 'tcx>(bcx: Block<'blk, 'tcx>, self_datum.val }; - let llself = Load(bcx, GEPi(bcx, llval, &[0, abi::FAT_PTR_ADDR])); - let llvtable = Load(bcx, GEPi(bcx, llval, &[0, abi::FAT_PTR_EXTRA])); + let llself = Load(bcx, expr::get_dataptr(bcx, llval)); + let llvtable = Load(bcx, expr::get_meta(bcx, llval)); trans_trait_callee_from_llval(bcx, opaque_fn_ty, vtable_index, llself, llvtable) } diff --git a/src/librustc_trans/trans/tvec.rs b/src/librustc_trans/trans/tvec.rs index 397c9c74835..57e7cc4b02e 100644 --- a/src/librustc_trans/trans/tvec.rs +++ b/src/librustc_trans/trans/tvec.rs @@ -10,7 +10,6 @@ #![allow(non_camel_case_types)] -use back::abi; use llvm; use llvm::ValueRef; use trans::base::*; @@ -147,8 +146,8 @@ pub fn trans_lit_str<'blk, 'tcx>(bcx: Block<'blk, 'tcx>, let llbytes = C_uint(bcx.ccx(), bytes); let llcstr = C_cstr(bcx.ccx(), str_lit, false); let llcstr = consts::ptrcast(llcstr, Type::i8p(bcx.ccx())); - Store(bcx, llcstr, GEPi(bcx, lldest, &[0, abi::FAT_PTR_ADDR])); - Store(bcx, llbytes, GEPi(bcx, lldest, &[0, abi::FAT_PTR_EXTRA])); + Store(bcx, llcstr, expr::get_dataptr(bcx, lldest)); + Store(bcx, llbytes, expr::get_meta(bcx, lldest)); bcx } } From 5d9c250fe41c4b3639a1a21654a19b8264ba39cc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Steinbrink?= Date: Mon, 24 Aug 2015 22:51:57 +0200 Subject: [PATCH 3/3] Use StructGEP instead of GEPi where appropriate StructGEP seems clearer and probably does an even better job of the micro-optimization that we have in GEPi. --- src/librustc_trans/trans/adt.rs | 10 +++++----- src/librustc_trans/trans/base.rs | 2 +- src/librustc_trans/trans/closure.rs | 2 +- src/librustc_trans/trans/expr.rs | 4 ++-- src/librustc_trans/trans/foreign.rs | 8 ++++---- src/librustc_trans/trans/tvec.rs | 4 ++-- 6 files changed, 15 insertions(+), 15 deletions(-) diff --git a/src/librustc_trans/trans/adt.rs b/src/librustc_trans/trans/adt.rs index 0d34cce919a..46211e6bd01 100644 --- a/src/librustc_trans/trans/adt.rs +++ b/src/librustc_trans/trans/adt.rs @@ -892,7 +892,7 @@ pub fn trans_get_discr<'blk, 'tcx>(bcx: Block<'blk, 'tcx>, r: &Repr<'tcx>, let val = match *r { CEnum(ity, min, max) => load_discr(bcx, ity, scrutinee, min, max), General(ity, ref cases, _) => { - let ptr = GEPi(bcx, scrutinee, &[0, 0]); + let ptr = StructGEP(bcx, scrutinee, 0); load_discr(bcx, ity, ptr, 0, (cases.len() - 1) as Disr) } Univariant(..) => C_u8(bcx.ccx(), 0), @@ -986,13 +986,13 @@ pub fn trans_set_discr<'blk, 'tcx>(bcx: Block<'blk, 'tcx>, r: &Repr<'tcx>, Store(bcx, C_u8(bcx.ccx(), DTOR_NEEDED), ptr); } Store(bcx, C_integral(ll_inttype(bcx.ccx(), ity), discr as u64, true), - GEPi(bcx, val, &[0, 0])); + StructGEP(bcx, val, 0)); } Univariant(ref st, dtor) => { assert_eq!(discr, 0); if dtor_active(dtor) { Store(bcx, C_u8(bcx.ccx(), DTOR_NEEDED), - GEPi(bcx, val, &[0, st.fields.len() - 1])); + StructGEP(bcx, val, st.fields.len() - 1)); } } RawNullablePointer { nndiscr, nnty, ..} => { @@ -1091,7 +1091,7 @@ pub fn struct_field_ptr<'blk, 'tcx>(bcx: Block<'blk, 'tcx>, st: &Struct<'tcx>, v val }; - GEPi(bcx, val, &[0, ix]) + StructGEP(bcx, val, ix) } pub fn fold_variants<'blk, 'tcx, F>(bcx: Block<'blk, 'tcx>, @@ -1162,7 +1162,7 @@ pub fn trans_drop_flag_ptr<'blk, 'tcx>(mut bcx: Block<'blk, 'tcx>, let ptr_ty = bcx.tcx().mk_imm_ptr(tcx.dtor_type()); match *r { Univariant(ref st, dtor) if dtor_active(dtor) => { - let flag_ptr = GEPi(bcx, val, &[0, st.fields.len() - 1]); + let flag_ptr = StructGEP(bcx, val, st.fields.len() - 1); datum::immediate_rvalue_bcx(bcx, flag_ptr, ptr_ty).to_expr_datumblock() } General(_, _, dtor) if dtor_active(dtor) => { diff --git a/src/librustc_trans/trans/base.rs b/src/librustc_trans/trans/base.rs index 955a777bbbe..e8b669894a7 100644 --- a/src/librustc_trans/trans/base.rs +++ b/src/librustc_trans/trans/base.rs @@ -1415,7 +1415,7 @@ pub fn create_datums_for_fn_args<'a, 'tcx>(mut bcx: Block<'a, 'tcx>, llval| { for (j, &tupled_arg_ty) in tupled_arg_tys.iter().enumerate() { - let lldest = GEPi(bcx, llval, &[0, j]); + let lldest = StructGEP(bcx, llval, j); if common::type_is_fat_ptr(bcx.tcx(), tupled_arg_ty) { let data = get_param(bcx.fcx.llfn, idx); let extra = get_param(bcx.fcx.llfn, idx + 1); diff --git a/src/librustc_trans/trans/closure.rs b/src/librustc_trans/trans/closure.rs index d9787231096..d29a5f0f746 100644 --- a/src/librustc_trans/trans/closure.rs +++ b/src/librustc_trans/trans/closure.rs @@ -70,7 +70,7 @@ fn load_closure_environment<'blk, 'tcx>(bcx: Block<'blk, 'tcx>, let upvar_id = ty::UpvarId { var_id: freevar.def.local_node_id(), closure_expr_id: closure_id.node }; let upvar_capture = bcx.tcx().upvar_capture(upvar_id).unwrap(); - let mut upvar_ptr = GEPi(bcx, llenv, &[0, i]); + let mut upvar_ptr = StructGEP(bcx, llenv, i); let captured_by_ref = match upvar_capture { ty::UpvarCapture::ByValue => false, ty::UpvarCapture::ByRef(..) => { diff --git a/src/librustc_trans/trans/expr.rs b/src/librustc_trans/trans/expr.rs index 68f79dc386a..273192e9714 100644 --- a/src/librustc_trans/trans/expr.rs +++ b/src/librustc_trans/trans/expr.rs @@ -283,11 +283,11 @@ pub fn trans<'blk, 'tcx>(bcx: Block<'blk, 'tcx>, } pub fn get_meta(bcx: Block, fat_ptr: ValueRef) -> ValueRef { - GEPi(bcx, fat_ptr, &[0, abi::FAT_PTR_EXTRA]) + StructGEP(bcx, fat_ptr, abi::FAT_PTR_EXTRA) } pub fn get_dataptr(bcx: Block, fat_ptr: ValueRef) -> ValueRef { - GEPi(bcx, fat_ptr, &[0, abi::FAT_PTR_ADDR]) + StructGEP(bcx, fat_ptr, abi::FAT_PTR_ADDR) } pub fn copy_fat_ptr(bcx: Block, src_ptr: ValueRef, dst_ptr: ValueRef) { diff --git a/src/librustc_trans/trans/foreign.rs b/src/librustc_trans/trans/foreign.rs index 929061b08b8..b1c85ce54b7 100644 --- a/src/librustc_trans/trans/foreign.rs +++ b/src/librustc_trans/trans/foreign.rs @@ -821,10 +821,10 @@ pub fn trans_rust_fn_with_foreign_abi<'a, 'tcx>(ccx: &CrateContext<'a, 'tcx>, i, ccx.tn().val_to_string(llrust_arg)); if type_is_fat_ptr(ccx.tcx(), rust_ty) { let next_llrust_ty = rust_param_tys.next().expect("Not enough parameter types!"); - llrust_args.push(builder.load(builder.bitcast(builder.gepi( - llrust_arg, &[0, abi::FAT_PTR_ADDR]), llrust_ty.ptr_to()))); - llrust_args.push(builder.load(builder.bitcast(builder.gepi( - llrust_arg, &[0, abi::FAT_PTR_EXTRA]), next_llrust_ty.ptr_to()))); + llrust_args.push(builder.load(builder.bitcast(builder.struct_gep( + llrust_arg, abi::FAT_PTR_ADDR), llrust_ty.ptr_to()))); + llrust_args.push(builder.load(builder.bitcast(builder.struct_gep( + llrust_arg, abi::FAT_PTR_EXTRA), next_llrust_ty.ptr_to()))); } else { llrust_args.push(llrust_arg); } diff --git a/src/librustc_trans/trans/tvec.rs b/src/librustc_trans/trans/tvec.rs index 57e7cc4b02e..f3a3268bebb 100644 --- a/src/librustc_trans/trans/tvec.rs +++ b/src/librustc_trans/trans/tvec.rs @@ -66,7 +66,7 @@ pub fn trans_fixed_vstore<'blk, 'tcx>(bcx: Block<'blk, 'tcx>, SaveIn(lldest) => { // lldest will have type *[T x N], but we want the type *T, // so use GEP to convert: - let lldest = GEPi(bcx, lldest, &[0, 0]); + let lldest = StructGEP(bcx, lldest, 0); write_content(bcx, &vt, expr, expr, SaveIn(lldest)) } }; @@ -122,7 +122,7 @@ pub fn trans_slice_vec<'blk, 'tcx>(bcx: Block<'blk, 'tcx>, // llfixed has type *[T x N], but we want the type *T, // so use GEP to convert bcx = write_content(bcx, &vt, slice_expr, content_expr, - SaveIn(GEPi(bcx, llfixed, &[0, 0]))); + SaveIn(StructGEP(bcx, llfixed, 0))); }; immediate_rvalue_bcx(bcx, llfixed, vec_ty).to_expr_datumblock()