Björn Steinbrink | 6773675 | 2015-05-24 16:07:52 | [diff] [blame] | 1 | // compile-flags: -C no-prepopulate-passes |
Simon Jakobi | 3ea62cb5 | 2021-04-03 11:05:11 | [diff] [blame] | 2 | // |
Björn Steinbrink | 6773675 | 2015-05-24 16:07:52 | [diff] [blame] | 3 | |
Richard Diamond | 9a24025 | 2015-09-15 21:22:16 | [diff] [blame] | 4 | #![crate_type = "lib"] |
| 5 | |
Björn Steinbrink | 6773675 | 2015-05-24 16:07:52 | [diff] [blame] | 6 | pub struct Bytes { |
| 7 | a: u8, |
| 8 | b: u8, |
| 9 | c: u8, |
| 10 | d: u8, |
| 11 | } |
| 12 | |
| 13 | // CHECK-LABEL: small_array_alignment |
| 14 | // The array is stored as i32, but its alignment is lower, go with 1 byte to avoid target |
| 15 | // dependent alignment |
| 16 | #[no_mangle] |
Eduard Burtescu | bffb0de | 2016-03-06 12:28:11 | [diff] [blame] | 17 | pub fn small_array_alignment(x: &mut [i8; 4], y: [i8; 4]) { |
Eduard Burtescu | e252865 | 2016-06-07 21:35:01 | [diff] [blame] | 18 | // CHECK: [[TMP:%.+]] = alloca i32 |
Björn Steinbrink | 0473a4f | 2017-10-11 18:49:36 | [diff] [blame] | 19 | // CHECK: %y = alloca [4 x i8] |
Nikita Popov | 4d7ff4e | 2022-02-21 10:21:23 | [diff] [blame] | 20 | // CHECK: store i32 %0, {{i32\*|ptr}} [[TMP]] |
| 21 | // CHECK: call void @llvm.memcpy.{{.*}}({{i8\*|ptr}} align 1 {{.+}}, {{i8\*|ptr}} align 4 {{.+}}, i{{[0-9]+}} 4, i1 false) |
Eduard Burtescu | bffb0de | 2016-03-06 12:28:11 | [diff] [blame] | 22 | *x = y; |
Björn Steinbrink | 6773675 | 2015-05-24 16:07:52 | [diff] [blame] | 23 | } |
| 24 | |
| 25 | // CHECK-LABEL: small_struct_alignment |
| 26 | // The struct is stored as i32, but its alignment is lower, go with 1 byte to avoid target |
| 27 | // dependent alignment |
| 28 | #[no_mangle] |
Eduard Burtescu | bffb0de | 2016-03-06 12:28:11 | [diff] [blame] | 29 | pub fn small_struct_alignment(x: &mut Bytes, y: Bytes) { |
Eduard Burtescu | e252865 | 2016-06-07 21:35:01 | [diff] [blame] | 30 | // CHECK: [[TMP:%.+]] = alloca i32 |
Björn Steinbrink | 0473a4f | 2017-10-11 18:49:36 | [diff] [blame] | 31 | // CHECK: %y = alloca %Bytes |
Nikita Popov | 4d7ff4e | 2022-02-21 10:21:23 | [diff] [blame] | 32 | // CHECK: store i32 %0, {{i32\*|ptr}} [[TMP]] |
| 33 | // CHECK: call void @llvm.memcpy.{{.*}}({{i8\*|ptr}} align 1 {{.+}}, {{i8\*|ptr}} align 4 {{.+}}, i{{[0-9]+}} 4, i1 false) |
Eduard Burtescu | bffb0de | 2016-03-06 12:28:11 | [diff] [blame] | 34 | *x = y; |
Björn Steinbrink | 6773675 | 2015-05-24 16:07:52 | [diff] [blame] | 35 | } |