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