From: Jakub Jelinek Date: Thu, 7 Apr 2011 21:27:02 +0000 (+0200) Subject: backport: re PR rtl-optimization/48141 (DSE compile time hog) X-Git-Tag: releases/gcc-4.4.6~52 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c404d187c8a0c0cb4d316fa9d966cc614bb0a8c8;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: r172132 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index f28377a9623e..23e70e3201bf 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +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-04-07 Jakub Jelinek PR tree-optimization/46491 diff --git a/gcc/dse.c b/gcc/dse.c index 844fd51c96c2..cf3ddceea82d 100644 --- a/gcc/dse.c +++ b/gcc/dse.c @@ -1588,8 +1588,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) @@ -1600,8 +1599,9 @@ record_store (rtx body, bb_info_t bb_info) last->next_local_store = ptr->next_local_store; 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 d4904a60e2c6..fc75684014d2 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. + 2010-11-15 Jakub Jelinek PR tree-optimization/46491 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; +}