From: John David Anglin Date: Fri, 23 Oct 2009 20:15:45 +0000 (+0000) Subject: backport: pa.md (reload_inhi, [...]): New patterns. X-Git-Tag: releases/gcc-4.3.5~328 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e41d01fa45a614db10b78f90d397089fd6b44375;p=thirdparty%2Fgcc.git backport: pa.md (reload_inhi, [...]): New patterns. Backport from mainline: 2009-08-19 John David Anglin * pa.md (reload_inhi, reload_outhi, reload_inqi, reload_outqi): New patterns. * pa.c (emit_move_sequence): Check if address of operand1 is valid for mode mode of operand0 when doing secondary reload for SAR. From-SVN: r153514 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 85d4ff694d40..e32dbd38d0cd 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,13 @@ +2009-10-23 John David Anglin + + Backport from mainline: + 2009-08-19 John David Anglin + + * pa.md (reload_inhi, reload_outhi, reload_inqi, reload_outqi): New + patterns. + * pa.c (emit_move_sequence): Check if address of operand1 is valid + for mode mode of operand0 when doing secondary reload for SAR. + 2009-10-20 John David Anglin Backport from mainline: diff --git a/gcc/config/pa/pa.c b/gcc/config/pa/pa.c index 57df9f2ff307..77597475ef1f 100644 --- a/gcc/config/pa/pa.c +++ b/gcc/config/pa/pa.c @@ -1618,7 +1618,7 @@ emit_move_sequence (rtx *operands, enum machine_mode mode, rtx scratch_reg) /* D might not fit in 14 bits either; for such cases load D into scratch reg. */ if (GET_CODE (operand1) == MEM - && !memory_address_p (Pmode, XEXP (operand1, 0))) + && !memory_address_p (GET_MODE (operand0), XEXP (operand1, 0))) { /* We are reloading the address into the scratch register, so we want to make sure the scratch register is a full register. */ diff --git a/gcc/config/pa/pa.md b/gcc/config/pa/pa.md index 69fd58a1bb6f..0bd2e0a4748f 100644 --- a/gcc/config/pa/pa.md +++ b/gcc/config/pa/pa.md @@ -3181,6 +3181,40 @@ DONE; }") +;; Handle HImode input reloads requiring a general register as a +;; scratch register. +(define_expand "reload_inhi" + [(set (match_operand:HI 0 "register_operand" "=Z") + (match_operand:HI 1 "non_hard_reg_operand" "")) + (clobber (match_operand:HI 2 "register_operand" "=&r"))] + "" + " +{ + if (emit_move_sequence (operands, HImode, operands[2])) + DONE; + + /* We don't want the clobber emitted, so handle this ourselves. */ + emit_insn (gen_rtx_SET (VOIDmode, operands[0], operands[1])); + DONE; +}") + +;; Handle HImode output reloads requiring a general register as a +;; scratch register. +(define_expand "reload_outhi" + [(set (match_operand:HI 0 "non_hard_reg_operand" "") + (match_operand:HI 1 "register_operand" "Z")) + (clobber (match_operand:HI 2 "register_operand" "=&r"))] + "" + " +{ + if (emit_move_sequence (operands, HImode, operands[2])) + DONE; + + /* We don't want the clobber emitted, so handle this ourselves. */ + emit_insn (gen_rtx_SET (VOIDmode, operands[0], operands[1])); + DONE; +}") + (define_insn "" [(set (match_operand:HI 0 "move_dest_operand" "=r,r,r,r,r,Q,!*q,!r") @@ -3305,6 +3339,40 @@ DONE; }") +;; Handle QImode input reloads requiring a general register as a +;; scratch register. +(define_expand "reload_inqi" + [(set (match_operand:QI 0 "register_operand" "=Z") + (match_operand:QI 1 "non_hard_reg_operand" "")) + (clobber (match_operand:QI 2 "register_operand" "=&r"))] + "" + " +{ + if (emit_move_sequence (operands, QImode, operands[2])) + DONE; + + /* We don't want the clobber emitted, so handle this ourselves. */ + emit_insn (gen_rtx_SET (VOIDmode, operands[0], operands[1])); + DONE; +}") + +;; Handle QImode output reloads requiring a general register as a +;; scratch register. +(define_expand "reload_outqi" + [(set (match_operand:QI 0 "non_hard_reg_operand" "") + (match_operand:QI 1 "register_operand" "Z")) + (clobber (match_operand:QI 2 "register_operand" "=&r"))] + "" + " +{ + if (emit_move_sequence (operands, QImode, operands[2])) + DONE; + + /* We don't want the clobber emitted, so handle this ourselves. */ + emit_insn (gen_rtx_SET (VOIDmode, operands[0], operands[1])); + DONE; +}") + (define_insn "" [(set (match_operand:QI 0 "move_dest_operand" "=r,r,r,r,r,Q,!*q,!r")