Skip to content

Commit 646350f

Browse files
committed
Also put argument with ptr-size*2 on the stack
1 parent 7600c02 commit 646350f

File tree

3 files changed

+34
-7
lines changed

3 files changed

+34
-7
lines changed

compiler/rustc_middle/src/ty/layout.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -3189,7 +3189,7 @@ impl<'tcx> LayoutCx<'tcx, TyCtxt<'tcx>> {
31893189
let max_by_val_size = Pointer.size(self) * 2;
31903190
let size = arg.layout.size;
31913191

3192-
if arg.layout.is_unsized() || size >= max_by_val_size {
3192+
if arg.layout.is_unsized() || size > max_by_val_size {
31933193
arg.make_indirect();
31943194
}
31953195
}

src/test/codegen/array-clone.rs

+31-3
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,36 @@ pub fn array_clone(a: &[u8; 2]) -> [u8; 2] {
1717
#[no_mangle]
1818
pub fn array_clone_big(a: &[u8; 16]) -> [u8; 16] {
1919
// CHECK: getelementptr inbounds [16 x i8]
20-
// CHECK-NEXT: getelementptr inbounds [16 x i8]
21-
// CHECK-NEXT: {{.*}} call {{.*}} @llvm.memcpy.p0i8.p0i8.i64
22-
// CHECK-NEXT: ret void
20+
// CHECK: getelementptr inbounds [16 x i8]
21+
// CHECK: getelementptr inbounds [16 x i8]
22+
// CHECK: getelementptr inbounds [16 x i8]
23+
// CHECK: getelementptr inbounds [16 x i8]
24+
// CHECK: getelementptr inbounds [16 x i8]
25+
// CHECK: getelementptr inbounds [16 x i8]
26+
// CHECK: getelementptr inbounds [16 x i8]
27+
// CHECK: getelementptr inbounds [16 x i8]
28+
// CHECK: getelementptr inbounds [16 x i8]
29+
// CHECK: getelementptr inbounds [16 x i8]
30+
// CHECK: getelementptr inbounds [16 x i8]
31+
// CHECK: getelementptr inbounds [16 x i8]
32+
// CHECK: getelementptr inbounds [16 x i8]
33+
// CHECK: getelementptr inbounds [16 x i8]
34+
// CHECK: insertvalue [16 x i8]
35+
// CHECK: insertvalue [16 x i8]
36+
// CHECK: insertvalue [16 x i8]
37+
// CHECK: insertvalue [16 x i8]
38+
// CHECK: insertvalue [16 x i8]
39+
// CHECK: insertvalue [16 x i8]
40+
// CHECK: insertvalue [16 x i8]
41+
// CHECK: insertvalue [16 x i8]
42+
// CHECK: insertvalue [16 x i8]
43+
// CHECK: insertvalue [16 x i8]
44+
// CHECK: insertvalue [16 x i8]
45+
// CHECK: insertvalue [16 x i8]
46+
// CHECK: insertvalue [16 x i8]
47+
// CHECK: insertvalue [16 x i8]
48+
// CHECK: insertvalue [16 x i8]
49+
// CHECK: insertvalue [16 x i8]
50+
// CHECK: ret [16 x i8]
2351
a.clone()
2452
}

src/test/codegen/array-equality.rs

+2-3
Original file line numberDiff line numberDiff line change
@@ -42,9 +42,8 @@ pub fn array_eq_long(a: &[u16; 1234], b: &[u16; 1234]) -> bool {
4242
// CHECK-LABEL: @array_eq_zero
4343
#[no_mangle]
4444
pub fn array_eq_zero(x: [u16; 8]) -> bool {
45-
// CHECK-NEXT: start:
46-
// CHECK-NEXT: bitcast [8 x i16]
47-
// CHECK-NEXT: %[[CMP:.+]] = tail call i32 @{{bcmp|memcmp}}(i8* {{.*}} dereferenceable(16) %{{.+}}, i8* {{.*}} dereferenceable(16) {{.+}}, i64 16)
45+
// CHECK: bitcast [8 x i16]
46+
// CHECK-NEXT: %[[CMP:.+]] = call i32 @{{bcmp|memcmp}}(i8* {{.*}} dereferenceable(16) %{{.+}}, i8* {{.*}} dereferenceable(16) {{.+}}, i64 16)
4847
// CHECK-NEXT: %[[EQ:.+]] = icmp eq i32 %[[CMP]], 0
4948
// CHECK-NEXT: ret i1 %[[EQ]]
5049
x == [0; 8]

0 commit comments

Comments
 (0)