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).