https://gcc.gnu.org/bugzilla/show_bug.cgi?id=112363
--- Comment #2 from Thomas Schwinge ---
Right, that's what I suspected (see my "signed zero" comment). And indeed, the
first check in 'main' instrumented as follows:
--- gcc/testsuite/gcc.dg/vect/vect-cond-reduc-in-order-2-signed-zero.c
+++ gcc/testsuite/gcc.dg/vect/vect-cond-reduc-in-order-2-signed-zero.c
@@ -74,8 +74,11 @@ main ()
double res4 = reduc_minus_double (a, -0.0, cond1, n);
double ref4 = reduc_minus_double_ref (a, -0.0, cond1, n);
+ __builtin_printf("L0\n");
+ __builtin_printf("eq %d, SBres 0x%x, SBref 0x%x\n", res1 == ref1,
signbit (res1), signbit (ref1));
if (res1 != ref1 || signbit (res1) != signbit (ref1))
__builtin_abort ();
+ __builtin_printf("L1\n");
..., I see:
L0
eq 1, SBres 0, SBref 8000
GCN Kernel Aborted
Kernel aborted
..., so unexpected 'signbit' difference of '-0.0' '+' reduction, and thus
'abort'. Thus, likely, a GCN target issue -- for Andrew/Julian to take over.