diff options
author | Jakub Jelinek <jakub@redhat.com> | 2012-01-27 10:26:48 +0100 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2012-01-27 10:26:48 +0100 |
commit | ae25db4568034756df727d432dd48caa5e5f41dc (patch) | |
tree | 16e846864fdcef1a44f9052759fe3138b9c8ffe4 /gcc | |
parent | 1228a6a69b9fddc0aaa2b462db44d3d2bef4f22f (diff) | |
download | gcc-ae25db4568034756df727d432dd48caa5e5f41dc.zip gcc-ae25db4568034756df727d432dd48caa5e5f41dc.tar.gz gcc-ae25db4568034756df727d432dd48caa5e5f41dc.tar.bz2 |
re PR debug/52001 (Huge compile-time regression with var-tracking)
PR debug/52001
* var-tracking.c (reverse_op): Don't add any reverse operation
if V already has any constant locations.
From-SVN: r183608
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/var-tracking.c | 9 |
2 files changed, 15 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 0a4e08b..fe748f4 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2012-01-27 Jakub Jelinek <jakub@redhat.com> + + PR debug/52001 + * var-tracking.c (reverse_op): Don't add any reverse operation + if V already has any constant locations. + 2012-01-27 Sandra Loosemore <sandra@codesourcery.com> * doc/invoke.texi: Correct usage of "command line" (noun) diff --git a/gcc/var-tracking.c b/gcc/var-tracking.c index 557a2ca..1f4903a 100644 --- a/gcc/var-tracking.c +++ b/gcc/var-tracking.c @@ -5298,6 +5298,7 @@ reverse_op (rtx val, const_rtx expr, rtx insn) { rtx src, arg, ret; cselib_val *v; + struct elt_loc_list *l; enum rtx_code code; if (GET_CODE (expr) != SET) @@ -5333,6 +5334,14 @@ reverse_op (rtx val, const_rtx expr, rtx insn) if (!v || !cselib_preserved_value_p (v)) return; + /* 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. */ + for (l = v->locs; l; l = l->next) + if (CONSTANT_P (l->loc) + && (GET_CODE (l->loc) != CONST || !references_value_p (l->loc, 0))) + return; + switch (GET_CODE (src)) { case NOT: |