On Thu, May 25, 2023 at 8:13 AM Takayuki 'January June' Suwa <jjsuwa_sys3...@yahoo.co.jp> wrote: > > This patch makes try to eliminate using temporary pseudo for > '(minus:SI (const_int) (reg:SI))' if the addition of negative constant > value can be emitted in a single machine instruction. > > /* example */ > int test0(int x) { > return 1 - x; > } > int test1(int x) { > return 100 - x; > } > int test2(int x) { > return 25600 - x; > } > > ;; before > test0: > movi.n a9, 1 > sub a2, a9, a2 > ret.n > test1: > movi a9, 0x64 > sub a2, a9, a2 > ret.n > test2: > movi.n a9, 0x19 > slli a9, a9, 10 > sub a2, a9, a2 > ret.n > > ;; after > test0: > addi.n a2, a2, -1 > neg a2, a2 > ret.n > test1: > addi a2, a2, -100 > neg a2, a2 > ret.n > test2: > addmi a2, a2, -0x6400 > neg a2, a2 > ret.n > > gcc/ChangeLog: > > * config/xtensa/xtensa-protos.h (xtensa_m1_or_1_thru_15): > New prototype. > * config/xtensa/xtensa.cc (xtensa_m1_or_1_thru_15): > New function. > * config/xtensa/constraints.md (O): > Change to use the above function. > * config/xtensa/xtensa.md (*subsi3_from_const): > New insn_and_split pattern. > --- > gcc/config/xtensa/constraints.md | 2 +- > gcc/config/xtensa/xtensa-protos.h | 1 + > gcc/config/xtensa/xtensa.cc | 7 +++++++ > gcc/config/xtensa/xtensa.md | 24 ++++++++++++++++++++++++ > 4 files changed, 33 insertions(+), 1 deletion(-)
Regtested for target=xtensa-linux-uclibc, no new regressions. Committed to master. -- Thanks. -- Max