summaryrefslogtreecommitdiff
path: root/gcc/config/arm
diff options
context:
space:
mode:
authorkenner <kenner@138bc75d-0d04-0410-961f-82ee72b054a4>2001-07-04 17:43:18 +0000
committerkenner <kenner@138bc75d-0d04-0410-961f-82ee72b054a4>2001-07-04 17:43:18 +0000
commit537ffcfc50a329aa4be838127266a1cb06083133 (patch)
treedf66055b376252d4e98b02a6a2492ca9f4731ad2 /gcc/config/arm
parentda31bd92c01701e2bf94aa2cdaf5a57e5ce21f42 (diff)
downloadgcc-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.md50
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