aboutsummaryrefslogtreecommitdiff
path: root/gcc/cfghooks.c
diff options
context:
space:
mode:
authorZdenek Dvorak <dvorakz@suse.cz>2004-10-07 08:14:15 +0200
committerZdenek Dvorak <rakdver@gcc.gnu.org>2004-10-07 06:14:15 +0000
commita746fd8cdd2153c67ab70e4e17a2cdaa7ca50f94 (patch)
tree710e59e353d684b5781d79e6d8725a5a5754308b /gcc/cfghooks.c
parentcc67d2fa8036ea5b92e83d97faecd3cb38417b80 (diff)
downloadgcc-a746fd8cdd2153c67ab70e4e17a2cdaa7ca50f94.zip
gcc-a746fd8cdd2153c67ab70e4e17a2cdaa7ca50f94.tar.gz
gcc-a746fd8cdd2153c67ab70e4e17a2cdaa7ca50f94.tar.bz2
re PR tree-optimization/17806 (compiler error: in verify_loop_structure, at cfgloop.c:1491 , works -O2, breaks with -O3)
PR tree-optimization/17806 * cfghooks.c (split_edge): Update IRREDUCIBLE_LOOP flags. * cfgloopmanip.c (loop_split_edge_with): Updating of IRREDUCIBLE_LOOP flags moved to split_edge. From-SVN: r88665
Diffstat (limited to 'gcc/cfghooks.c')
-rw-r--r--gcc/cfghooks.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/gcc/cfghooks.c b/gcc/cfghooks.c
index e6a624c..948c2b4 100644
--- a/gcc/cfghooks.c
+++ b/gcc/cfghooks.c
@@ -389,6 +389,7 @@ split_edge (edge e)
gcov_type count = e->count;
int freq = EDGE_FREQUENCY (e);
edge f;
+ bool irr = (e->flags & EDGE_IRREDUCIBLE_LOOP) != 0;
if (!cfg_hooks->split_edge)
internal_error ("%s does not support split_edge.", cfg_hooks->name);
@@ -399,6 +400,13 @@ split_edge (edge e)
EDGE_SUCC (ret, 0)->probability = REG_BR_PROB_BASE;
EDGE_SUCC (ret, 0)->count = count;
+ if (irr)
+ {
+ ret->flags |= BB_IRREDUCIBLE_LOOP;
+ EDGE_PRED (ret, 0)->flags |= EDGE_IRREDUCIBLE_LOOP;
+ EDGE_SUCC (ret, 0)->flags |= EDGE_IRREDUCIBLE_LOOP;
+ }
+
if (dom_computed[CDI_DOMINATORS])
set_immediate_dominator (CDI_DOMINATORS, ret, EDGE_PRED (ret, 0)->src);