aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorUlrich Weigand <uweigand@de.ibm.com>2002-10-24 20:19:10 +0000
committerUlrich Weigand <uweigand@gcc.gnu.org>2002-10-24 20:19:10 +0000
commit84817c5d5bb2c7bac2f4a7d7bd450a00ee6c0b5c (patch)
tree120bb2a682f82cbea83e4be554608580cdb5eb8a
parentd074905352cfd576f42fbc184d3474a2df80354d (diff)
downloadgcc-84817c5d5bb2c7bac2f4a7d7bd450a00ee6c0b5c.zip
gcc-84817c5d5bb2c7bac2f4a7d7bd450a00ee6c0b5c.tar.gz
gcc-84817c5d5bb2c7bac2f4a7d7bd450a00ee6c0b5c.tar.bz2
s390.md (movdi, [...]): Add peepholes2 to pull operands out of the literal pool where possible.
* config/s390/s390.md (movdi, movsi, movhi, movqi): Add peepholes2 to pull operands out of the literal pool where possible. From-SVN: r58504
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/config/s390/s390.md40
2 files changed, 45 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index f53fd46..6eccff2 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+2002-10-24 Ulrich Weigand <uweigand@de.ibm.com>
+
+ * config/s390/s390.md (movdi, movsi, movhi, movqi): Add peepholes2
+ to pull operands out of the literal pool where possible.
+
2002-10-24 Denis Chertykov <denisc@overta.ru>
* config/avr/avr.c (init_cumulative_args): Test fntype for zero.
diff --git a/gcc/config/s390/s390.md b/gcc/config/s390/s390.md
index 475e6fa..a14555d 100644
--- a/gcc/config/s390/s390.md
+++ b/gcc/config/s390/s390.md
@@ -992,6 +992,18 @@
operands[1] = replace_equiv_address (operands[1], addr);
}")
+(define_peephole2
+ [(set (match_operand:DI 0 "register_operand" "")
+ (mem:DI (match_operand 1 "address_operand" "")))]
+ "TARGET_64BIT
+ && !FP_REG_P (operands[0])
+ && GET_CODE (operands[1]) == SYMBOL_REF
+ && CONSTANT_POOL_ADDRESS_P (operands[1])
+ && get_pool_mode (operands[1]) == DImode
+ && legitimate_reload_constant_p (get_pool_constant (operands[1]))"
+ [(set (match_dup 0) (match_dup 2))]
+ "operands[2] = get_pool_constant (operands[1]);")
+
;
; movsi instruction pattern(s).
;
@@ -1074,6 +1086,16 @@
[(set_attr "op_type" "RR,RX,RX,RR,RX,RX,SS")
(set_attr "atype" "reg,mem,mem,reg,mem,mem,mem")])
+(define_peephole2
+ [(set (match_operand:SI 0 "register_operand" "")
+ (mem:SI (match_operand 1 "address_operand" "")))]
+ "!FP_REG_P (operands[0])
+ && GET_CODE (operands[1]) == SYMBOL_REF
+ && CONSTANT_POOL_ADDRESS_P (operands[1])
+ && get_pool_mode (operands[1]) == SImode
+ && legitimate_reload_constant_p (get_pool_constant (operands[1]))"
+ [(set (match_dup 0) (match_dup 2))]
+ "operands[2] = get_pool_constant (operands[1]);")
;
; movhi instruction pattern(s).
@@ -1092,6 +1114,15 @@
[(set_attr "op_type" "RR,RI,RX,RX,SS")
(set_attr "atype" "reg,reg,mem,mem,mem")])
+(define_peephole2
+ [(set (match_operand:HI 0 "register_operand" "")
+ (mem:HI (match_operand 1 "address_operand" "")))]
+ "GET_CODE (operands[1]) == SYMBOL_REF
+ && CONSTANT_POOL_ADDRESS_P (operands[1])
+ && get_pool_mode (operands[1]) == HImode
+ && GET_CODE (get_pool_constant (operands[1])) == CONST_INT"
+ [(set (match_dup 0) (match_dup 2))]
+ "operands[2] = get_pool_constant (operands[1]);")
;
; movqi instruction pattern(s).
@@ -1126,6 +1157,15 @@
[(set_attr "op_type" "RR,RI,RX,RX,SI,SS")
(set_attr "atype" "reg,reg,mem,mem,mem,mem")])
+(define_peephole2
+ [(set (match_operand:QI 0 "nonimmediate_operand" "")
+ (mem:QI (match_operand 1 "address_operand" "")))]
+ "GET_CODE (operands[1]) == SYMBOL_REF
+ && CONSTANT_POOL_ADDRESS_P (operands[1])
+ && get_pool_mode (operands[1]) == QImode
+ && GET_CODE (get_pool_constant (operands[1])) == CONST_INT"
+ [(set (match_dup 0) (match_dup 2))]
+ "operands[2] = get_pool_constant (operands[1]);")
;
; movstrictqi instruction pattern(s).