This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Bug tree-optimization/24574] a!=0?a/10:0 is not reduced to a/10


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

--- Comment #4 from rguenther at suse dot de <rguenther at suse dot de> ---
On Tue, 12 Jul 2016, glisse at gcc dot gnu.org wrote:

> https://gcc.gnu.org/bugzilla/show_bug.cgi?id=24574
> 
> --- Comment #3 from Marc Glisse <glisse at gcc dot gnu.org> ---
> Makes sense, I don't know why I didn't add divisions in the original patch.
> *_MOD_EXPR, shifts and rotates should work as well with 0 on the left, max with
> INT_MAX, etc, I was quite minimalist there.
> 
> Of course, if I had gone with the simpler approach of folding the operation
> after replacement (here 0 / 10) and comparing that with the PHI argument, we
> wouldn't need the neutral/absorbing logic at all :-(

Yeah, but folding would happily create undefined behavior from, say,

 if (x != INT_MIN)
   x = x * -1;

as folding folds INT_MIN * -1 to INT_MIN (ok, maybe with TREE_OVERFLOW 
set, but I'm not sure we want to rely on that).

Re-testing with mod and shift/rotates added.

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]