Message ID | 20240924161312.1556293-3-quic_apinski@quicinc.com |
---|---|
State | New |
Headers | show |
Series | [1/3] Add an alternative testcase for PR 70740 | expand |
On Tue, Sep 24, 2024 at 6:14 PM Andrew Pinski <quic_apinski@quicinc.com> wrote: > > Another small phiprop improvement, in some cases > we could have a vop defining statement be a phi which might > be the same bb as the load happens. This is ok since the phi > here is not a store so we can just accept it. > > Bootstrapped and tested on x86_64-linux-gnu. OK. > PR tree-optimization/116824 > > gcc/ChangeLog: > > * tree-ssa-phiprop.cc (propagate_with_phi): Don't > reject if the bb of the def_stmt is the same as load > and if the def_stmt was a phi. > > gcc/testsuite/ChangeLog: > > * gcc.dg/tree-ssa/phiprop-3.c: New test. > > Signed-off-by: Andrew Pinski <quic_apinski@quicinc.com> > --- > gcc/testsuite/gcc.dg/tree-ssa/phiprop-3.c | 30 +++++++++++++++++++++++ > gcc/tree-ssa-phiprop.cc | 3 ++- > 2 files changed, 32 insertions(+), 1 deletion(-) > create mode 100644 gcc/testsuite/gcc.dg/tree-ssa/phiprop-3.c > > diff --git a/gcc/testsuite/gcc.dg/tree-ssa/phiprop-3.c b/gcc/testsuite/gcc.dg/tree-ssa/phiprop-3.c > new file mode 100644 > index 00000000000..a0d5891dc60 > --- /dev/null > +++ b/gcc/testsuite/gcc.dg/tree-ssa/phiprop-3.c > @@ -0,0 +1,30 @@ > +/* { dg-do compile } */ > +/* { dg-options "-O1 -fdump-tree-phiprop1-details -fdump-tree-cselim-details -fdump-tree-phiopt2" } */ > + > +/* PR tree-optimization/116824 */ > +/* phiprop should be able to handle the case where the vops defining > + statement was a phi in the same bb as the deference. */ > + > +int g(int i, int *tt) > +{ > + const int t = 10; > + const int *a; > + { > + if (t < i) > + { > + *tt = 1; > + a = &t; > + } > + else > + { > + *tt = 1; > + a = &i; > + } > + } > + return *a; > +} > + > +/* { dg-final { scan-tree-dump-times "Inserting PHI for result of load" 1 "phiprop1"} } */ > +/* { dg-final { scan-tree-dump-times "factoring out stores" 1 "cselim"} } */ > +/* { dg-final { scan-tree-dump-times "MIN_EXPR" 1 "phiopt2"} } */ > + > diff --git a/gcc/tree-ssa-phiprop.cc b/gcc/tree-ssa-phiprop.cc > index f04990e8cb4..4d1df7d351e 100644 > --- a/gcc/tree-ssa-phiprop.cc > +++ b/gcc/tree-ssa-phiprop.cc > @@ -401,7 +401,8 @@ propagate_with_phi (basic_block bb, gphi *phi, struct phiprop_d *phivn, > def_stmt = SSA_NAME_DEF_STMT (vuse); > } > if (!SSA_NAME_IS_DEFAULT_DEF (vuse) > - && (gimple_bb (def_stmt) == bb > + && ((gimple_bb (def_stmt) == bb > + && !is_a<gphi *>(def_stmt)) > || (gimple_bb (def_stmt) > && !dominated_by_p (CDI_DOMINATORS, > bb, gimple_bb (def_stmt))))) > -- > 2.43.0 >
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/phiprop-3.c b/gcc/testsuite/gcc.dg/tree-ssa/phiprop-3.c new file mode 100644 index 00000000000..a0d5891dc60 --- /dev/null +++ b/gcc/testsuite/gcc.dg/tree-ssa/phiprop-3.c @@ -0,0 +1,30 @@ +/* { dg-do compile } */ +/* { dg-options "-O1 -fdump-tree-phiprop1-details -fdump-tree-cselim-details -fdump-tree-phiopt2" } */ + +/* PR tree-optimization/116824 */ +/* phiprop should be able to handle the case where the vops defining + statement was a phi in the same bb as the deference. */ + +int g(int i, int *tt) +{ + const int t = 10; + const int *a; + { + if (t < i) + { + *tt = 1; + a = &t; + } + else + { + *tt = 1; + a = &i; + } + } + return *a; +} + +/* { dg-final { scan-tree-dump-times "Inserting PHI for result of load" 1 "phiprop1"} } */ +/* { dg-final { scan-tree-dump-times "factoring out stores" 1 "cselim"} } */ +/* { dg-final { scan-tree-dump-times "MIN_EXPR" 1 "phiopt2"} } */ + diff --git a/gcc/tree-ssa-phiprop.cc b/gcc/tree-ssa-phiprop.cc index f04990e8cb4..4d1df7d351e 100644 --- a/gcc/tree-ssa-phiprop.cc +++ b/gcc/tree-ssa-phiprop.cc @@ -401,7 +401,8 @@ propagate_with_phi (basic_block bb, gphi *phi, struct phiprop_d *phivn, def_stmt = SSA_NAME_DEF_STMT (vuse); } if (!SSA_NAME_IS_DEFAULT_DEF (vuse) - && (gimple_bb (def_stmt) == bb + && ((gimple_bb (def_stmt) == bb + && !is_a<gphi *>(def_stmt)) || (gimple_bb (def_stmt) && !dominated_by_p (CDI_DOMINATORS, bb, gimple_bb (def_stmt)))))
Another small phiprop improvement, in some cases we could have a vop defining statement be a phi which might be the same bb as the load happens. This is ok since the phi here is not a store so we can just accept it. Bootstrapped and tested on x86_64-linux-gnu. PR tree-optimization/116824 gcc/ChangeLog: * tree-ssa-phiprop.cc (propagate_with_phi): Don't reject if the bb of the def_stmt is the same as load and if the def_stmt was a phi. gcc/testsuite/ChangeLog: * gcc.dg/tree-ssa/phiprop-3.c: New test. Signed-off-by: Andrew Pinski <quic_apinski@quicinc.com> --- gcc/testsuite/gcc.dg/tree-ssa/phiprop-3.c | 30 +++++++++++++++++++++++ gcc/tree-ssa-phiprop.cc | 3 ++- 2 files changed, 32 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/gcc.dg/tree-ssa/phiprop-3.c