//@ compile-flags: -C opt-level=3
//@ only-x86_64
//@ needs-deterministic-layouts

#![crate_type = "lib"]
#![feature(iter_repeat_n)]

#[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)
}
