From 0e22465644731d86e2d317bf5fbfab2a76eccc9c Mon Sep 17 00:00:00 2001 From: Alexandre Oliva Date: Sat, 25 Feb 2012 12:09:27 +0000 Subject: re PR debug/52001 (Huge compile-time regression with var-tracking) PR debug/52001 * cselib.c (preserve_only_constants): Rename to... (preserve_constants_and_equivs): ... this. Split out... (invariant_or_equiv_p): ... this. Preserve plus expressions of other preserved expressions too. (cselib_reset_table): Adjust. * var-tracking.c (reverse_op): Use canonical value to build reverse operation. From-SVN: r184571 --- gcc/var-tracking.c | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'gcc/var-tracking.c') diff --git a/gcc/var-tracking.c b/gcc/var-tracking.c index e9b5ca886ae..c6280e2c1f1 100644 --- a/gcc/var-tracking.c +++ b/gcc/var-tracking.c @@ -5334,6 +5334,10 @@ reverse_op (rtx val, const_rtx expr, rtx insn) if (!v || !cselib_preserved_value_p (v)) return; + /* Use canonical V to avoid creating multiple redundant expressions + for different VALUES equivalent to V. */ + v = canonical_cselib_val (v); + /* Adding a reverse op isn't useful if V already has an always valid location. Ignore ENTRY_VALUE, while it is always constant, we should prefer non-ENTRY_VALUE locations whenever possible. */ -- cgit v1.2.1