[PATCH] xtensa: Optimize boolean evaluation when SImode EQ/NE to zero if TARGET_MINMAX

Max Filippov jcmvbkbc@gmail.com
Tue Sep 5 23:01:13 GMT 2023


Hi Suwa-san,

On Tue, Sep 5, 2023 at 2:29 AM Takayuki 'January June' Suwa
<jjsuwa_sys3175@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

ISTM that test0 could be done with movnez in the same three instructions:

  movi a9, 1
  movnez a2, a9, a2
  xor a2, a2, a9

>     test1:
>         movi.n  a9, 1
>         minu    a2, a2, a9
>         ret.n

ISTM that test1 could be done with movnez in the same two instructions:

  movi a9, 1
  movnez a2, a9, a2

-- 
Thanks.
-- Max


More information about the Gcc-patches mailing list