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))" > "@