https://gcc.gnu.org/bugzilla/show_bug.cgi?id=126294

--- Comment #1 from Kael Franco <kaelfandrew at gmail dot com> ---
gcc/match.pd has:

 /* Simplify (t * u) / v -> t * (u / v) if u is multiple of v.  */
 (simplify
  (div (mult@3 @0 INTEGER_CST@1) INTEGER_CST@2)
  (if (INTEGRAL_TYPE_P (type)
       && wi::multiple_of_p (wi::to_widest (@1), wi::to_widest (@2), SIGNED))
   (if (TYPE_OVERFLOW_UNDEFINED (type) && !TYPE_OVERFLOW_SANITIZED (type))
    (mult @0 (div! @1 @2))
    (with {int_range_max vr0, vr1;}
     (if (gimple_match_range_of_expr (vr0, @0, @3)
          && gimple_match_range_of_expr (vr1, @1)
          && range_op_handler (MULT_EXPR).overflow_free_p (vr0, vr1))
      (mult @0 (div! @1 @2))))
   )))

Reply via email to