| //@ compile-flags: -Copt-level=1 |
| //@ only-64bit |
| |
| #![crate_type = "lib"] |
| |
| // Check that we don't have runtime alignment checks, just a safe alignment. |
| // (Rust emits a branch, but LLVM merges the loads from the arms.) |
| |
| use std::mem::transmute_copy; |
| |
| // CHECK-LABEL: @transmute_copy_i16_from_i32_slice |
| // CHECK-SAME: ptr{{.+}}%_0, |
| // CHECK-SAME: ptr{{.+}}%x.0, |
| // CHECK-SAME: i64{{.+}}%x.1) |
| #[no_mangle] |
| pub unsafe fn transmute_copy_i16_from_i32_slice(x: &[i32]) -> [i16; 7] { |
| // CHECK: start: |
| // CHECK-NEXT: @llvm.memcpy |
| // CHECK-SAME: align 2{{.+}}%_0, |
| // CHECK-SAME: align 4{{.+}}%x.0, |
| // CHECK-SAME: i64 14, |
| // CHECK-NEXT: ret void |
| transmute_copy(x) |
| } |
| |
| // CHECK-LABEL: @transmute_copy_i32_from_i16_slice |
| // CHECK-SAME: ptr{{.+}}%_0, |
| // CHECK-SAME: ptr{{.+}}%x.0, |
| // CHECK-SAME: i64{{.+}}%x.1) |
| #[no_mangle] |
| pub unsafe fn transmute_copy_i32_from_i16_slice(x: &[i16]) -> [i32; 3] { |
| // CHECK: start: |
| // CHECK-NEXT: @llvm.memcpy |
| // CHECK-SAME: align 4{{.+}}%_0, |
| // CHECK-SAME: align 2{{.+}}%x.0, |
| // CHECK-SAME: i64 12, |
| // CHECK-NEXT: ret void |
| transmute_copy(x) |
| } |
| |
| // CHECK-LABEL: i32 @transmute_copy_i32_from_dyn |
| // CHECK-SAME: ptr{{.+}}%x.0, |
| // CHECK-SAME: ptr{{.+}}%x.1) |
| #[no_mangle] |
| pub unsafe fn transmute_copy_i32_from_dyn(x: &dyn std::fmt::Debug) -> i32 { |
| // CHECK: start: |
| // CHECK-NEXT: [[TEMP:%.+]] = load i32, ptr %x.0, align 1 |
| // CHECK-NEXT: ret i32 [[TEMP]] |
| transmute_copy(x) |
| } |
| |
| // CHECK-LABEL: @transmute_copy_i16_array_from_dyn |
| // CHECK-SAME: ptr{{.+}}%_0, |
| // CHECK-SAME: ptr{{.+}}%x.0, |
| // CHECK-SAME: ptr{{.+}}%x.1) |
| #[no_mangle] |
| pub unsafe fn transmute_copy_i16_array_from_dyn(x: &dyn std::fmt::Debug) -> [i16; 7] { |
| // CHECK: start: |
| // CHECK-NEXT: @llvm.memcpy |
| // CHECK-SAME: align 2{{.+}}%_0, |
| // CHECK-SAME: align 1{{.+}}%x.0, |
| // CHECK-SAME: i64 14, |
| // CHECK-NEXT: ret void |
| transmute_copy(x) |
| } |