[PATCH] pch: Add support for PCH for relocatable executables

Andrew MacLeod amacleod@redhat.com
Tue Nov 9 15:23:19 GMT 2021


On 11/9/21 9:58 AM, Jakub Jelinek wrote:
> On Tue, Nov 09, 2021 at 09:41:08AM -0500, Andrew MacLeod wrote:
>> Yeah, Im not particular about how we do this...  I think thats perfectly
>> reasonable.   Would something like the following solve this issue?
> Yes, but see below.
>
>> commit 17a5b03c95549b5488bc8dd2af4f6e2cc9ddf098
>> Author: Andrew MacLeod <amacleod@redhat.com>
>> Date:   Tue Nov 9 09:29:23 2021 -0500
>>
>>      Keep x_range_query NULL for global ranges.
>>      
>>      Instead of x_range_query alwasy pointing to an object, have it default to
>>      NULL and return a pointer to the global query in that case.
>>      
>>              * function.c (allocate_struct_function): Set x_range_query to NULL.
>>              * function.h (get_range_query): Return context query or global.
>>              * gimple-range.cc (enable_ranger): Check current query is NULL.
>>              (disable_ranger): Clear function current query field.
>>              * value_query.cc (global_range_query_ptr): New.
>>              * value-query.h (global_ranges): Remove.
>>
>> diff --git a/gcc/function.c b/gcc/function.c
>> index af3d57b32a3..8768c5fcf22 100644
>> --- a/gcc/function.c
>> +++ b/gcc/function.c
>> @@ -4874,7 +4874,7 @@ allocate_struct_function (tree fndecl, bool abstract_p)
>>     cfun->debug_nonbind_markers = lang_hooks.emits_begin_stmt
>>       && MAY_HAVE_DEBUG_MARKER_STMTS;
>>   
>> -  cfun->x_range_query = &global_ranges;
>> +  cfun->x_range_query = NULL;
> This isn't needed, at the start of function we do
>    cfun = ggc_cleared_alloc<function> ();
> which already zero initializes the whole structure, including x_range_query.
> So instead this can be removed.
>
>> --- a/gcc/function.h
>> +++ b/gcc/function.h
>> @@ -725,7 +725,9 @@ extern void used_types_insert (tree);
>>   ATTRIBUTE_RETURNS_NONNULL inline range_query *
>>   get_range_query (const struct function *fun)
>>   {
>> -  return fun->x_range_query;
>> +  // From value-query.h
>> +  extern range_query *global_range_query_ptr;
>> +  return fun->x_range_query ? fun->x_range_query : global_range_query_ptr;
> Wouldn't it be better to do:
>    extern range_query global_ranges;
>    return fun->x_range_query ? fun->x_range_query : &global_ranges;
> I think declaring a variable extern can be done with incomplete type
> and &var is cheaper than ptr, because for the latter you need to
> read the pointer value from memory, while for &var you can just
> compute the address of the var which you need to compute for reading
> ptr from memory too.
>
> 	

yeah, that doesnt work because range_query is a pure virtual. However, 
there also does not seem to be any reason why we need to jump thru hoops 
since get_range_query() doesn't need to be in function.h..   If I 
relocate it to value-query.h like so it seems to work quite well...   
How about this?

Andrew


-------------- next part --------------
A non-text attachment was scrubbed...
Name: query2.diff
Type: text/x-patch
Size: 3643 bytes
Desc: not available
URL: <https://gcc.gnu.org/pipermail/gcc-patches/attachments/20211109/a04646ff/attachment.bin>


More information about the Gcc-patches mailing list