aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorBin Bin Lv <shlb@linux.ibm.com>2020-03-11 22:25:31 -0400
committerBin Bin Lv <shlb@linux.ibm.com>2020-03-11 22:25:31 -0400
commitf457ae2218c74c9816d98d695058619a67ded6ba (patch)
tree1ff5d71d96b26d6cf855fb150f8ec17a5c76e7a5 /gcc
parent9c1281d98639e8291570fd367c9d22f350509513 (diff)
downloadgcc-f457ae2218c74c9816d98d695058619a67ded6ba.zip
gcc-f457ae2218c74c9816d98d695058619a67ded6ba.tar.gz
gcc-f457ae2218c74c9816d98d695058619a67ded6ba.tar.bz2
[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.
Diffstat (limited to 'gcc')
-rw-r--r--gcc/config/rs6000/rs6000-internal.h2
-rw-r--r--gcc/config/rs6000/rs6000.c4
-rw-r--r--gcc/config/rs6000/rs6000.h3
3 files changed, 5 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 46b7dec..24598af 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..79b3dd6 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