No regressions are reported. Committed as r15-3013.
https://gcc.gnu.org/pipermail/gcc-cvs/2024-August/408072.html

Thanks
Gui Haochen

在 2024/8/16 10:31, HAO CHEN GUI 写道:
> Hi,
>   I submitted a patch to change the mode checking for
> CLEAR_BY_PIECES.
> https://gcc.gnu.org/pipermail/gcc-patches/2024-August/660344.html
> 
>   It causes some regressions on aarch64. With the patch,
> V2x8QImode is used to do clear by pieces instead of TImode as
> vector mode is preferable and V2x8QImode supports const0 store.
> Thus the efficient "stp" instructions can't be generated.
> 
>   I drafted following patch to fix the problem. It can fix
> regressions found in memset-corner-cases.c, memset-q-reg.c,
> auto-init-padding-11.c and auto-init-padding-5.c.
> 
>   Compared to previous one, the main changes are
> 1. Support all 16-byte vector modes
> 2. Check memory address when pseudo can't be created.
> https://gcc.gnu.org/pipermail/gcc-patches/2024-August/660349.html
> 
>   I send the patch in order to call auto CI to test the patch. The
> cfarm server is too slow to finish regression test overnight.
> 
>   I will check in the patch if there is no regressions and no one
> objects it.
> 
> Thanks
> Gui Haochen
> 
> ChangeLog
> aarch64: Implement 16-byte vector mode const0 store by TImode
> 
> gcc/
>       * config/aarch64/aarch64-simd.md (mov<mode> for VSTRUCT_QD):
>       Expand 16-byte vector mode const0 store by TImode.
> 
> patch.diff
> diff --git a/gcc/config/aarch64/aarch64-simd.md 
> b/gcc/config/aarch64/aarch64-simd.md
> index 01b084d8ccb..acf86e191c7 100644
> --- a/gcc/config/aarch64/aarch64-simd.md
> +++ b/gcc/config/aarch64/aarch64-simd.md
> @@ -7766,7 +7766,16 @@ (define_expand "mov<mode>"
>       (match_operand:VSTRUCT_QD 1 "general_operand"))]
>    "TARGET_FLOAT"
>  {
> -  if (can_create_pseudo_p ())
> +  if (known_eq (GET_MODE_SIZE (<MODE>mode), 16)
> +      && operands[1] == CONST0_RTX (<MODE>mode)
> +      && MEM_P (operands[0])
> +      && (can_create_pseudo_p ()
> +       || memory_address_p (TImode, XEXP (operands[0], 0))))
> +    {
> +      operands[0] = adjust_address (operands[0], TImode, 0);
> +      operands[1] = CONST0_RTX (TImode);
> +    }
> +  else if (can_create_pseudo_p ())
>      {
>        if (GET_CODE (operands[0]) != REG)
>       operands[1] = force_reg (<MODE>mode, operands[1]);

Reply via email to