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:
parent
16137fbb92
commit
ada63d56be
2 changed files with 24 additions and 1 deletions
23
gcc/testsuite/gcc.dg/tree-ssa/modref-dse-6.c
Normal file
23
gcc/testsuite/gcc.dg/tree-ssa/modref-dse-6.c
Normal 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" } } */
|
|
@ -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
|
||||
|
|
Loading…
Add table
Reference in a new issue