aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWilco Dijkstra <wdijkstr@arm.com>2017-05-05 16:18:17 +0000
committerWilco Dijkstra <wilco@gcc.gnu.org>2017-05-05 16:18:17 +0000
commit8e10223f3638a3251b15eb7a8777a69cbaf63422 (patch)
treef7c0c322c73ea4b71697c2ae791838c6b5e1c08d
parent8dc6a926f2eea6de3f1710a185eee5cfc052d6f8 (diff)
downloadgcc-8e10223f3638a3251b15eb7a8777a69cbaf63422.zip
gcc-8e10223f3638a3251b15eb7a8777a69cbaf63422.tar.gz
gcc-8e10223f3638a3251b15eb7a8777a69cbaf63422.tar.bz2
Float to int moves currently generate inefficient code due to hacks used in the movsi and movdi patterns.
Float to int moves currently generate inefficient code due to hacks used in the movsi and movdi patterns. The 'r = w' variant uses '*' which tells the register allocator to ignore it. As a result the float to int moves typically spill to the stack, which is extremely inefficient. gcc/ * config/aarch64/aarch64.md (movsi_aarch64): Remove '*' from r=w. (movdi_aarch64): Likewise. From-SVN: r247643
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/config/aarch64/aarch64.md8
2 files changed, 9 insertions, 4 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index a038415..604193c 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+2017-05-05 Wilco Dijkstra <wdijkstr@arm.com>
+
+ * config/aarch64/aarch64.md (movsi_aarch64): Remove '*' from r=w.
+ (movdi_aarch64): Likewise.
+
2017-05-05 Jakub Jelinek <jakub@redhat.com>
PR tree-optimization/80632
diff --git a/gcc/config/aarch64/aarch64.md b/gcc/config/aarch64/aarch64.md
index d39b850..c522e87 100644
--- a/gcc/config/aarch64/aarch64.md
+++ b/gcc/config/aarch64/aarch64.md
@@ -1030,8 +1030,8 @@
)
(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,S,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,S,Ush,rZ,w,*w"))]
"(register_operand (operands[0], SImode)
|| aarch64_reg_or_zero (operands[1], SImode))"
"@
@@ -1062,8 +1062,8 @@
)
(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,S,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,S,Ush,rZ,w,*w,Dd"))]
"(register_operand (operands[0], DImode)
|| aarch64_reg_or_zero (operands[1], DImode))"
"@