[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