From 8c87f107ff50fd839521ae057ee4f09d1f87feba Mon Sep 17 00:00:00 2001 From: Richard Kenner Date: Wed, 27 Dec 1995 15:25:35 -0500 Subject: [PATCH] (find_best_addr): Make sure folded address better before using. From-SVN: r10873 --- gcc/cse.c | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/gcc/cse.c b/gcc/cse.c index efd05dedaf9..fd086c5f778 100644 --- a/gcc/cse.c +++ b/gcc/cse.c @@ -2660,9 +2660,21 @@ find_best_addr (insn, loc) sometimes simplify the expression. Many simplifications will not be valid, but some, usually applying the associative rule, will be valid and produce better code. */ - if (GET_CODE (addr) != REG - && validate_change (insn, loc, fold_rtx (addr, insn), 0)) - addr = *loc; + if (GET_CODE (addr) != REG) + { + rtx folded = fold_rtx (copy_rtx (addr), NULL_RTX); + + if (1 +#ifdef ADDRESS_COST + && (ADDRESS_COST (folded) < ADDRESS_COST (addr) + || (ADDRESS_COST (folded) == ADDRESS_COST (addr) + && rtx_cost (folded) > rtx_cost (addr))) +#else + && rtx_cost (folded) < rtx_cost (addr) +#endif + && validate_change (insn, loc, folded, 0)) + addr = folded; + } /* If this address is not in the hash table, we can't look for equivalences of the whole address. Also, ignore if volatile. */ -- 2.30.2