Hi

On 2020/3/4 上午8:25, Segher Boessenkool wrote:
Hi!

On Tue, Mar 03, 2020 at 09:40:47AM -0600, Bin Bin Lv wrote:
The source file rs6000.c was split up into several smaller source files
through commit 1acf024.  However, variable "altivec_builtin_mask_for_load" and
"builtin_mode_to_type[MAX_MACHINE_MODE][2]" were marked with the wrong syntax
"GTY(([options])) type name", which led these two variables were not marked as
roots correctly and wrongly GCed.  And when "altivec_builtin_mask_for_load"
was wrongly GCed, the compiling for openJDK is failed with ICEs enabling
precompiled header under mcpu=power7.  So roots must be declared using one of
the following syntaxes: "extern GTY(([options])) type name;" and "static
GTY(([options])) type name;".

And the following patch adds variable "altivec_builtin_mask_for_load" and
"builtin_mode_to_type[MAX_MACHINE_MODE][2]" into the roots array.

2020-03-03  Bin Bin Lv  <s...@linux.ibm.com>

        * config/rs6000/rs6000-internal.h (altivec_builtin_mask_for_load,
        builtin_mode_to_type[MAX_MACHINE_MODE][2]): Remove GTY(()).
        * config/rs6000/rs6000.h (altivec_builtin_mask_for_load,
        builtin_mode_to_type[MAX_MACHINE_MODE][2]): Add an extern GTY(())
        declaration.

Why in both of the header files?  Can you just remove the declaration
from rs6000-internal.h?

OK, removed.  Thanks.


        * config/rs6000/rs6000.h (MAX_MACHINE_MODE): Include the header file
        for MAX_MACHINE_MODE.

The changelog entry should say *what* file is included, and under what
condition.  It doesn't have to say why (that belongs in the commit
message).

But, can't you just include it unconditionally?  Don't we already,
anyway, via coretypes.h -> machmode.h -> insn-modes.h?


Segher


OK, change it to uncondition.  Thanks for your suggestion.
gcc/ChangeLog

2020-03-04  Bin Bin Lv  <s...@linux.ibm.com>

        * config/rs6000/rs6000-internal.h (altivec_builtin_mask_for_load,
        builtin_mode_to_type[MAX_MACHINE_MODE][2]): Remove GTY(()).
        * config/rs6000/rs6000.h (altivec_builtin_mask_for_load,
        builtin_mode_to_type[MAX_MACHINE_MODE][2]): Add an extern GTY(())
        declaration.
        * config/rs6000/rs6000.h (MAX_MACHINE_MODE): Include insn-modes.h.
        * config/rs6000/rs6000.c (altivec_builtin_mask_for_load,
        builtin_mode_to_type[MAX_MACHINE_MODE][2]): Remove the GTY(())
        declaration and add the definition.
---
 gcc/config/rs6000/rs6000-internal.h | 2 --
 gcc/config/rs6000/rs6000.c          | 4 ++--
 gcc/config/rs6000/rs6000.h          | 4 ++++
 3 files changed, 6 insertions(+), 4 deletions(-)

diff --git a/gcc/config/rs6000/rs6000-internal.h 
b/gcc/config/rs6000/rs6000-internal.h
index a23e956..d331b9e 100644
--- a/gcc/config/rs6000/rs6000-internal.h
+++ b/gcc/config/rs6000/rs6000-internal.h
@@ -187,7 +187,5 @@ extern bool rs6000_passes_long_double;
 extern bool rs6000_passes_vector;
 extern bool rs6000_returns_struct;
 extern bool cpu_builtin_p;
-extern GTY(()) tree builtin_mode_to_type[MAX_MACHINE_MODE][2];
-extern GTY(()) tree altivec_builtin_mask_for_load;
 
 #endif
diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c
index 9910b27..0faf44b 100644
--- a/gcc/config/rs6000/rs6000.c
+++ b/gcc/config/rs6000/rs6000.c
@@ -99,7 +99,7 @@
 #endif
 
 /* Support targetm.vectorize.builtin_mask_for_load.  */
-GTY(()) tree altivec_builtin_mask_for_load;
+tree altivec_builtin_mask_for_load;
 
 #ifdef USING_ELFOS_H
 /* Counter for labels which are to be placed in .fixup.  */
@@ -196,7 +196,7 @@ enum reg_class rs6000_constraints[RS6000_CONSTRAINT_MAX];
 int rs6000_vector_align[NUM_MACHINE_MODES];
 
 /* Map selected modes to types for builtins.  */
-GTY(()) tree builtin_mode_to_type[MAX_MACHINE_MODE][2];
+tree builtin_mode_to_type[MAX_MACHINE_MODE][2];
 
 /* What modes to automatically generate reciprocal divide estimate (fre) and
    reciprocal sqrt (frsqrte) for.  */
diff --git a/gcc/config/rs6000/rs6000.h b/gcc/config/rs6000/rs6000.h
index 1697186..cd3d054 100644
--- a/gcc/config/rs6000/rs6000.h
+++ b/gcc/config/rs6000/rs6000.h
@@ -35,6 +35,8 @@
 #include "config/rs6000/rs6000-modes.h"
 #endif
 
+#include "insn-modes.h"
+
 /* Definitions for the object file format.  These are set at
    compile-time.  */
 
@@ -2488,6 +2490,8 @@ enum rs6000_builtin_type_index
 
 extern GTY(()) tree rs6000_builtin_types[RS6000_BTI_MAX];
 extern GTY(()) tree rs6000_builtin_decls[RS6000_BUILTIN_COUNT];
+extern GTY(()) tree builtin_mode_to_type[MAX_MACHINE_MODE][2];
+extern GTY(()) tree altivec_builtin_mask_for_load;
 
 #ifndef USED_FOR_TARGET
 /* A C structure for machine-specific, per-function data.
-- 
1.8.3.1

Reply via email to