Use modref even for nested functions in ref_maybe_used_by_call_p_1

Remove test for function not having call chain guarding modref use in
ref_maybe_used_by_call_p_1.  It never made sense since modref treats call chain
accesses explicitly. It was however copied from earlier check for ECF_CONST
(which seems dubious too, but I would like to discuss it independelty).

This enables us to detect that memory pointed to static chain (or parts of it)
are unused by the function.

lto-bootstrapped-regtested all lanugages on x86_64-linux.

gcc/ChangeLog:

2021-11-19  Jan Hubicka  <hubicka@ucw.cz>

	* tree-ssa-alias.c (ref_maybe_used_by_call_p_1): Do not guard modref
	by !gimple_call_chain.

gcc/testsuite/ChangeLog:

2021-11-19  Jan Hubicka  <hubicka@ucw.cz>

	* gcc.dg/tree-ssa/modref-dse-6.c: New test.
This commit is contained in:
Jan Hubicka 2021-11-19 18:09:13 +01:00
parent 16137fbb92
commit ada63d56be
2 changed files with 24 additions and 1 deletions

View file

@ -0,0 +1,23 @@
/* { dg-do compile } */
/* { dg-options "-O2 -fdump-tree-optimized" } */
int
main()
{
int a,b;
__attribute__ ((noinline))
void kill_me()
{
a=1234;
b=2234;
}
a=0;
b=1234;
__attribute__ ((noinline))
int reta()
{
return a;
}
return reta();
}
/* { dg-final { scan-tree-dump-not "kill_me" "optimized" } } */
/* { dg-final { scan-tree-dump-not "1234" "optimized" } } */

View file

@ -2755,7 +2755,7 @@ ref_maybe_used_by_call_p_1 (gcall *call, ao_ref *ref, bool tbaa_p)
callee = gimple_call_fndecl (call);
if (!gimple_call_chain (call) && callee != NULL_TREE)
if (callee != NULL_TREE)
{
struct cgraph_node *node = cgraph_node::get (callee);
/* We can not safely optimize based on summary of calle if it does