From 84817c5d5bb2c7bac2f4a7d7bd450a00ee6c0b5c Mon Sep 17 00:00:00 2001 From: Ulrich Weigand Date: Thu, 24 Oct 2002 20:19:10 +0000 Subject: [PATCH] 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 --- gcc/ChangeLog | 5 +++++ gcc/config/s390/s390.md | 40 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 45 insertions(+) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index f53fd46a456..6eccff2e7c7 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2002-10-24 Ulrich Weigand + + * 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 * 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 475e6fa87e4..a14555d0bf0 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).