This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug rtl-optimization/69942] gcc.dg/ifcvt-5.c FAILs
- From: "law at redhat dot com" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: Wed, 02 Mar 2016 23:33:47 +0000
- Subject: [Bug rtl-optimization/69942] gcc.dg/ifcvt-5.c FAILs
- Auto-submitted: auto-generated
- References: <bug-69942-4 at http dot gcc dot gnu dot org/bugzilla/>
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=69942
Jeffrey A. Law <law at redhat dot com> changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|UNCONFIRMED |NEW
Last reconfirmed| |2016-03-02
CC| |law at redhat dot com
Ever confirmed|0 |1
--- Comment #4 from Jeffrey A. Law <law at redhat dot com> ---
I'm not sure I follow the logic in c#2.
As we leave the tree optimizers, we have this in the .optimized dump:
<bb 2>:
if (x_3(D) > y_4(D))
goto <bb 3>;
else
goto <bb 4>;
<bb 3>:
<bb 4>:
# i_1 = PHI <x_3(D)(2), a_5(D)(3)>
# j_2 = PHI <y_4(D)(2), a_5(D)(3)>
_6 = i_1 * j_2;
return _6;
Which is basically what I'd expect and is consistent with x86-64.
What's awful strange is how the sparc & x86-64 differ in how they coalesce (or
fail to). That ultimately leads to changes in the initial code generation and
changes in what CE1 does.
Before changing the expected output of .ce1 I think we should look more closely
at the coalescing differences between x86-64 and sparc.
The difference is on the sparc, we don't see a conflict between i_1/a_5 and
j_2/a_5. The lack of conflicts changes coalescing and we end up with different
code at expansion time. That ultimately leads to a change in the code seen by
CE and the differences in behavior.
But I think we should look more closely at coalescing before jumping to
changing the expected output from .ce1.