Message ID | 20240429065200.137634-1-quic_apinski@quicinc.com |
---|---|
State | New |
Headers | show |
Series | PHIOPT: Value-replacement check undef | expand |
On Mon, Apr 29, 2024 at 8:52 AM Andrew Pinski <quic_apinski@quicinc.com> wrote: > > While moving value replacement part of PHIOPT over > to use match-and-simplify, I ran into the case where > we would have an undef use that was conditional become > unconditional. This prevents that. I can't remember at this > point what the testcase was though. > > Bootstrapped and tested on x86_64-linux-gnu with no regressions. OK. Thanks, Richard. > gcc/ChangeLog: > > * tree-ssa-phiopt.cc (value_replacement): Reject undef variables > so they don't become unconditional used. > > Signed-off-by: Andrew Pinski <quic_apinski@quicinc.com> > --- > gcc/tree-ssa-phiopt.cc | 7 +++++++ > 1 file changed, 7 insertions(+) > > diff --git a/gcc/tree-ssa-phiopt.cc b/gcc/tree-ssa-phiopt.cc > index a2bdcb5eae8..f166c3132cb 100644 > --- a/gcc/tree-ssa-phiopt.cc > +++ b/gcc/tree-ssa-phiopt.cc > @@ -1146,6 +1146,13 @@ value_replacement (basic_block cond_bb, basic_block middle_bb, > if (code != NE_EXPR && code != EQ_EXPR) > return 0; > > + /* Do not make conditional undefs unconditional. */ > + if ((TREE_CODE (arg0) == SSA_NAME > + && ssa_name_maybe_undef_p (arg0)) > + || (TREE_CODE (arg1) == SSA_NAME > + && ssa_name_maybe_undef_p (arg1))) > + return false; > + > /* If the type says honor signed zeros we cannot do this > optimization. */ > if (HONOR_SIGNED_ZEROS (arg1)) > -- > 2.43.0 >
diff --git a/gcc/tree-ssa-phiopt.cc b/gcc/tree-ssa-phiopt.cc index a2bdcb5eae8..f166c3132cb 100644 --- a/gcc/tree-ssa-phiopt.cc +++ b/gcc/tree-ssa-phiopt.cc @@ -1146,6 +1146,13 @@ value_replacement (basic_block cond_bb, basic_block middle_bb, if (code != NE_EXPR && code != EQ_EXPR) return 0; + /* Do not make conditional undefs unconditional. */ + if ((TREE_CODE (arg0) == SSA_NAME + && ssa_name_maybe_undef_p (arg0)) + || (TREE_CODE (arg1) == SSA_NAME + && ssa_name_maybe_undef_p (arg1))) + return false; + /* If the type says honor signed zeros we cannot do this optimization. */ if (HONOR_SIGNED_ZEROS (arg1))
While moving value replacement part of PHIOPT over to use match-and-simplify, I ran into the case where we would have an undef use that was conditional become unconditional. This prevents that. I can't remember at this point what the testcase was though. Bootstrapped and tested on x86_64-linux-gnu with no regressions. gcc/ChangeLog: * tree-ssa-phiopt.cc (value_replacement): Reject undef variables so they don't become unconditional used. Signed-off-by: Andrew Pinski <quic_apinski@quicinc.com> --- gcc/tree-ssa-phiopt.cc | 7 +++++++ 1 file changed, 7 insertions(+)