[Bug target/50310] [4.7 Regression] ICE: in gen_vcondv2div2df, at config/i386/sse.md:1435 with -O -ftree-vectorize and __builtin_isunordered()
jakub at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Tue Sep 6 19:48:00 GMT 2011
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50310
Jakub Jelinek <jakub at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |jakub at gcc dot gnu.org
--- Comment #1 from Jakub Jelinek <jakub at gcc dot gnu.org> 2011-09-06 19:38:40 UTC ---
While this exact testcase is a recent regression, caused by
http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=178480
double s1[4], s2[4], s3[4];
void
foo (void)
{
int i;
for (i = 0; i < 4; i++)
s3[i] = !__builtin_isunordered (s1[i], s2[i]) && s1[i] != s2[i] ? -1.0 :
0.0;
}
ICEd for some time already (e.g. with -O3 -mavx or on powerpc64 with -O3
-mvsx).
The problem is that vcond isn't supported for all possible conditions (LTGT in
this case) on all targets, the sse.md pattern just ICEs if the expanding
routine fails, on powerpc64 it ICEs in the middle end because it FAILed. So,
to fix this either vcond conditions would need to test for the unsupported
condition codes and the vectorizer would need to use the condition, or all
targets that provide vcond* patterns would need to support all possible
condition codes.
More information about the Gcc-bugs
mailing list