about summary refs log tree commit diff
path: root/tests/codegen-llvm
diff options
context:
space:
mode:
authorclubby789 <jamie@hill-daniel.co.uk>2025-07-17 21:47:00 +0100
committerclubby789 <jamie@hill-daniel.co.uk>2025-08-20 17:08:46 +0100
commit8ea3b093819aabd92a605b42989341da0c97c0d6 (patch)
tree3316419d585c84e5ee1fd20df3fb904f9e69d4bd /tests/codegen-llvm
parent1c9952f4dd6e0947ee91f07130c03813a088a894 (diff)
downloadrust-8ea3b093819aabd92a605b42989341da0c97c0d6.tar.gz
rust-8ea3b093819aabd92a605b42989341da0c97c0d6.zip
Pass `alloc-variant-zeroed` to LLVM
Diffstat (limited to 'tests/codegen-llvm')
-rw-r--r--tests/codegen-llvm/vec-calloc.rs20
1 files changed, 20 insertions, 0 deletions
diff --git a/tests/codegen-llvm/vec-calloc.rs b/tests/codegen-llvm/vec-calloc.rs
index d1c320ead01..15971bbfa00 100644
--- a/tests/codegen-llvm/vec-calloc.rs
+++ b/tests/codegen-llvm/vec-calloc.rs
@@ -1,4 +1,6 @@
+//@ revisions: normal llvm21
 //@ compile-flags: -Copt-level=3 -Z merge-functions=disabled
+//@ [llvm21] min-llvm-version: 21
 //@ only-x86_64
 
 #![crate_type = "lib"]
@@ -176,6 +178,24 @@ pub fn vec_option_i32(n: usize) -> Vec<Option<i32>> {
     vec![None; n]
 }
 
+// LLVM21-LABEL: @vec_array
+#[cfg(llvm21)]
+#[no_mangle]
+pub fn vec_array(n: usize) -> Vec<[u32; 1_000_000]> {
+    // LLVM21-NOT: call {{.*}}alloc::vec::from_elem
+    // LLVM21-NOT: call {{.*}}reserve
+    // LLVM21-NOT: call {{.*}}__rust_alloc(
+
+    // LLVM21: call {{.*}}__rust_alloc_zeroed(
+
+    // LLVM21-NOT: call {{.*}}alloc::vec::from_elem
+    // LLVM21-NOT: call {{.*}}reserve
+    // LLVM21-NOT: call {{.*}}__rust_alloc(
+
+    // LLVM21: ret void
+    vec![[0; 1_000_000]; 3]
+}
+
 // Ensure that __rust_alloc_zeroed gets the right attributes for LLVM to optimize it away.
 // CHECK: declare noalias noundef ptr @{{.*}}__rust_alloc_zeroed(i64 noundef, i64 allocalign noundef) unnamed_addr [[RUST_ALLOC_ZEROED_ATTRS:#[0-9]+]]