From f457ae2218c74c9816d98d695058619a67ded6ba Mon Sep 17 00:00:00 2001 From: Bin Bin Lv Date: Wed, 11 Mar 2020 22:25:31 -0400 Subject: [PATCH] [rs6000] Fix a wrong GC issue 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. Bootstrap and regression tests were done on powerpc64le-linux-gnu (LE) with no regressions. gcc/ChangeLog 2020-03-11 Bin Bin Lv * config/rs6000/rs6000-internal.h (altivec_builtin_mask_for_load, builtin_mode_to_type): Remove the declaration. * config/rs6000/rs6000.h (altivec_builtin_mask_for_load, builtin_mode_to_type): Add an extern GTY(()) declaration. * config/rs6000/rs6000.c (altivec_builtin_mask_for_load, builtin_mode_to_type): Remove the GTY(()) declaration. --- gcc/config/rs6000/rs6000-internal.h | 2 -- gcc/config/rs6000/rs6000.c | 4 ++-- gcc/config/rs6000/rs6000.h | 3 +++ 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/gcc/config/rs6000/rs6000-internal.h b/gcc/config/rs6000/rs6000-internal.h index a23e95610fd..d331b9e3e3c 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 46b7dec2abd..24598aff663 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 1697186237f..79b3dd6e3a5 100644 --- a/gcc/config/rs6000/rs6000.h +++ b/gcc/config/rs6000/rs6000.h @@ -2490,6 +2490,9 @@ extern GTY(()) tree rs6000_builtin_types[RS6000_BTI_MAX]; extern GTY(()) tree rs6000_builtin_decls[RS6000_BUILTIN_COUNT]; #ifndef USED_FOR_TARGET +extern GTY(()) tree builtin_mode_to_type[MAX_MACHINE_MODE][2]; +extern GTY(()) tree altivec_builtin_mask_for_load; + /* A C structure for machine-specific, per-function data. This is added to the cfun structure. */ typedef struct GTY(()) machine_function -- 2.30.2