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

Andrew Pinski <pinskia at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|NEW                         |ASSIGNED
           Assignee|unassigned at gcc dot gnu.org      |pinskia at gcc dot 
gnu.org

--- Comment #5 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
Maybe we can just pattern match this simple cases which seems like what clang
does:
(simplify
 (le:c @0 (mult:c (div @0 @1) @1)
 ( { true_value; } ))
(simplify
 (gt:c @0 (mult:c (div @0 @1) @1)
 ( { false_value; } ))

That is these are all optimized:
//const __SIZE_TYPE__ N = 3;

int foo(__SIZE_TYPE__ len, __SIZE_TYPE__ N) {
        __SIZE_TYPE__ newlen = (len / N) * N;
        return newlen <= len;
}
int foo0(__SIZE_TYPE__ len, __SIZE_TYPE__ N) {
        __SIZE_TYPE__ newlen = (len / N) * N;
        return newlen > len;
}
int foo1(__SIZE_TYPE__ len, __SIZE_TYPE__ N) {
        __SIZE_TYPE__ newlen = (len / N) * N;
        return !(len >= newlen);
}

Reply via email to