]> git.lizzy.rs Git - rust.git/blob - tests/codegen/vec-calloc-llvm14.rs
Auto merge of #107843 - bjorn3:sync_cg_clif-2023-02-09, r=bjorn3
[rust.git] / tests / codegen / vec-calloc-llvm14.rs
1 // compile-flags: -O
2 // only-x86_64
3 // ignore-debug
4
5 #![crate_type = "lib"]
6
7 // CHECK-LABEL: @vec_zero_bytes
8 #[no_mangle]
9 pub fn vec_zero_bytes(n: usize) -> Vec<u8> {
10     // CHECK-NOT: call {{.*}}alloc::vec::from_elem
11     // CHECK-NOT: call {{.*}}reserve
12     // CHECK-NOT: call {{.*}}__rust_alloc(
13     // CHECK-NOT: call {{.*}}llvm.memset
14
15     // CHECK: call {{.*}}__rust_alloc_zeroed(
16
17     // CHECK-NOT: call {{.*}}alloc::vec::from_elem
18     // CHECK-NOT: call {{.*}}reserve
19     // CHECK-NOT: call {{.*}}__rust_alloc(
20     // CHECK-NOT: call {{.*}}llvm.memset
21
22     // CHECK: ret void
23     vec![0; n]
24 }
25
26 // CHECK-LABEL: @vec_one_bytes
27 #[no_mangle]
28 pub fn vec_one_bytes(n: usize) -> Vec<u8> {
29     // CHECK-NOT: call {{.*}}alloc::vec::from_elem
30     // CHECK-NOT: call {{.*}}reserve
31     // CHECK-NOT: call {{.*}}__rust_alloc_zeroed(
32
33     // CHECK: call {{.*}}__rust_alloc(
34     // CHECK: call {{.*}}llvm.memset
35
36     // CHECK-NOT: call {{.*}}alloc::vec::from_elem
37     // CHECK-NOT: call {{.*}}reserve
38     // CHECK-NOT: call {{.*}}__rust_alloc_zeroed(
39
40     // CHECK: ret void
41     vec![1; n]
42 }
43
44 // CHECK-LABEL: @vec_zero_scalar
45 #[no_mangle]
46 pub fn vec_zero_scalar(n: usize) -> Vec<i32> {
47     // CHECK-NOT: call {{.*}}alloc::vec::from_elem
48     // CHECK-NOT: call {{.*}}reserve
49     // CHECK-NOT: call {{.*}}__rust_alloc(
50
51     // CHECK: call {{.*}}__rust_alloc_zeroed(
52
53     // CHECK-NOT: call {{.*}}alloc::vec::from_elem
54     // CHECK-NOT: call {{.*}}reserve
55     // CHECK-NOT: call {{.*}}__rust_alloc(
56
57     // CHECK: ret void
58     vec![0; n]
59 }
60
61 // CHECK-LABEL: @vec_one_scalar
62 #[no_mangle]
63 pub fn vec_one_scalar(n: usize) -> Vec<i32> {
64     // CHECK-NOT: call {{.*}}alloc::vec::from_elem
65     // CHECK-NOT: call {{.*}}reserve
66     // CHECK-NOT: call {{.*}}__rust_alloc_zeroed(
67
68     // CHECK: call {{.*}}__rust_alloc(
69
70     // CHECK-NOT: call {{.*}}alloc::vec::from_elem
71     // CHECK-NOT: call {{.*}}reserve
72     // CHECK-NOT: call {{.*}}__rust_alloc_zeroed(
73
74     // CHECK: ret void
75     vec![1; n]
76 }
77
78 // CHECK-LABEL: @vec_zero_rgb48
79 #[no_mangle]
80 pub fn vec_zero_rgb48(n: usize) -> Vec<[u16; 3]> {
81     // CHECK-NOT: call {{.*}}alloc::vec::from_elem
82     // CHECK-NOT: call {{.*}}reserve
83     // CHECK-NOT: call {{.*}}__rust_alloc(
84
85     // CHECK: call {{.*}}__rust_alloc_zeroed(
86
87     // CHECK-NOT: call {{.*}}alloc::vec::from_elem
88     // CHECK-NOT: call {{.*}}reserve
89     // CHECK-NOT: call {{.*}}__rust_alloc(
90
91     // CHECK: ret void
92     vec![[0, 0, 0]; n]
93 }
94
95 // CHECK-LABEL: @vec_zero_array_16
96 #[no_mangle]
97 pub fn vec_zero_array_16(n: usize) -> Vec<[i64; 16]> {
98     // CHECK-NOT: call {{.*}}alloc::vec::from_elem
99     // CHECK-NOT: call {{.*}}reserve
100     // CHECK-NOT: call {{.*}}__rust_alloc(
101
102     // CHECK: call {{.*}}__rust_alloc_zeroed(
103
104     // CHECK-NOT: call {{.*}}alloc::vec::from_elem
105     // CHECK-NOT: call {{.*}}reserve
106     // CHECK-NOT: call {{.*}}__rust_alloc(
107
108     // CHECK: ret void
109     vec![[0_i64; 16]; n]
110 }
111
112 // CHECK-LABEL: @vec_zero_tuple
113 #[no_mangle]
114 pub fn vec_zero_tuple(n: usize) -> Vec<(i16, u8, char)> {
115     // CHECK-NOT: call {{.*}}alloc::vec::from_elem
116     // CHECK-NOT: call {{.*}}reserve
117     // CHECK-NOT: call {{.*}}__rust_alloc(
118
119     // CHECK: call {{.*}}__rust_alloc_zeroed(
120
121     // CHECK-NOT: call {{.*}}alloc::vec::from_elem
122     // CHECK-NOT: call {{.*}}reserve
123     // CHECK-NOT: call {{.*}}__rust_alloc(
124
125     // CHECK: ret void
126     vec![(0, 0, '\0'); n]
127 }
128
129 // CHECK-LABEL: @vec_non_zero_tuple
130 #[no_mangle]
131 pub fn vec_non_zero_tuple(n: usize) -> Vec<(i16, u8, char)> {
132     // CHECK-NOT: call {{.*}}alloc::vec::from_elem
133     // CHECK-NOT: call {{.*}}reserve
134     // CHECK-NOT: call {{.*}}__rust_alloc_zeroed(
135
136     // CHECK: call {{.*}}__rust_alloc(
137
138     // CHECK-NOT: call {{.*}}alloc::vec::from_elem
139     // CHECK-NOT: call {{.*}}reserve
140     // CHECK-NOT: call {{.*}}__rust_alloc_zeroed(
141
142     // CHECK: ret void
143     vec![(0, 0, 'A'); n]
144 }