On Thu, Jan 23, 2025 at 7:43 AM Alexandre Oliva <ol...@adacore.com> wrote:
>
> On Jan 22, 2025, Alexandre Oliva <ol...@adacore.com> wrote:
>
> > I have another patch coming up that doesn't raise concerns for me, so
> > I'll hold off from installing the above, in case you also prefer the
> > other one.
>
> And here's an unrelated bit that came to mind while working on this, but
> that I split out before posting.
>
>
> Don't reject an ifcombine field-merging opportunity just because the
> left-hand operands aren't both reversed, if the second compare needs
> to be swapped for operands to match.
>
> Also mention that reversep does NOT affect the turning of range tests
> into bit tests.
>
> Regstrapped on x86_64-linux-gnu.  Ok to install?

OK.

>
> for  gcc/ChangeLog
>
>         * gimple-fold.cc (fold_truth_andor_for_ifcombine): Document
>         reversep's absence of effects on range tests.  Don't reject
>         reversep mismatches before trying compare swapping.
> ---
>  gcc/gimple-fold.cc |   10 ++++++----
>  1 file changed, 6 insertions(+), 4 deletions(-)
>
> diff --git a/gcc/gimple-fold.cc b/gcc/gimple-fold.cc
> index 3c971a29ef045..da3f505c3fcac 100644
> --- a/gcc/gimple-fold.cc
> +++ b/gcc/gimple-fold.cc
> @@ -8090,8 +8090,9 @@ fold_truth_andor_for_ifcombine (enum tree_code code, 
> tree truth_type,
>        return 0;
>      }
>
> -  /* Prepare to turn compares of signed quantities with zero into
> -     sign-bit tests.  */
> +  /* Prepare to turn compares of signed quantities with zero into sign-bit
> +     tests.  We need not worry about *_reversep here for these compare
> +     rewrites: loads will have already been reversed before compares.  */
>    bool lsignbit = false, rsignbit = false;
>    if ((lcode == LT_EXPR || lcode == GE_EXPR)
>        && integer_zerop (lr_arg)
> @@ -8198,10 +8199,11 @@ fold_truth_andor_for_ifcombine (enum tree_code code, 
> tree truth_type,
>       the rhs's.  If one is a load and the other isn't, we have to be
>       conservative and avoid the optimization, otherwise we could get
>       SRAed fields wrong.  */
> -  if (volatilep || ll_reversep != rl_reversep)
> +  if (volatilep)
>      return 0;
>
> -  if (! operand_equal_p (ll_inner, rl_inner, 0))
> +  if (ll_reversep != rl_reversep
> +      || ! operand_equal_p (ll_inner, rl_inner, 0))
>      {
>        /* Try swapping the operands.  */
>        if (ll_reversep != rr_reversep
>
>
> --
> Alexandre Oliva, happy hacker            https://FSFLA.org/blogs/lxo/
>    Free Software Activist                   GNU Toolchain Engineer
> More tolerance and less prejudice are key for inclusion and diversity
> Excluding neuro-others for not behaving ""normal"" is *not* inclusive

Reply via email to