[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  <shlb@linux.ibm.com>

	* 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.
This commit is contained in:
Bin Bin Lv 2020-03-11 22:25:31 -04:00
parent 9c1281d986
commit f457ae2218
3 changed files with 5 additions and 4 deletions

View file

@ -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

View file

@ -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. */

View file

@ -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