From: Jakub Jelinek Date: Thu, 7 Apr 2011 18:28:29 +0000 (+0200) Subject: backport: re PR rtl-optimization/48141 (DSE compile time hog) X-Git-Tag: releases/gcc-4.5.3~91 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=ac75cc393a60832fa56df7cbcb239133c2f67f27;p=thirdparty%2Fgcc.git backport: re PR rtl-optimization/48141 (DSE compile time hog) Backported from mainline 2011-03-17 Jakub Jelinek PR rtl-optimization/48141 * dse.c (record_store): If no positions are needed in an insn that cannot be deleted, at least unchain it from active_local_stores. * gcc.dg/pr48141.c: New test. From-SVN: r172116 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 5fe612b12971..01ce6860d7d7 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,6 +1,12 @@ 2011-04-07 Jakub Jelinek Backported from mainline + 2011-03-17 Jakub Jelinek + + PR rtl-optimization/48141 + * dse.c (record_store): If no positions are needed in an insn + that cannot be deleted, at least unchain it from active_local_stores. + 2011-03-03 Jakub Jelinek PR c/47963 diff --git a/gcc/dse.c b/gcc/dse.c index 2be8a942c75f..4f7a0683b9c5 100644 --- a/gcc/dse.c +++ b/gcc/dse.c @@ -1592,8 +1592,7 @@ record_store (rtx body, bb_info_t bb_info) /* An insn can be deleted if every position of every one of its s_infos is zero. */ - if (any_positions_needed_p (s_info) - || ptr->cannot_delete) + if (any_positions_needed_p (s_info)) del = false; if (del) @@ -1605,7 +1604,8 @@ record_store (rtx body, bb_info_t bb_info) else active_local_stores = ptr->next_local_store; - delete_dead_store_insn (insn_to_delete); + if (!insn_to_delete->cannot_delete) + delete_dead_store_insn (insn_to_delete); } else last = ptr; diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index a924b4356b3e..175a4548ac81 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,6 +1,11 @@ 2011-04-07 Jakub Jelinek Backported from mainline + 2011-03-17 Jakub Jelinek + + PR rtl-optimization/48141 + * gcc.dg/pr48141.c: New test. + 2011-03-03 Jakub Jelinek PR c/47963 diff --git a/gcc/testsuite/gcc.dg/pr48141.c b/gcc/testsuite/gcc.dg/pr48141.c new file mode 100644 index 000000000000..c2ef79f5912e --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr48141.c @@ -0,0 +1,17 @@ +/* PR rtl-optimization/48141 */ +/* { dg-do compile } */ +/* { dg-options "-O -fno-tree-fre" } */ + +#define A i = 0; +#define B A A A A A A A A A A +#define C B B B B B B B B B B +#define D C C C C C C C C C C +#define E D D D D D D D D D D + +int +foo (void) +{ + volatile int i = 0; + E E E E E E E E E E E + return 0; +}