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

Reply via email to