From 6c6678595b48c2a69d6711eb84b2f1214f69d5bf Mon Sep 17 00:00:00 2001 From: Arend Bayer Date: Thu, 27 Jan 2005 23:00:19 +0000 Subject: cse.c: (find_best_addr): Don't call copy_rtx before calling fold_rtx. * cse.c: (find_best_addr): Don't call copy_rtx before calling fold_rtx. Save cost recomputation if fold_rtx did nothing. (fold_rtx) : Don't do anything if INSN is NULL_RTX. Co-Authored-By: Kazu Hirata From-SVN: r94345 --- gcc/cse.c | 36 +++++++++++++++++++++--------------- 1 file changed, 21 insertions(+), 15 deletions(-) (limited to 'gcc/cse.c') diff --git a/gcc/cse.c b/gcc/cse.c index febf243..54d184a 100644 --- a/gcc/cse.c +++ b/gcc/cse.c @@ -2844,18 +2844,21 @@ find_best_addr (rtx insn, rtx *loc, enum machine_mode mode) be valid and produce better code. */ if (!REG_P (addr)) { - rtx folded = fold_rtx (copy_rtx (addr), NULL_RTX); - int addr_folded_cost = address_cost (folded, mode); - int addr_cost = address_cost (addr, mode); - - if ((addr_folded_cost < addr_cost - || (addr_folded_cost == addr_cost - /* ??? The rtx_cost comparison is left over from an older - version of this code. It is probably no longer helpful. */ - && (rtx_cost (folded, MEM) > rtx_cost (addr, MEM) - || approx_reg_cost (folded) < approx_reg_cost (addr)))) - && validate_change (insn, loc, folded, 0)) - addr = folded; + rtx folded = fold_rtx (addr, NULL_RTX); + if (folded != addr) + { + int addr_folded_cost = address_cost (folded, mode); + int addr_cost = address_cost (addr, mode); + + if ((addr_folded_cost < addr_cost + || (addr_folded_cost == addr_cost + /* ??? The rtx_cost comparison is left over from an older + version of this code. It is probably no longer helpful.*/ + && (rtx_cost (folded, MEM) > rtx_cost (addr, MEM) + || approx_reg_cost (folded) < approx_reg_cost (addr)))) + && validate_change (insn, loc, folded, 0)) + addr = folded; + } } /* If this address is not in the hash table, we can't look for equivalences @@ -3608,9 +3611,12 @@ fold_rtx (rtx x, rtx insn) #endif case ASM_OPERANDS: - for (i = ASM_OPERANDS_INPUT_LENGTH (x) - 1; i >= 0; i--) - validate_change (insn, &ASM_OPERANDS_INPUT (x, i), - fold_rtx (ASM_OPERANDS_INPUT (x, i), insn), 0); + if (insn) + { + for (i = ASM_OPERANDS_INPUT_LENGTH (x) - 1; i >= 0; i--) + validate_change (insn, &ASM_OPERANDS_INPUT (x, i), + fold_rtx (ASM_OPERANDS_INPUT (x, i), insn), 0); + } break; default: -- cgit v1.1