]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
match.pd: Do not canonicalize division by power 2 for {ROUND, CEIL}_DIV
authorAvinash Jayakar <avinashd@linux.ibm.com>
Mon, 13 Oct 2025 09:47:45 +0000 (15:17 +0530)
committerAvinash Jayakar <avinashd@linux.ibm.com>
Mon, 13 Oct 2025 09:54:00 +0000 (15:24 +0530)
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  <avinashd@linux.ibm.com>

gcc/ChangeLog:
PR tree-optimization/122213
* match.pd: Canonicalize unsigned pow2 div only for trunk, floor and
exact div.

gcc/match.pd

index 3d1752055b347e15d3d25ed9f1c1c376cf006905..0c89447b33761914ac11213e015b6aac067c91ba 100644 (file)
@@ -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)