On Wed, Jul 26, 2017 at 6:46 AM, Wilco Dijkstra <wilco.dijks...@arm.com> wrote:
> Remove the remaining uses of '*' from the movsi/di/ti patterns.
> Using '*' in alternatives is typically incorrect at it tells the register
> allocator to ignore those alternatives.  So remove these from all the
> integer move patterns.  This removes unnecessary int to float moves, for
> example gcc.target/aarch64/pr62178.c no longer generates a redundant fmov
> since the w = m variant is now allowed.
>
> Passes regress & bootstrap, OK for commit?

I had looked into doing the similar thing but I did not have any way
of benchmarking the patch, I decided to drop the patch.
That is the patch looks good to me (though I cannot approve it).

Thanks,
Andrew

>
> ChangeLog:
> 2017-07-26  Wilco Dijkstra  <wdijk...@arm.com>
>
>         * gcc/config/aarch64/aarch64.md (movsi_aarch64): Remove all '*'.
>         (movdi_aarch64): Likewise.
>         (movti_aarch64): Likewise.
> --
>
> diff --git a/gcc/config/aarch64/aarch64.md b/gcc/config/aarch64/aarch64.md
> index 
> 225b64e1daf1663d28bbe8c2d30ba373b4722176..97c5fb08a2fd5d2eee556e1fc20dbf65b089d84b
>  100644
> --- a/gcc/config/aarch64/aarch64.md
> +++ b/gcc/config/aarch64/aarch64.md
> @@ -920,8 +920,8 @@ (define_expand "mov<mode>"
>  )
>
>  (define_insn_and_split "*movsi_aarch64"
> -  [(set (match_operand:SI 0 "nonimmediate_operand" "=r,k,r,r,r,r,*w,m,  
> m,r,r  ,*w,r,*w")
> -       (match_operand:SI 1 "aarch64_mov_operand"  " r,r,k,M,n,m, 
> m,rZ,*w,Usa,Ush,rZ,w,*w"))]
> +  [(set (match_operand:SI 0 "nonimmediate_operand" "=r,k,r,r,r,r,w,m, m,  r, 
>  r, w,r,w")
> +       (match_operand:SI 1 "aarch64_mov_operand"  " 
> r,r,k,M,n,m,m,rZ,w,Usa,Ush,rZ,w,w"))]
>    "(register_operand (operands[0], SImode)
>      || aarch64_reg_or_zero (operands[1], SImode))"
>    "@
> @@ -952,8 +952,8 @@ (define_insn_and_split "*movsi_aarch64"
>  )
>
>  (define_insn_and_split "*movdi_aarch64"
> -  [(set (match_operand:DI 0 "nonimmediate_operand" "=r,k,r,r,r,r,*w,m,  
> m,r,r,  *w,r,*w,w")
> -       (match_operand:DI 1 "aarch64_mov_operand"  " r,r,k,N,n,m, 
> m,rZ,*w,Usa,Ush,rZ,w,*w,Dd"))]
> +  [(set (match_operand:DI 0 "nonimmediate_operand" "=r,k,r,r,r,r,w, m,m,  r, 
>  r, w,r,w,w")
> +       (match_operand:DI 1 "aarch64_mov_operand"  " 
> r,r,k,N,n,m,m,rZ,w,Usa,Ush,rZ,w,w,Dd"))]
>    "(register_operand (operands[0], DImode)
>      || aarch64_reg_or_zero (operands[1], DImode))"
>    "@
> @@ -1008,9 +1008,9 @@ (define_expand "movti"
>
>  (define_insn "*movti_aarch64"
>    [(set (match_operand:TI 0
> -        "nonimmediate_operand"  "=r, *w,r ,*w,r,m,m,*w,m")
> +        "nonimmediate_operand"  "=r, w,r,w,r,m,m,w,m")
>         (match_operand:TI 1
> -        "aarch64_movti_operand" " rn,r ,*w,*w,m,r,Z, m,*w"))]
> +        "aarch64_movti_operand" " rn,r,w,w,m,r,Z,m,w"))]
>    "(register_operand (operands[0], TImode)
>      || aarch64_reg_or_zero (operands[1], TImode))"
>    "@

Reply via email to