IBM Z: Fix bootstrap breakage due to HAVE_TF macro
authorIlya Leoshkevich <iii@linux.ibm.com>
Tue, 10 Nov 2020 17:26:04 +0000 (18:26 +0100)
committerIlya Leoshkevich <iii@linux.ibm.com>
Wed, 11 Nov 2020 00:00:32 +0000 (01:00 +0100)
Commit e627cda56865 ("IBM Z: Store long doubles in vector registers
when possible") introduced HAVE_TF macro which expands to a logical
"or" of HAVE_ constants.  Not all of these constants are available in
GENERATOR_FILE context, so a hack was used: simply expand to true in
this case, because the actual value matters only during compiler
runtime and not during generation.

However, one aspect of this value matters during generation after all:
whether or not it's a constant, which in this case it appears to be.
This results in incorrect values in insn-flags.h and broken bootstrap
for some configurations.

Fix by using a dummy value that is not a constant.

gcc/ChangeLog:

2020-11-10  Ilya Leoshkevich  <iii@linux.ibm.com>

* config/s390/s390.h (HAVE_TF): Use opaque value when
GENERATOR_FILE is defined.

gcc/config/s390/s390.h

index 8c02831..bc579a3 100644 (file)
@@ -1187,8 +1187,9 @@ struct GTY(()) machine_function
 #define TARGET_INDIRECT_BRANCH_TABLE s390_indirect_branch_table
 
 #ifdef GENERATOR_FILE
-/* gencondmd.c is built before insn-flags.h.  */
-#define HAVE_TF(icode) true
+/* gencondmd.c is built before insn-flags.h.  Use an arbitrary opaque value
+   that cannot be optimized away by gen_insn.  */
+#define HAVE_TF(icode) TARGET_HARD_FLOAT
 #else
 #define HAVE_TF(icode) (HAVE_##icode##_fpr || HAVE_##icode##_vr)
 #endif