diff options
| author | Markus Reiter <me@reitermark.us> | 2024-05-10 15:33:20 +0200 |
|---|---|---|
| committer | Markus Reiter <me@reitermark.us> | 2024-07-21 18:21:33 +0200 |
| commit | 64fb903c95f11dbab910a64316d1fcf478342bb6 (patch) | |
| tree | 3dedf53e8cc331ebe8e9fe7aad1ee20d1557b8c6 | |
| parent | cad3e7b841e0e5789cff45e5804467c69bcc52ee (diff) | |
| download | rust-64fb903c95f11dbab910a64316d1fcf478342bb6.tar.gz rust-64fb903c95f11dbab910a64316d1fcf478342bb6.zip | |
Add test for cast optimization.
| -rw-r--r-- | tests/codegen/cast-optimized.rs | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/tests/codegen/cast-optimized.rs b/tests/codegen/cast-optimized.rs new file mode 100644 index 00000000000..aa89b12f87f --- /dev/null +++ b/tests/codegen/cast-optimized.rs @@ -0,0 +1,33 @@ +//@ 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; 10] { + let mut array = [false; 10]; + + let index = (c | 1).leading_zeros() as usize / 4 - 2; + + // 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; 10] { + let c = c as u32; + + let mut array = [false; 10]; + + let index = (c | 1).leading_zeros() as usize / 4 - 2; + + // CHECK-NOT: call core::panicking::panic + array[index as usize] = true; + + array +} |
