On Tue, Sep 5, 2023 at 2:29 AM Takayuki 'January June' Suwa
<jjsuwa_sys3...@yahoo.co.jp> wrote:
>
> This patch optimizes the boolean evaluation for equality to 0 in SImode
> using the MINU (Minimum Value Unsigned) machine instruction available
> when TARGET_MINMAX is configured, for example, (x != 0) to MINU(x, 1)
> and (x == 0) to (MINU(x, 1) ^ 1).
>
>     /* example */
>     int test0(int x) {
>       return x == 0;
>     }
>     int test1(int x) {
>       return x != 0;
>     }
>
>     ;; before
>     test0:
>         mov.n   a10, a2
>         movi.n  a9, 1
>         movi.n  a2, 0
>         moveqz  a2, a9, a10
>         ret.n
>     test1:
>         mov.n   a10, a2
>         movi.n  a9, 1
>         movi.n  a2, 0
>         movnez  a2, a9, a10
>         ret.n
>
>     ;; after (prereq. TARGET_MINMAX)
>     test0:
>         movi.n  a9, 1
>         minu    a2, a2, a9
>         xor     a2, a2, a9
>         ret.n
>     test1:
>         movi.n  a9, 1
>         minu    a2, a2, a9
>         ret.n
>
> gcc/ChangeLog:
>
>         * config/xtensa/xtensa.cc (xtensa_expand_scc):
>         Add code for particular constants (only 0 and INT_MIN for now)
>         for EQ/NE boolean evaluation in SImode.
>         * config/xtensa/xtensa.md (*eqne_INT_MIN): Remove because its
>         implementation has been integrated into the above.
> ---
>  gcc/config/xtensa/xtensa.cc | 43 +++++++++++++++++++++++++++++++------
>  gcc/config/xtensa/xtensa.md | 34 -----------------------------
>  2 files changed, 37 insertions(+), 40 deletions(-)

Regtested for target=xtensa-linux-uclibc, no new regressions.
Committed to master.

-- 
Thanks.
-- Max

Reply via email to