Hi Suwa-san, 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
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