From 1f70491b9910eaa7dda71bb6e6d58cd6f212ec9e Mon Sep 17 00:00:00 2001 From: Andrew Pinski Date: Tue, 12 Dec 2006 22:45:25 +0000 Subject: [PATCH] re PR tree-optimization/28624 (latent segfault in remove_phi_node) 2006-12-12 Andrew Pinski PR tree-opt/28624 * tree-ssa-dom.c (eliminate_degenerate_phis): Use a temporary bitmap for EXECUTE_IF_SET_IN_BITMAP. From-SVN: r119802 --- gcc/ChangeLog | 6 ++++++ gcc/tree-ssa-dom.c | 10 +++++++++- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 531a1f90889..0e5e595601d 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2006-12-12 Andrew Pinski + + PR tree-opt/28624 + * tree-ssa-dom.c (eliminate_degenerate_phis): Use a temporary + bitmap for EXECUTE_IF_SET_IN_BITMAP. + 2006-12-12 Andrew Pinski PR tree-opt/28436 diff --git a/gcc/tree-ssa-dom.c b/gcc/tree-ssa-dom.c index 7bae33ff43d..73ddc0a9dba 100644 --- a/gcc/tree-ssa-dom.c +++ b/gcc/tree-ssa-dom.c @@ -2466,6 +2466,7 @@ static unsigned int eliminate_degenerate_phis (void) { bitmap interesting_names; + bitmap interesting_names1; /* Bitmap of blocks which need EH information updated. We can not update it on-the-fly as doing so invalidates the dominator tree. */ @@ -2482,6 +2483,7 @@ eliminate_degenerate_phis (void) Experiments have show we generally get better compilation time behavior with bitmaps rather than sbitmaps. */ interesting_names = BITMAP_ALLOC (NULL); + interesting_names1 = BITMAP_ALLOC (NULL); /* First phase. Eliminate degenerate PHIs via a dominator walk of the CFG. @@ -2503,7 +2505,12 @@ eliminate_degenerate_phis (void) unsigned int i; bitmap_iterator bi; - EXECUTE_IF_SET_IN_BITMAP (interesting_names, 0, i, bi) + /* EXECUTE_IF_SET_IN_BITMAP does not like its bitmap + changed during the loop. Copy it to another bitmap and + use that. */ + bitmap_copy (interesting_names1, interesting_names); + + EXECUTE_IF_SET_IN_BITMAP (interesting_names1, 0, i, bi) { tree name = ssa_name (i); @@ -2524,6 +2531,7 @@ eliminate_degenerate_phis (void) } BITMAP_FREE (interesting_names); + BITMAP_FREE (interesting_names1); if (cfg_altered) free_dominance_info (CDI_DOMINATORS); return 0; -- 2.30.2