| //@ compile-flags: -O -Z merge-functions=disabled |
| #![crate_type = "lib"] |
| |
| // This tests that LLVM can optimize based on the niches in the source or |
| // destination types for casts. |
| |
| // CHECK-LABEL: @u32_index |
| #[no_mangle] |
| pub fn u32_index(c: u32) -> [bool; 22] { |
| let mut array = [false; 22]; |
| |
| let index = 32 - c.leading_zeros(); |
| |
| // CHECK: call core::panicking::panic |
| array[index as usize] = true; |
| |
| array |
| } |
| |
| // CHECK-LABEL: @char_as_u32_index |
| #[no_mangle] |
| pub fn char_as_u32_index(c: char) -> [bool; 22] { |
| let c = c as u32; |
| |
| let mut array = [false; 22]; |
| |
| let index = 32 - c.leading_zeros(); |
| |
| // CHECK-NOT: call core::panicking::panic |
| array[index as usize] = true; |
| |
| array |
| } |