On Mon, May 23, 2022 at 8:52 AM Takayuki 'January June' Suwa
<jjsuwa_sys3...@yahoo.co.jp> wrote:
>
> This patch introduces setmemsi insn pattern of two kinds, unrolled loop and
> small loop, for fixed small length and constant initialization value.
>
> gcc/ChangeLog:
>
>         * gcc/config/xtensa/xtensa-protos.h
>         (xtensa_expand_block_set_unrolled_loop,
>         xtensa_expand_block_set_small_loop): New prototypes.
>         * gcc/config/xtensa/xtensa.cc (xtensa_sizeof_MOVI,
>         xtensa_expand_block_set_unrolled_loop,
>         xtensa_expand_block_set_small_loop): New functions.
>         * gcc/config/xtensa/xtensa.md (setmemsi): New expansion pattern.
>         * gcc/config/xtensa/xtensa.opt (mlongcalls): Add target mask.
> ---
>   gcc/config/xtensa/xtensa-protos.h |   2 +
>   gcc/config/xtensa/xtensa.cc       | 211 ++++++++++++++++++++++++++++++
>   gcc/config/xtensa/xtensa.md       |  16 +++
>   gcc/config/xtensa/xtensa.opt      |   2 +-
>   4 files changed, 230 insertions(+), 1 deletion(-)

With this patch applied for the following test program

void f(char *p);

void g(void)
{
       char c[72] = {0};
       f(c);
}

the following code is generated with -O2:

       .text
       .literal_position
       .literal .LC0, f@PLT
       .align  4
       .global g
       .type   g, @function
g:
       entry   sp, 112
       movi.n  a10, 0
       s32i.n  a10, sp, 0
       addi.n  a9, sp, 4
       movi.n  a8, 0x11
       loop    a8, .L2_LEND
.L2:
       s32i.n  a10, a9, 0
       addi.n  a9, a9, 4
       .L2_LEND:
       l32r    a8, .LC0
       mov.n   a10, sp
       callx8  a8
       retw.n

The part

       s32i.n  a10, sp, 0
       addi.n  a9, sp, 4
       movi.n  a8, 0x11

looks redundant and could be just

mov a9, sp
movi a8, 0x12

is that something that can be addressed in this patch?

-- 
Thanks.
-- Max

Reply via email to