//@ compile-flags: -Copt-level=3
//@ only-64bit

#![crate_type = "lib"]

use std::num::NonZero;
use std::ptr::NonNull;

// CHECK-LABEL: nonnull ptr @read_unaligned_ptr(ptr{{.+}}%ptr)
#[no_mangle]
unsafe fn read_unaligned_ptr(ptr: *const NonNull<i16>) -> NonNull<i16> {
    // CHECK: start:
    // CHECK-NEXT: [[TEMP:%.+]] = load ptr, ptr %ptr, align 1
    // CHECK-SAME: !nonnull
    // CHECK-SAME: !noundef
    // CHECK-NEXT: ret ptr [[TEMP]]
    ptr.read_unaligned()
}

// CHECK-LABEL: range(i16 1, 0) i16 @read_unaligned_i16(ptr{{.+}}%ptr)
#[no_mangle]
unsafe fn read_unaligned_i16(ptr: *const NonZero<i16>) -> NonZero<i16> {
    // CHECK: start:
    // CHECK-NEXT: [[TEMP:%.+]] = load i16, ptr %ptr, align 1
    // CHECK-NOT: !noundef
    // CHECK-NOT: !range
    // CHECK-NEXT: ret i16 [[TEMP]]
    ptr.read_unaligned()
}

// CHECK-LABEL: void @typed_copy_unaligned_i32(ptr{{.+}}%src, ptr{{.+}}%dst)
#[no_mangle]
unsafe fn typed_copy_unaligned_i32(src: *const NonZero<i32>, dst: *mut NonZero<i32>) {
    // CHECK: start:
    // CHECK-NEXT: [[TEMP:%.+]] = load i32, ptr %src, align 1
    // CHECK-NOT: !noundef
    // CHECK-NOT: !range
    // CHECK-NEXT: store i32 [[TEMP]], ptr %dst, align 1
    // CHECK-NEXT: ret void
    dst.write_unaligned(src.read_unaligned())
}

// CHECK-LABEL: void @write_unaligned_i64(ptr{{.+}}%ptr, i64{{.+}}%val)
#[no_mangle]
unsafe fn write_unaligned_i64(ptr: *mut NonZero<i64>, val: NonZero<i64>) {
    // CHECK: start:
    // CHECK-NEXT: store i64 %val, ptr %ptr, align 1
    // CHECK-NEXT: ret void
    ptr.write_unaligned(val)
}

#[repr(align(128))]
struct HugeBuffer([u64; 1 << 10]);

// CHECK-LABEL: void @read_unaligned_huge(ptr{{.+}}%_0, ptr{{.+}}%ptr)
#[no_mangle]
unsafe fn read_unaligned_huge(ptr: *const HugeBuffer) -> HugeBuffer {
    // CHECK: start:
    // CHECK-NEXT: call void @llvm.memcpy{{.+}} align 128 dereferenceable(8192) %_0, {{.+}} align 1 dereferenceable(8192) %ptr, i64 8192,
    // CHECK-NEXT: ret void
    ptr.read_unaligned()
}

// CHECK-LABEL: void @write_unaligned_huge(ptr{{.+}}%ptr, ptr{{.+}}%val)
#[no_mangle]
unsafe fn write_unaligned_huge(ptr: *mut HugeBuffer, val: HugeBuffer) {
    // CHECK: start:
    // CHECK-NEXT: call void @llvm.memcpy{{.+}} align 1 dereferenceable(8192) %ptr, {{.+}} align 128 dereferenceable(8192) %val, i64 8192,
    // CHECK-NEXT: ret void
    ptr.write_unaligned(val)
}
