]> git.proxmox.com Git - rustc.git/blame - src/test/codegen/vec-calloc.rs
New upstream version 1.64.0+dfsg1
[rustc.git] / src / test / codegen / vec-calloc.rs
CommitLineData
04454e1e
FG
1// compile-flags: -O
2// only-x86_64
3// ignore-debug
064997fb 4// min-llvm-version: 15.0
04454e1e
FG
5
6#![crate_type = "lib"]
7
064997fb
FG
8// CHECK-LABEL: @vec_zero_bytes
9#[no_mangle]
10pub 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
15
16 // CHECK: call {{.*}}__rust_alloc_zeroed(
17
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
22
23 // CHECK: ret void
24 vec![0; n]
25}
26
27// CHECK-LABEL: @vec_one_bytes
28#[no_mangle]
29pub 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(
33
34 // CHECK: call {{.*}}__rust_alloc(
35 // CHECK: call {{.*}}llvm.memset
36
37 // CHECK-NOT: call {{.*}}alloc::vec::from_elem
38 // CHECK-NOT: call {{.*}}reserve
39 // CHECK-NOT: call {{.*}}__rust_alloc_zeroed(
40
41 // CHECK: ret void
42 vec![1; n]
43}
44
04454e1e
FG
45// CHECK-LABEL: @vec_zero_scalar
46#[no_mangle]
47pub fn vec_zero_scalar(n: usize) -> Vec<i32> {
064997fb
FG
48 // CHECK-NOT: call {{.*}}alloc::vec::from_elem
49 // CHECK-NOT: call {{.*}}reserve
50 // CHECK-NOT: call {{.*}}__rust_alloc(
51
52 // CHECK: call {{.*}}__rust_alloc_zeroed(
53
54 // CHECK-NOT: call {{.*}}alloc::vec::from_elem
55 // CHECK-NOT: call {{.*}}reserve
56 // CHECK-NOT: call {{.*}}__rust_alloc(
57
58 // CHECK: ret void
04454e1e
FG
59 vec![0; n]
60}
61
064997fb
FG
62// CHECK-LABEL: @vec_one_scalar
63#[no_mangle]
64pub 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(
68
69 // CHECK: call {{.*}}__rust_alloc(
70
71 // CHECK-NOT: call {{.*}}alloc::vec::from_elem
72 // CHECK-NOT: call {{.*}}reserve
73 // CHECK-NOT: call {{.*}}__rust_alloc_zeroed(
74
75 // CHECK: ret void
76 vec![1; n]
77}
78
04454e1e
FG
79// CHECK-LABEL: @vec_zero_rgb48
80#[no_mangle]
81pub fn vec_zero_rgb48(n: usize) -> Vec<[u16; 3]> {
064997fb
FG
82 // CHECK-NOT: call {{.*}}alloc::vec::from_elem
83 // CHECK-NOT: call {{.*}}reserve
84 // CHECK-NOT: call {{.*}}__rust_alloc(
85
86 // CHECK: call {{.*}}__rust_alloc_zeroed(
87
88 // CHECK-NOT: call {{.*}}alloc::vec::from_elem
89 // CHECK-NOT: call {{.*}}reserve
90 // CHECK-NOT: call {{.*}}__rust_alloc(
91
92 // CHECK: ret void
04454e1e
FG
93 vec![[0, 0, 0]; n]
94}
95
064997fb 96// CHECK-LABEL: @vec_zero_array_16
04454e1e 97#[no_mangle]
064997fb
FG
98pub 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(
102
103 // CHECK: call {{.*}}__rust_alloc_zeroed(
104
105 // CHECK-NOT: call {{.*}}alloc::vec::from_elem
106 // CHECK-NOT: call {{.*}}reserve
107 // CHECK-NOT: call {{.*}}__rust_alloc(
108
109 // CHECK: ret void
110 vec![[0_i64; 16]; n]
04454e1e 111}
064997fb
FG
112
113// CHECK-LABEL: @vec_zero_tuple
114#[no_mangle]
115pub 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(
119
120 // CHECK: call {{.*}}__rust_alloc_zeroed(
121
122 // CHECK-NOT: call {{.*}}alloc::vec::from_elem
123 // CHECK-NOT: call {{.*}}reserve
124 // CHECK-NOT: call {{.*}}__rust_alloc(
125
126 // CHECK: ret void
127 vec![(0, 0, '\0'); n]
128}
129
130// CHECK-LABEL: @vec_non_zero_tuple
131#[no_mangle]
132pub 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(
136
137 // CHECK: call {{.*}}__rust_alloc(
138
139 // CHECK-NOT: call {{.*}}alloc::vec::from_elem
140 // CHECK-NOT: call {{.*}}reserve
141 // CHECK-NOT: call {{.*}}__rust_alloc_zeroed(
142
143 // CHECK: ret void
144 vec![(0, 0, 'A'); n]
145}
146
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]+]]
149
150// CHECK-DAG: attributes [[RUST_ALLOC_ZEROED_ATTRS]] = { {{.*}} allockind("alloc,zeroed,aligned") allocsize(0) uwtable "alloc-family"="__rust_alloc" {{.*}} }