| //@ compile-flags: -Copt-level=3 -C no-prepopulate-passes |
| //@ only-64bit (so I don't need to worry about usize) |
| |
| #![crate_type = "lib"] |
| #![feature(core_intrinsics)] |
| |
| // This deals in a count of elements, not bytes, so we need to multiply. |
| // Ensure we preserve UB from a count too high to be valid. |
| use std::intrinsics::copy; |
| |
| // CHECK-LABEL: @copy_u16( |
| #[no_mangle] |
| pub unsafe fn copy_u16(src: *const u16, dst: *mut u16, count: usize) { |
| // CHECK: [[BYTES:%.+]] = mul nuw nsw i64 2, %count |
| // CHECK: call void @llvm.memmove.p0.p0.i64(ptr align 2 %dst, ptr align 2 %src, i64 [[BYTES]], i1 false) |
| copy(src, dst, count) |
| } |