about summary refs log tree commit diff
path: root/tests/codegen/iter-repeat-n-trivial-drop.rs
diff options
context:
space:
mode:
Diffstat (limited to 'tests/codegen/iter-repeat-n-trivial-drop.rs')
-rw-r--r--tests/codegen/iter-repeat-n-trivial-drop.rs70
1 files changed, 0 insertions, 70 deletions
diff --git a/tests/codegen/iter-repeat-n-trivial-drop.rs b/tests/codegen/iter-repeat-n-trivial-drop.rs
deleted file mode 100644
index 28173530324..00000000000
--- a/tests/codegen/iter-repeat-n-trivial-drop.rs
+++ /dev/null
@@ -1,70 +0,0 @@
-//@ compile-flags: -C opt-level=3
-//@ only-x86_64
-//@ needs-deterministic-layouts
-
-#![crate_type = "lib"]
-#![feature(iter_repeat_n)]
-#![feature(array_repeat)]
-
-#[derive(Clone)]
-pub struct NotCopy(u16);
-
-impl Drop for NotCopy {
-    fn drop(&mut self) {}
-}
-
-// For a type where `Drop::drop` doesn't do anything observable and a clone is the
-// same as a move, make sure that the extra case for the last item disappears.
-
-#[no_mangle]
-// CHECK-LABEL: @iter_repeat_n_next
-pub fn iter_repeat_n_next(it: &mut std::iter::RepeatN<NotCopy>) -> Option<NotCopy> {
-    // CHECK-NEXT: start:
-    // CHECK-NOT: br
-    // CHECK: %[[COUNT:.+]] = load i64
-    // CHECK-NEXT: %[[COUNT_ZERO:.+]] = icmp eq i64 %[[COUNT]], 0
-    // CHECK-NEXT: br i1 %[[COUNT_ZERO]], label %[[EMPTY:.+]], label %[[NOT_EMPTY:.+]]
-
-    // CHECK: [[NOT_EMPTY]]:
-    // CHECK-NOT: br
-    // CHECK: %[[DEC:.+]] = add i64 %[[COUNT]], -1
-    // CHECK-NEXT: %[[VAL:.+]] = load i16
-    // CHECK-NEXT: store i64 %[[DEC]]
-    // CHECK-NEXT: br label %[[EMPTY]]
-
-    // CHECK: [[EMPTY]]:
-    // CHECK-NOT: br
-    // CHECK: phi i16
-    // CHECK-SAME: [ %[[VAL]], %[[NOT_EMPTY]] ]
-    // CHECK-NOT: br
-    // CHECK: ret
-
-    it.next()
-}
-
-// And as a result, using the iterator can optimize without special cases for
-// the last iteration, like `memset`ing all the items in one call.
-
-#[no_mangle]
-// CHECK-LABEL: @vec_extend_via_iter_repeat_n
-pub fn vec_extend_via_iter_repeat_n() -> Vec<u8> {
-    // CHECK: %[[ADDR:.+]] = tail call {{(noalias )?}}noundef dereferenceable_or_null(1234) ptr @{{.*}}__rust_alloc(i64 noundef {{(range\(i64 1, 0\) )?}}1234, i64 noundef {{(range\(i64 1, -9223372036854775807\) )?}}1)
-    // CHECK: tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 1 dereferenceable(1234) %[[ADDR]], i8 42, i64 1234,
-
-    let n = 1234_usize;
-    let mut v = Vec::with_capacity(n);
-    v.extend(std::iter::repeat_n(42_u8, n));
-    v
-}
-
-// Array repeat uses `RepeatN::next_unchecked` internally,
-// so also check that the distinction disappears there.
-
-#[no_mangle]
-// CHECK-LABEL: @array_repeat_not_copy
-pub unsafe fn array_repeat_not_copy(item: NotCopy) -> [NotCopy; 8] {
-    // CHECK: insertelement {{.+}} i16 %item
-    // CHECK: shufflevector <8 x i16> {{.+}} zeroinitializer
-    // CHECK: store <8 x i16>
-    std::array::repeat(item)
-}