[Bug middle-end/95622] [11 Regression] force_output flag on a variable prevents optimization / regresses c-c++-common/goacc/kernels-alias-ipa-pta{-2,-4,}.c
rguenther at suse dot de
gcc-bugzilla@gcc.gnu.org
Fri Mar 26 08:21:06 GMT 2021
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=95622
--- Comment #9 from rguenther at suse dot de <rguenther at suse dot de> ---
On Thu, 25 Mar 2021, burnus at gcc dot gnu.org wrote:
> https://gcc.gnu.org/bugzilla/show_bug.cgi?id=95622
>
> --- Comment #8 from Tobias Burnus <burnus at gcc dot gnu.org> ---
> I am not sure whether this is a sensible solution, but it fixes
> the issue for c-c++-common/goacc/kernels-alias-ipa-pta-2.c ...
>
>
> diff --git a/gcc/tree-ssa-structalias.c b/gcc/tree-ssa-structalias.c
> index 529ec3a5b80..c93e9b46d8d 100644
> --- a/gcc/tree-ssa-structalias.c
> +++ b/gcc/tree-ssa-structalias.c
> @@ -8132,7 +8132,7 @@ refered_from_nonlocal_fn (struct cgraph_node *node, void
> *data)
> *nonlocal_p |= (node->used_from_other_partition
> || DECL_EXTERNAL (node->decl)
> || TREE_PUBLIC (node->decl)
> - || node->force_output
> + || (node->force_output && !node->offloadable)
> || lookup_attribute ("noipa", DECL_ATTRIBUTES (node->decl)));
> return false;
> }
> @@ -8195,7 +8195,7 @@ ipa_pta_execute (void)
> bool nonlocal_p = (node->used_from_other_partition
> || DECL_EXTERNAL (node->decl)
> || TREE_PUBLIC (node->decl)
> - || node->force_output
> + || (node->force_output && !node->offloadable)
> || lookup_attribute ("noipa",
> DECL_ATTRIBUTES (node->decl)));
> node->call_for_symbol_thunks_and_aliases (refered_from_nonlocal_fn,
It's for sure incorrect since node->force_output could be set for other
reasons. But of course the reason for the node->force_output check
is that it is set by __attribute__((used)) which means a function/variable
can be invoked/accessed by means not visible to the compiler.
As said elsewhere the "fix" is to make the offload reference visible
to IPA early enough.
More information about the Gcc-bugs
mailing list