diff options
author | kenner <kenner@138bc75d-0d04-0410-961f-82ee72b054a4> | 2001-07-04 17:43:18 +0000 |
---|---|---|
committer | kenner <kenner@138bc75d-0d04-0410-961f-82ee72b054a4> | 2001-07-04 17:43:18 +0000 |
commit | 537ffcfc50a329aa4be838127266a1cb06083133 (patch) | |
tree | df66055b376252d4e98b02a6a2492ca9f4731ad2 /gcc/config/arm | |
parent | da31bd92c01701e2bf94aa2cdaf5a57e5ce21f42 (diff) | |
download | gcc-537ffcfc50a329aa4be838127266a1cb06083133.tar.gz |
* emit-rtl.c (replace_equiv_address): New function.
* expr.h (replace_equiv_address): New declaration.
* explow.c (validize_mem): Call it instead of change_address and
also call if -fforce-addr and address is constant.
* expr.c: Replace more calls to change_address with adjust_address
and/or replace_equiv_address or to validize_mem.
* function.c, regmove.c, config/alpha/alpha.c: Likewise.
* config/arm/arm.md, config/clipper/clipper.md: Likewise.
* config/dsp16xx/dsp16xx.md, config/fr30/fr30.c: Likewise.
* config/i370/i370.md, config/i860/i860.md: Likewise.
* config/i960/i960.md, config/mips/mips.c: Likewise.
* config/mips/mips.md, config/pa/pa.md: Likewise.
* config/pdp11/pdp11.md, config/rs6000/rs6000.c: Likewise.
* config/rs6000/rs6000.md, config/sh/sh.md: Likewise.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@43762 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/config/arm')
-rw-r--r-- | gcc/config/arm/arm.md | 50 |
1 files changed, 23 insertions, 27 deletions
diff --git a/gcc/config/arm/arm.md b/gcc/config/arm/arm.md index 663877de3e4..fea195483d5 100644 --- a/gcc/config/arm/arm.md +++ b/gcc/config/arm/arm.md @@ -4282,15 +4282,15 @@ "TARGET_ARM" " { - rtx addr = XEXP (operands[1], 0); + rtx op1 = operands[1]; + rtx addr = XEXP (op1, 0); enum rtx_code code = GET_CODE (addr); if ((code == PLUS && GET_CODE (XEXP (addr, 1)) != CONST_INT) || code == MINUS) - addr = force_reg (SImode, addr); + op1 = replace_equiv_address (operands[1], force_reg (SImode, addr)); - operands[4] = change_address (operands[1], QImode, - plus_constant (addr, 1)); + operands[4] = adjust_address (op1, QImode, 1); operands[1] = adjust_address (operands[1], QImode, 0); operands[3] = gen_lowpart (QImode, operands[0]); operands[0] = gen_lowpart (SImode, operands[0]); @@ -4306,15 +4306,15 @@ "TARGET_ARM" " { - rtx addr = XEXP (operands[1], 0); + rtx op1 = operands[1]; + rtx addr = XEXP (op1, 0); enum rtx_code code = GET_CODE (addr); if ((code == PLUS && GET_CODE (XEXP (addr, 1)) != CONST_INT) || code == MINUS) - addr = force_reg (SImode, addr); + op1 = replace_equiv_address (op1, force_reg (SImode, addr)); - operands[4] = change_address (operands[1], QImode, - plus_constant (addr, 1)); + operands[4] = adjust_address (op1, QImode, 1); operands[1] = adjust_address (operands[1], QImode, 0); operands[3] = gen_lowpart (QImode, operands[0]); operands[0] = gen_lowpart (SImode, operands[0]); @@ -4332,11 +4332,12 @@ { HOST_WIDE_INT value = INTVAL (operands[1]); rtx addr = XEXP (operands[0], 0); + rtx op0 = operands[0]; enum rtx_code code = GET_CODE (addr); if ((code == PLUS && GET_CODE (XEXP (addr, 1)) != CONST_INT) || code == MINUS) - addr = force_reg (SImode, addr); + op0 = replace_equiv_address (op0, force_reg (SImode, addr)); operands[1] = gen_reg_rtx (SImode); if (BYTES_BIG_ENDIAN) @@ -4362,8 +4363,7 @@ } } - operands[3] = change_address (operands[0], QImode, - plus_constant (addr, 1)); + operands[3] = adjust_address (op0, QImode, 1); operands[0] = adjust_address (operands[0], QImode, 0); }" ) @@ -4550,18 +4550,16 @@ if (GET_CODE (operands[0]) == MEM && !memory_address_p (GET_MODE (operands[0]), XEXP (operands[0], 0))) - { - rtx temp = copy_to_reg (XEXP (operands[0], 0)); - operands[0] = change_address (operands[0], VOIDmode, temp); - } + operands[0] + = replace_equiv_address (operands[0], + copy_to_reg (XEXP (operands[0], 0))); if (GET_CODE (operands[1]) == MEM && !memory_address_p (GET_MODE (operands[1]), XEXP (operands[1], 0))) - { - rtx temp = copy_to_reg (XEXP (operands[1], 0)); - operands[1] = change_address (operands[1], VOIDmode, temp); - } + operands[1] + = replace_equiv_address (operands[1], + copy_to_reg (XEXP (operands[1], 0))); } /* Handle loading a large integer during reload */ else if (GET_CODE (operands[1]) == CONST_INT @@ -4850,17 +4848,15 @@ if (GET_CODE (operands[0]) == MEM && !memory_address_p (GET_MODE (operands[0]), XEXP (operands[0], 0))) - { - rtx temp = copy_to_reg (XEXP (operands[0], 0)); - operands[0] = change_address (operands[0], VOIDmode, temp); - } + operands[0] + = replace_equiv_address (operands[0], + copy_to_reg (XEXP (operands[0], 0))); if (GET_CODE (operands[1]) == MEM && !memory_address_p (GET_MODE (operands[1]), XEXP (operands[1], 0))) - { - rtx temp = copy_to_reg (XEXP (operands[1], 0)); - operands[1] = change_address (operands[1], VOIDmode, temp); - } + operands[1] + = replace_equiv_address (operands[1], + copy_to_reg (XEXP (operands[1], 0))); } /* Handle loading a large integer during reload */ else if (GET_CODE (operands[1]) == CONST_INT |