[PATCH] [rs6000] Fix a wrong GC issue

binbin shlb@linux.ibm.com
Mon Mar 9 05:58:01 GMT 2020


Hi Segher,

On 2020/3/5 下午6:42, Segher Boessenkool wrote:
> Hi Bin Bin,
> 
> On Thu, Mar 05, 2020 at 10:31:39AM +0800, binbin wrote:
>> On 2020/3/5 上午2:35, Segher Boessenkool wrote:
>>> On Wed, Mar 04, 2020 at 03:08:41PM +0800, binbin wrote:
>>>>>> 	* 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?
>>>>
>>>> OK, change it to uncondition.  Thanks for your suggestion.
>>>
>>> What about the second part?  Shouldn't it already be included anyway?
>>
>> If "insn-modes.h" is not included in rs6000.h, it reports error showing
>> MAX_MACHINE_MODE’ undeclared here (not in a function) in file included
>> from
>> ../../host-powerpc64le-unknown-linux-gnu/gcc/tm.h:25
>> from ../.././libgcc/libgcc2.c:29
>> ../.././libgcc/../gcc/config/rs6000/rs6000.h:2495:42.  Thanks.
> 
> Sure.  But why do we need to include that file at all here?  It should
> already be included via coretypes.h (which includes machmode.h, which
> includes insn-modes.h).
> 
>> +extern GTY(()) tree builtin_mode_to_type[MAX_MACHINE_MODE][2];
>> +extern GTY(()) tree altivec_builtin_mask_for_load;
>>   
>>   #ifndef USED_FOR_TARGET
> 
> Maybe it should be moved into here?  Or some other #ifdef trickery?
> 
> 
> Segher
> 

OK, changed the code.  Bootstrap and regression tests were done on
powerpc64le-linux-gnu (LE) with no regressions.  Thanks for your good
suggestion.
-------------- next part --------------
gcc/ChangeLog

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

	* config/rs6000/rs6000-internal.h (altivec_builtin_mask_for_load,
	builtin_mode_to_type[MAX_MACHINE_MODE][2]): Remove the declaration.
	* 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.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          | 2 ++
 3 files changed, 4 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..724085b 100644
--- a/gcc/config/rs6000/rs6000.h
+++ b/gcc/config/rs6000/rs6000.h
@@ -2490,6 +2490,8 @@ 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
-- 
1.8.3.1



More information about the Gcc-patches mailing list