From: Avinash Jayakar Date: Mon, 13 Oct 2025 09:47:45 +0000 (+0530) Subject: match.pd: Do not canonicalize division by power 2 for {ROUND, CEIL}_DIV X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=33b1a5d588971079e06a72d86e90b345e6e1cb25;p=thirdparty%2Fgcc.git match.pd: Do not canonicalize division by power 2 for {ROUND, CEIL}_DIV Canonicalization of unsigned division by power of 2 only applies to {TRUNC,FLOOR,EXACT}_DIV, therefore remove the same pattern for {CEIL,ROUND}_DIV, which was added in a previous commit. 2025-10-13 Avinash Jayakar gcc/ChangeLog: PR tree-optimization/122213 * match.pd: Canonicalize unsigned pow2 div only for trunk, floor and exact div. --- diff --git a/gcc/match.pd b/gcc/match.pd index 4d0a803eaef..41ec9da8aaa 100644 --- a/gcc/match.pd +++ b/gcc/match.pd @@ -981,16 +981,18 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT) (if (INTEGRAL_TYPE_P (TREE_TYPE (@0)) && TYPE_UNSIGNED (TREE_TYPE (@0))) (bit_and @0 (negate @1)))) -(for div (trunc_div ceil_div floor_div round_div exact_div) +/* Canonicalize unsigned t / 4 to t >> 2. */ #if GIMPLE - /* Canonicalize unsigned t / 4 to t >> 2. */ +(for div (trunc_div floor_div exact_div) (simplify (div @0 integer_pow2p@1) (if (INTEGRAL_TYPE_P (type) && (TYPE_UNSIGNED (type) || tree_expr_nonnegative_p (@0))) (rshift @0 { build_int_cst (integer_type_node, - wi::exact_log2 (wi::to_wide (@1))); }))) + wi::exact_log2 (wi::to_wide (@1))); })))) #endif + +(for div (trunc_div ceil_div floor_div round_div exact_div) /* Simplify (t * u) / u -> t. */ (simplify (div (mult:c @0 @1) @1)