From 82a79b99e1279ad72cb93c2ad10c6be1facaca4a Mon Sep 17 00:00:00 2001 From: KonaeAkira Date: Fri, 14 Mar 2025 01:27:07 +0100 Subject: [PATCH 1/2] 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 0000000000000..7346227c53ffb --- /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 +} From ccde0a22035dee21373c5c7f47c50aaa484ba70e Mon Sep 17 00:00:00 2001 From: KonaeAkira Date: Fri, 14 Mar 2025 01:45:10 +0100 Subject: [PATCH 2/2] Fix formatting (line too long) --- tests/codegen/issues/issue-129795.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tests/codegen/issues/issue-129795.rs b/tests/codegen/issues/issue-129795.rs index 7346227c53ffb..dc64ee35c97e5 100644 --- a/tests/codegen/issues/issue-129795.rs +++ b/tests/codegen/issues/issue-129795.rs @@ -2,7 +2,8 @@ //@ 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. +// 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