This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug tree-optimization/57600] Turn 2 comparisons into 1 with the min
- From: "glisse at gcc dot gnu.org" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: Fri, 19 Jun 2015 16:20:01 +0000
- Subject: [Bug tree-optimization/57600] Turn 2 comparisons into 1 with the min
- Auto-submitted: auto-generated
- References: <bug-57600-4 at http dot gcc dot gnu dot org/bugzilla/>
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=57600
--- Comment #6 from Marc Glisse <glisse at gcc dot gnu.org> ---
(In reply to alalaw01 from comment #5)
> Can you give an example where it not only doesn't help, but actually hurts?
I don't remember at all what I was talking about. I can imagine that if we are
in a branch predicated by i < n1, the compiler has an easy time turning
i<n1&&i<n2 into just i<n2, but it has a harder time turning i<min(n1,n2) into
i<n2, for instance, and that can block a whole line of further optimizations.
> Are they all just because of not seeing analysis properties, i.e. we could
> get there by realizing a<=min(a,...) and looking far enough to see a<X<=Y
> means a<Y ?
I guess it is always possible to add enough knowledge of this special case in
various places in gcc to avoid most regressions. I don't have enough data to
judge how hard it would be to make the transformation a win on average. It
might be that it is already more often beneficial than detrimental, for all I
know...
> In terms of code generation,
I am more worried about the high-level optimizations we may miss, but note that
the number of comparisons is not necessarily the right metric, the comparison
a<b may be completely unpredictable while t<a and t<b are always true.