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.

Reply via email to