https://gcc.gnu.org/bugzilla/show_bug.cgi?id=92768
Richard Biener <rguenth at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Keywords| |needs-bisection Status|UNCONFIRMED |NEW Target Milestone|--- |8.4 Summary|[10 Regression] Maybe a |[8/9/10 Regression] Maybe a |wrong code for vector |wrong code for vector |constants |constants Ever confirmed|0 |1 --- Comment #2 from Richard Biener <rguenth at gcc dot gnu.org> --- Testcase already failing with GCC 8 (but not GCC 7 appearantly): #include <xmmintrin.h> typedef int v4si __attribute__((vector_size(16))); typedef float v4sf __attribute__((vector_size(16))); __m128 graphene_simd4x4f_inverse(__m128 r1_sum) { v4si temi = (v4si) {0x00000000, 0x80000000, 0x00000000, 0x80000000}; v4sf temf = (v4sf) temi; return (__m128) _mm_xor_ps((r1_sum), temf); } int main() { __m128 a = { -1.0f, -1.0f, -1.0f, -1.0f }; if (graphene_simd4x4f_inverse (a)[1] != 1.0) __builtin_abort (); return 0; } somehow we are "normalizing" FP numbers in constant folding, losing the signed zeros. That worked in GCC 7. Guess we can bisect that.