From 82a79b99e1279ad72cb93c2ad10c6be1facaca4a Mon Sep 17 00:00:00 2001 From: KonaeAkira Date: Fri, 14 Mar 2025 01:27:07 +0100 Subject: [PATCH] Add codegen test for modulo with power-of-two divisor --- tests/codegen/issues/issue-129795.rs | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 tests/codegen/issues/issue-129795.rs diff --git a/tests/codegen/issues/issue-129795.rs b/tests/codegen/issues/issue-129795.rs new file mode 100644 index 00000000000..7346227c53f --- /dev/null +++ b/tests/codegen/issues/issue-129795.rs @@ -0,0 +1,16 @@ +//@ compile-flags: -Copt-level=3 +//@ min-llvm-version: 20 +#![crate_type = "lib"] + +// Ensure that a modulo operation with an operand that is known to be a power-of-two is properly optimized. + +// CHECK-LABEL: @modulo_with_power_of_two_divisor +// CHECK: add i64 %divisor, -1 +// CHECK-NEXT: and i64 +// CHECK-NEXT: ret i64 +#[no_mangle] +pub fn modulo_with_power_of_two_divisor(dividend: u64, divisor: u64) -> u64 { + assert!(divisor.is_power_of_two()); + // should be optimized to (dividend & (divisor - 1)) + dividend % divisor +}