aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJan Hubicka <jh@suse.cz>2002-04-19 16:02:06 +0200
committerJan Hubicka <hubicka@gcc.gnu.org>2002-04-19 14:02:06 +0000
commitde80110b8836fd153e11d858b904b396f4b8960d (patch)
tree709580ad599c255f4ffb112a6c23b9fbe4e83107
parenteea18a4a73a6ff4eab49ddd7bbe1da5747b24686 (diff)
downloadgcc-de80110b8836fd153e11d858b904b396f4b8960d.zip
gcc-de80110b8836fd153e11d858b904b396f4b8960d.tar.gz
gcc-de80110b8836fd153e11d858b904b396f4b8960d.tar.bz2
i386.md (movsi_1, movhi_1): Force reload to use more flexible alternative.
* i386.md (movsi_1, movhi_1): Force reload to use more flexible alternative. From-SVN: r52519
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/config/i386/i386.md14
2 files changed, 17 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 097cf31..0571b4e 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+Fri Apr 19 15:53:03 CEST 2002 Jan Hubicka <jh@suse.cz>
+
+ * i386.md (movsi_1, movhi_1): Force reload to use more flexible
+ alternative.
+
2002-04-19 Neil Booth <neil@daikokuya.demon.co.uk>
* builtins.c: Include langhooks.h.
diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md
index 3ebc997..868f4b0 100644
--- a/gcc/config/i386/i386.md
+++ b/gcc/config/i386/i386.md
@@ -1733,8 +1733,13 @@
(set_attr "mode" "SI")
(set_attr "length_immediate" "1")])
+; The first alternative is used only to compute proper length of instruction.
+; Reload's algorithm does not take into account the cost of spill instructions
+; needed to free register in given class, so avoid it from choosing the first
+; alternative when eax is not available.
+
(define_insn "*movsi_1"
- [(set (match_operand:SI 0 "nonimmediate_operand" "=*a,r,*a,m,!*y,!rm,!*y,!*Y,!rm,!*Y")
+ [(set (match_operand:SI 0 "nonimmediate_operand" "=*?a,r,*?a,m,!*y,!rm,!*y,!*Y,!rm,!*Y")
(match_operand:SI 1 "general_operand" "im,rinm,rinm,rin,rm,*y,*y,rm,*Y,*Y"))]
"GET_CODE (operands[0]) != MEM || GET_CODE (operands[1]) != MEM"
{
@@ -1843,8 +1848,13 @@
[(set_attr "type" "push")
(set_attr "mode" "QI")])
+; The first alternative is used only to compute proper length of instruction.
+; Reload's algorithm does not take into account the cost of spill instructions
+; needed to free register in given class, so avoid it from choosing the first
+; alternative when eax is not available.
+
(define_insn "*movhi_1"
- [(set (match_operand:HI 0 "nonimmediate_operand" "=*a,r,r,*a,r,m")
+ [(set (match_operand:HI 0 "nonimmediate_operand" "=*?a,r,r,*?a,r,m")
(match_operand:HI 1 "general_operand" "i,r,rn,rm,rm,rn"))]
"GET_CODE (operands[0]) != MEM || GET_CODE (operands[1]) != MEM"
{