Skip to content

Commit 2e93c0b

Browse files
committed
CodegenCx.size_and_align_of to CodegenCx.mem_pos_of
1 parent 72e98c0 commit 2e93c0b

File tree

3 files changed

+40
-33
lines changed

3 files changed

+40
-33
lines changed

src/librustc_codegen_llvm/debuginfo/metadata.rs

Lines changed: 28 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -338,7 +338,7 @@ fn fixed_vec_metadata(
338338

339339
return_if_metadata_created_in_meantime!(cx, unique_type_id);
340340

341-
let (size, align) = cx.size_and_align_of(array_or_slice_type);
341+
let mem_pos = cx.mem_pos_of(array_or_slice_type);
342342

343343
let upper_bound = match array_or_slice_type.kind {
344344
ty::Array(_, len) => len.eval_usize(cx.tcx, ty::ParamEnv::reveal_all()) as c_longlong,
@@ -353,8 +353,8 @@ fn fixed_vec_metadata(
353353
let metadata = unsafe {
354354
llvm::LLVMRustDIBuilderCreateArrayType(
355355
DIB(cx),
356-
size.bits(),
357-
align.bits() as u32,
356+
mem_pos.size.bits(),
357+
mem_pos.align.bits() as u32,
358358
element_type_metadata,
359359
subscripts)
360360
};
@@ -377,23 +377,24 @@ fn vec_slice_metadata(
377377

378378
let slice_type_name = compute_debuginfo_type_name(cx.tcx, slice_ptr_type, true);
379379

380-
let (pointer_size, pointer_align) = cx.size_and_align_of(data_ptr_type);
381-
let (usize_size, usize_align) = cx.size_and_align_of(cx.tcx.types.usize);
380+
let pointer_mem_pos = cx.mem_pos_of(data_ptr_type);
381+
let usize_mem_pos = cx.mem_pos_of(cx.tcx.types.usize);
382+
let pointer_stride = pointer_mem_pos.stride_to(usize_mem_pos.align).size;
382383

383384
let member_descriptions = vec![
384385
MemberDescription {
385386
name: "data_ptr".to_owned(),
386387
type_metadata: data_ptr_metadata,
387388
offset: Size::ZERO,
388-
mem_pos: MemoryPosition::new(pointer_size, pointer_align),
389+
mem_pos: pointer_mem_pos,
389390
flags: DIFlags::FlagZero,
390391
discriminant: None,
391392
},
392393
MemberDescription {
393394
name: "length".to_owned(),
394395
type_metadata: type_metadata(cx, cx.tcx.types.usize, span),
395-
offset: pointer_size,
396-
mem_pos: MemoryPosition::new(usize_size, usize_align),
396+
offset: pointer_stride,
397+
mem_pos: usize_mem_pos,
397398
flags: DIFlags::FlagZero,
398399
discriminant: None,
399400
},
@@ -652,7 +653,8 @@ pub fn type_metadata(
652653
// anything reading the debuginfo for a recursive
653654
// type is going to see *somthing* weird - the only
654655
// question is what exactly it will see
655-
let (size, align) = cx.size_and_align_of(t);
656+
let mem_pos = cx.mem_pos_of(t);
657+
let (size, align) = (mem_pos.size, mem_pos.align);
656658
llvm::LLVMRustDIBuilderCreateBasicType(
657659
DIB(cx),
658660
SmallCStr::new("<recur_type>").as_ptr(),
@@ -850,7 +852,8 @@ fn basic_type_metadata(cx: &CodegenCx<'ll, 'tcx>, t: Ty<'tcx>) -> &'ll DIType {
850852
_ => bug!("debuginfo::basic_type_metadata - t is invalid type")
851853
};
852854

853-
let (size, align) = cx.size_and_align_of(t);
855+
let mem_pos = cx.mem_pos_of(t);
856+
let (size, align) = (mem_pos.size, mem_pos.align);
854857
let name = SmallCStr::new(name);
855858
let ty_metadata = unsafe {
856859
llvm::LLVMRustDIBuilderCreateBasicType(
@@ -880,15 +883,15 @@ fn pointer_type_metadata(
880883
pointer_type: Ty<'tcx>,
881884
pointee_type_metadata: &'ll DIType,
882885
) -> &'ll DIType {
883-
let (pointer_size, pointer_align) = cx.size_and_align_of(pointer_type);
886+
let pointer_mem_pos = cx.mem_pos_of(pointer_type);
884887
let name = compute_debuginfo_type_name(cx.tcx, pointer_type, false);
885888
let name = SmallCStr::new(&name);
886889
unsafe {
887890
llvm::LLVMRustDIBuilderCreatePointerType(
888891
DIB(cx),
889892
pointee_type_metadata,
890-
pointer_size.bits(),
891-
pointer_align.bits() as u32,
893+
pointer_mem_pos.size.bits(),
894+
pointer_mem_pos.align.bits() as u32,
892895
name.as_ptr())
893896
}
894897
}
@@ -1183,12 +1186,12 @@ impl<'tcx> TupleMemberDescriptionFactory<'tcx> {
11831186
-> Vec<MemberDescription<'ll>> {
11841187
let layout = cx.layout_of(self.ty);
11851188
self.component_types.iter().enumerate().map(|(i, &component_type)| {
1186-
let (size, align) = cx.size_and_align_of(component_type);
1189+
let mem_pos = cx.mem_pos_of(component_type);
11871190
MemberDescription {
11881191
name: format!("__{}", i),
11891192
type_metadata: type_metadata(cx, component_type, self.span),
11901193
offset: layout.fields.offset(i),
1191-
mem_pos: MemoryPosition::new(size, align),
1194+
mem_pos,
11921195
flags: DIFlags::FlagZero,
11931196
discriminant: None,
11941197
}
@@ -1567,7 +1570,7 @@ impl VariantMemberDescriptionFactory<'ll, 'tcx> {
15671570
fn create_member_descriptions(&self, cx: &CodegenCx<'ll, 'tcx>)
15681571
-> Vec<MemberDescription<'ll>> {
15691572
self.args.iter().enumerate().map(|(i, &(ref name, ty))| {
1570-
let (size, align) = cx.size_and_align_of(ty);
1573+
let mem_pos = cx.mem_pos_of(ty);
15711574
MemberDescription {
15721575
name: name.to_string(),
15731576
type_metadata: if use_enum_fallback(cx) {
@@ -1581,7 +1584,7 @@ impl VariantMemberDescriptionFactory<'ll, 'tcx> {
15811584
type_metadata(cx, ty, self.span)
15821585
},
15831586
offset: self.offsets[i],
1584-
mem_pos:MemoryPosition::new(size, align),
1587+
mem_pos,
15851588
flags: DIFlags::FlagZero,
15861589
discriminant: None,
15871590
}
@@ -1919,7 +1922,9 @@ fn prepare_enum_metadata(
19191922
..
19201923
} => {
19211924
let discr_type = discr.value.to_ty(cx.tcx);
1922-
let (size, align) = cx.size_and_align_of(discr_type);
1925+
let mem_pos = cx.mem_pos_of(discr_type);
1926+
let (size, align) = (mem_pos.size, mem_pos.align);
1927+
19231928

19241929
let discr_metadata = basic_type_metadata(cx, discr_type);
19251930
unsafe {
@@ -2131,7 +2136,8 @@ fn create_struct_stub(
21312136
unique_type_id: UniqueTypeId,
21322137
containing_scope: Option<&'ll DIScope>,
21332138
) -> &'ll DICompositeType {
2134-
let (struct_size, struct_align) = cx.size_and_align_of(struct_type);
2139+
let struct_mem_pos = cx.mem_pos_of(struct_type);
2140+
let (struct_size, struct_align) = (struct_mem_pos.size, struct_mem_pos.align);
21352141

21362142
let name = SmallCStr::new(struct_type_name);
21372143
let unique_type_id = SmallCStr::new(
@@ -2169,7 +2175,7 @@ fn create_union_stub(
21692175
unique_type_id: UniqueTypeId,
21702176
containing_scope: &'ll DIScope,
21712177
) -> &'ll DICompositeType {
2172-
let (union_size, union_align) = cx.size_and_align_of(union_type);
2178+
let union_mem_pos = cx.mem_pos_of(union_type);
21732179

21742180
let name = SmallCStr::new(union_type_name);
21752181
let unique_type_id = SmallCStr::new(
@@ -2187,8 +2193,8 @@ fn create_union_stub(
21872193
name.as_ptr(),
21882194
unknown_file_metadata(cx),
21892195
UNKNOWN_LINE_NUMBER,
2190-
union_size.bits(),
2191-
union_align.bits() as u32,
2196+
union_mem_pos.size.bits(),
2197+
union_mem_pos.align.bits() as u32,
21922198
DIFlags::FlagZero,
21932199
Some(empty_array),
21942200
0, // RuntimeLang

src/librustc_codegen_llvm/intrinsic.rs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -769,17 +769,17 @@ fn copy_intrinsic(
769769
src: &'ll Value,
770770
count: &'ll Value,
771771
) {
772-
let (size, align) = bx.size_and_align_of(ty);
773-
let size = bx.mul(bx.const_usize(size.bytes()), count);
772+
let mem_pos = bx.mem_pos_of(ty);
773+
let size = bx.mul(bx.const_usize(mem_pos.size.bytes()), count);
774774
let flags = if volatile {
775775
MemFlags::VOLATILE
776776
} else {
777777
MemFlags::empty()
778778
};
779779
if allow_overlap {
780-
bx.memmove(dst, align, src, align, size, flags);
780+
bx.memmove(dst, mem_pos.align, src, mem_pos.align, size, flags);
781781
} else {
782-
bx.memcpy(dst, align, src, align, size, flags);
782+
bx.memcpy(dst, mem_pos.align, src, mem_pos.align, size, flags);
783783
}
784784
}
785785

@@ -791,14 +791,14 @@ fn memset_intrinsic(
791791
val: &'ll Value,
792792
count: &'ll Value
793793
) {
794-
let (size, align) = bx.size_and_align_of(ty);
795-
let size = bx.mul(bx.const_usize(size.bytes()), count);
794+
let mem_pos = bx.mem_pos_of(ty);
795+
let size = bx.mul(bx.const_usize(mem_pos.size.bytes()), count);
796796
let flags = if volatile {
797797
MemFlags::VOLATILE
798798
} else {
799799
MemFlags::empty()
800800
};
801-
bx.memset(dst, val, size, align, flags);
801+
bx.memset(dst, val, size, mem_pos.align, flags);
802802
}
803803

804804
fn try_intrinsic(

src/librustc_codegen_llvm/type_of.rs

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,9 @@ use crate::abi::{FnAbi};
22
use crate::common::*;
33
use crate::type_::Type;
44
use rustc::ty::{self, Ty, TypeFoldable};
5-
use rustc::ty::layout::{self, Align, LayoutOf, FnAbiExt, PointeeInfo, Size, TyLayout};
5+
use rustc::ty::layout::{
6+
self, Align, MemoryPosition, LayoutOf, FnAbiExt, PointeeInfo, Size, TyLayout
7+
};
68
use rustc_target::abi::TyLayoutMethods;
79
use rustc::ty::print::obsolete::DefPathBasedNames;
810
use rustc_codegen_ssa::traits::*;
@@ -167,9 +169,8 @@ impl<'a, 'tcx> CodegenCx<'a, 'tcx> {
167169
self.layout_of(ty).pref_pos.size
168170
}
169171

170-
pub fn size_and_align_of(&self, ty: Ty<'tcx>) -> (Size, Align) {
171-
let layout = self.layout_of(ty);
172-
(layout.pref_pos.size, layout.pref_pos.align.abi)
172+
pub fn mem_pos_of(&self, ty: Ty<'tcx>) -> MemoryPosition {
173+
self.layout_of(ty).pref_pos.mem_pos()
173174
}
174175
}
175176

0 commit comments

Comments
 (0)