rustc: encode scalar pairs in layout ABI.
This commit is contained in:
parent
f1b7cd9925
commit
cdeb4b0d25
15 changed files with 267 additions and 138 deletions
|
|
@ -24,9 +24,9 @@ pub fn helper(_: usize) {
|
|||
pub fn no_op_slice_adjustment(x: &[u8]) -> &[u8] {
|
||||
// We used to generate an extra alloca and memcpy for the block's trailing expression value, so
|
||||
// check that we copy directly to the return value slot
|
||||
// CHECK: %0 = insertvalue { [0 x i8], [0 x i8]*, [0 x i8], [[USIZE]], [0 x i8] } undef, [0 x i8]* %x.0, 1
|
||||
// CHECK: %1 = insertvalue { [0 x i8], [0 x i8]*, [0 x i8], [[USIZE]], [0 x i8] } %0, [[USIZE]] %x.1, 3
|
||||
// CHECK: ret { [0 x i8], [0 x i8]*, [0 x i8], [[USIZE]], [0 x i8] } %1
|
||||
// CHECK: %0 = insertvalue { [0 x i8]*, [[USIZE]] } undef, [0 x i8]* %x.0, 0
|
||||
// CHECK: %1 = insertvalue { [0 x i8]*, [[USIZE]] } %0, [[USIZE]] %x.1, 1
|
||||
// CHECK: ret { [0 x i8]*, [[USIZE]] } %1
|
||||
{ x }
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -133,7 +133,7 @@ pub fn trait_borrow(_: &Drop) {
|
|||
pub fn trait_box(_: Box<Drop>) {
|
||||
}
|
||||
|
||||
// CHECK: { [0 x i8], [0 x i16]*, [0 x i8], [[USIZE]], [0 x i8] } @return_slice([0 x i16]* noalias nonnull readonly %x.0, [[USIZE]] %x.1)
|
||||
// CHECK: { [0 x i16]*, [[USIZE]] } @return_slice([0 x i16]* noalias nonnull readonly %x.0, [[USIZE]] %x.1)
|
||||
#[no_mangle]
|
||||
pub fn return_slice(x: &[u16]) -> &[u16] {
|
||||
x
|
||||
|
|
|
|||
|
|
@ -54,9 +54,6 @@ pub struct PackedPair(u8, u32);
|
|||
// CHECK-LABEL: @pkd_pair
|
||||
#[no_mangle]
|
||||
pub fn pkd_pair(pair1: &mut PackedPair, pair2: &mut PackedPair) {
|
||||
// CHECK: [[V1:%[a-z0-9]+]] = load i8, i8* %{{.*}}, align 1
|
||||
// CHECK: [[V2:%[a-z0-9]+]] = load i32, i32* %{{.*}}, align 1
|
||||
// CHECK: store i8 [[V1]], i8* {{.*}}, align 1
|
||||
// CHECK: store i32 [[V2]], i32* {{.*}}, align 1
|
||||
// CHECK: call void @llvm.memcpy.{{.*}}(i8* %{{.*}}, i8* %{{.*}}, i{{[0-9]+}} 5, i32 1, i1 false)
|
||||
*pair2 = *pair1;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -24,9 +24,9 @@ pub fn helper(_: usize) {
|
|||
pub fn ref_dst(s: &[u8]) {
|
||||
// We used to generate an extra alloca and memcpy to ref the dst, so check that we copy
|
||||
// directly to the alloca for "x"
|
||||
// CHECK: [[X0:%[0-9]+]] = bitcast { [0 x i8], [0 x i8]*, [0 x i8], [[USIZE]], [0 x i8] }* %x to [0 x i8]**
|
||||
// CHECK: [[X0:%[0-9]+]] = bitcast { [0 x i8]*, [[USIZE]] }* %x to [0 x i8]**
|
||||
// CHECK: store [0 x i8]* %s.0, [0 x i8]** [[X0]]
|
||||
// CHECK: [[X1:%[0-9]+]] = getelementptr {{.*}} { [0 x i8], [0 x i8]*, [0 x i8], [[USIZE]], [0 x i8] }* %x, i32 0, i32 3
|
||||
// CHECK: [[X1:%[0-9]+]] = getelementptr {{.*}} { [0 x i8]*, [[USIZE]] }* %x, i32 0, i32 1
|
||||
// CHECK: store [[USIZE]] %s.1, [[USIZE]]* [[X1]]
|
||||
|
||||
let x = &*s;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue