LGTM

On Sun, Nov 19, 2023 at 1:39 PM Maciej W. Rozycki <ma...@embecosm.com> wrote:
>
> Update `riscv_expand_conditional_move' and handle the missing GEU and
> LEU operators there, avoiding an extraneous conditional set operation,
> such as with this output:
>
>         sgtu    a0,a0,a1
>         seqz    a1,a0
>         czero.eqz       a3,a3,a1
>         czero.nez       a1,a2,a1
>         or      a0,a1,a3
>
> produced when optimizing for Zicond targets from:
>
> int
> movsigtu (int w, int x, int y, int z)
> {
>   return w > x ? y : z;
> }
>
> These operators can be inverted producing optimal code such as this:
>
>         sgtu    a1,a0,a1
>         czero.nez       a3,a3,a1
>         czero.eqz       a1,a2,a1
>         or      a0,a1,a3
>
> which this change causes to happen.
>
>         gcc/
>         * config/riscv/riscv.cc (riscv_expand_conditional_move): Also
>         invert the condition for GEU and LEU.
> ---
>  gcc/config/riscv/riscv.cc |    2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
>
> gcc-riscv-expand-conditional-move-geu-leu.diff
> Index: gcc/gcc/config/riscv/riscv.cc
> ===================================================================
> --- gcc.orig/gcc/config/riscv/riscv.cc
> +++ gcc/gcc/config/riscv/riscv.cc
> @@ -4142,7 +4142,7 @@ riscv_expand_conditional_move (rtx dest,
>           /* If riscv_expand_int_scc inverts the condition, then it will
>              flip the value of INVERT.  We need to know where so that
>              we can adjust it for our needs.  */
> -         if (code == LE || code == GE)
> +         if (code == LE || code == LEU || code == GE || code == GEU)
>             invert_ptr = &invert;
>
>           /* Emit an scc like instruction into a temporary

Reply via email to