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.