4 // min-llvm-version: 15.0
8 // CHECK-LABEL: @vec_zero_bytes
10 pub fn vec_zero_bytes(n: usize) -> Vec<u8> {
11 // CHECK-NOT: call {{.*}}alloc::vec::from_elem
12 // CHECK-NOT: call {{.*}}reserve
13 // CHECK-NOT: call {{.*}}__rust_alloc(
14 // CHECK-NOT: call {{.*}}llvm.memset
16 // CHECK: call {{.*}}__rust_alloc_zeroed(
18 // CHECK-NOT: call {{.*}}alloc::vec::from_elem
19 // CHECK-NOT: call {{.*}}reserve
20 // CHECK-NOT: call {{.*}}__rust_alloc(
21 // CHECK-NOT: call {{.*}}llvm.memset
27 // CHECK-LABEL: @vec_one_bytes
29 pub fn vec_one_bytes(n: usize) -> Vec<u8> {
30 // CHECK-NOT: call {{.*}}alloc::vec::from_elem
31 // CHECK-NOT: call {{.*}}reserve
32 // CHECK-NOT: call {{.*}}__rust_alloc_zeroed(
34 // CHECK: call {{.*}}__rust_alloc(
35 // CHECK: call {{.*}}llvm.memset
37 // CHECK-NOT: call {{.*}}alloc::vec::from_elem
38 // CHECK-NOT: call {{.*}}reserve
39 // CHECK-NOT: call {{.*}}__rust_alloc_zeroed(
45 // CHECK-LABEL: @vec_zero_scalar
47 pub fn vec_zero_scalar(n: usize) -> Vec<i32> {
48 // CHECK-NOT: call {{.*}}alloc::vec::from_elem
49 // CHECK-NOT: call {{.*}}reserve
50 // CHECK-NOT: call {{.*}}__rust_alloc(
52 // CHECK: call {{.*}}__rust_alloc_zeroed(
54 // CHECK-NOT: call {{.*}}alloc::vec::from_elem
55 // CHECK-NOT: call {{.*}}reserve
56 // CHECK-NOT: call {{.*}}__rust_alloc(
62 // CHECK-LABEL: @vec_one_scalar
64 pub fn vec_one_scalar(n: usize) -> Vec<i32> {
65 // CHECK-NOT: call {{.*}}alloc::vec::from_elem
66 // CHECK-NOT: call {{.*}}reserve
67 // CHECK-NOT: call {{.*}}__rust_alloc_zeroed(
69 // CHECK: call {{.*}}__rust_alloc(
71 // CHECK-NOT: call {{.*}}alloc::vec::from_elem
72 // CHECK-NOT: call {{.*}}reserve
73 // CHECK-NOT: call {{.*}}__rust_alloc_zeroed(
79 // CHECK-LABEL: @vec_zero_rgb48
81 pub fn vec_zero_rgb48(n: usize) -> Vec<[u16; 3]> {
82 // CHECK-NOT: call {{.*}}alloc::vec::from_elem
83 // CHECK-NOT: call {{.*}}reserve
84 // CHECK-NOT: call {{.*}}__rust_alloc(
86 // CHECK: call {{.*}}__rust_alloc_zeroed(
88 // CHECK-NOT: call {{.*}}alloc::vec::from_elem
89 // CHECK-NOT: call {{.*}}reserve
90 // CHECK-NOT: call {{.*}}__rust_alloc(
96 // CHECK-LABEL: @vec_zero_array_16
98 pub fn vec_zero_array_16(n: usize) -> Vec<[i64; 16]> {
99 // CHECK-NOT: call {{.*}}alloc::vec::from_elem
100 // CHECK-NOT: call {{.*}}reserve
101 // CHECK-NOT: call {{.*}}__rust_alloc(
103 // CHECK: call {{.*}}__rust_alloc_zeroed(
105 // CHECK-NOT: call {{.*}}alloc::vec::from_elem
106 // CHECK-NOT: call {{.*}}reserve
107 // CHECK-NOT: call {{.*}}__rust_alloc(
113 // CHECK-LABEL: @vec_zero_tuple
115 pub fn vec_zero_tuple(n: usize) -> Vec<(i16, u8, char)> {
116 // CHECK-NOT: call {{.*}}alloc::vec::from_elem
117 // CHECK-NOT: call {{.*}}reserve
118 // CHECK-NOT: call {{.*}}__rust_alloc(
120 // CHECK: call {{.*}}__rust_alloc_zeroed(
122 // CHECK-NOT: call {{.*}}alloc::vec::from_elem
123 // CHECK-NOT: call {{.*}}reserve
124 // CHECK-NOT: call {{.*}}__rust_alloc(
127 vec![(0, 0, '\0'); n]
130 // CHECK-LABEL: @vec_non_zero_tuple
132 pub fn vec_non_zero_tuple(n: usize) -> Vec<(i16, u8, char)> {
133 // CHECK-NOT: call {{.*}}alloc::vec::from_elem
134 // CHECK-NOT: call {{.*}}reserve
135 // CHECK-NOT: call {{.*}}__rust_alloc_zeroed(
137 // CHECK: call {{.*}}__rust_alloc(
139 // CHECK-NOT: call {{.*}}alloc::vec::from_elem
140 // CHECK-NOT: call {{.*}}reserve
141 // CHECK-NOT: call {{.*}}__rust_alloc_zeroed(
147 // Ensure that __rust_alloc_zeroed gets the right attributes for LLVM to optimize it away.
148 // CHECK: declare noalias ptr @__rust_alloc_zeroed(i64, i64 allocalign) unnamed_addr [[RUST_ALLOC_ZEROED_ATTRS:#[0-9]+]]
150 // CHECK-DAG: attributes [[RUST_ALLOC_ZEROED_ATTRS]] = { {{.*}} allockind("alloc,zeroed,aligned") allocsize(0) uwtable "alloc-family"="__rust_alloc" {{.*}} }