s390.md (movdi, [...]): Add peepholes2 to pull operands out of the literal pool where...
authorUlrich Weigand <uweigand@de.ibm.com>
Thu, 24 Oct 2002 20:19:10 +0000 (20:19 +0000)
committerUlrich Weigand <uweigand@gcc.gnu.org>
Thu, 24 Oct 2002 20:19:10 +0000 (20:19 +0000)
* config/s390/s390.md (movdi, movsi, movhi, movqi): Add peepholes2
to pull operands out of the literal pool where possible.

From-SVN: r58504

gcc/ChangeLog
gcc/config/s390/s390.md

index f53fd46a45652c9653ca136c32675c692d2366e0..6eccff2e7c70aba174afe55c16e7eaadefd5f1a2 100644 (file)
@@ -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.
index 475e6fa87e433669f3fe5027db5b71d1e0a12a87..a14555d0bf06c0c67cb7a9e312fa1da9d1510aae 100644 (file)
   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).
 ;
   [(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).
   [(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).
   [(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).