aboutsummaryrefslogtreecommitdiff
path: root/gcc/flow.c
diff options
context:
space:
mode:
authorJan Hubicka <jh@suse.cz>2006-07-29 15:14:22 +0200
committerJan Hubicka <hubicka@gcc.gnu.org>2006-07-29 13:14:22 +0000
commit370adb7b5dcde35845e0d7b43cf05628a6193c7a (patch)
tree331dc480555ba8c366d3435b80e94c76d4cc12f0 /gcc/flow.c
parent76ebb8de0046b5bbdb13c086618be11becd964d1 (diff)
downloadgcc-370adb7b5dcde35845e0d7b43cf05628a6193c7a.zip
gcc-370adb7b5dcde35845e0d7b43cf05628a6193c7a.tar.gz
gcc-370adb7b5dcde35845e0d7b43cf05628a6193c7a.tar.bz2
re PR middle-end/28071 (A file that can not be compiled in reasonable time/space)
PR rtl-optimization/28071 * cfgrtl.c (rtl_delete_block): Free regsets. * flow.c (allocate_bb_life_data): Re-use regsets if available. From-SVN: r115810
Diffstat (limited to 'gcc/flow.c')
-rw-r--r--gcc/flow.c12
1 files changed, 10 insertions, 2 deletions
diff --git a/gcc/flow.c b/gcc/flow.c
index 4913102..4989db3 100644
--- a/gcc/flow.c
+++ b/gcc/flow.c
@@ -1564,8 +1564,16 @@ allocate_bb_life_data (void)
FOR_BB_BETWEEN (bb, ENTRY_BLOCK_PTR, NULL, next_bb)
{
- bb->il.rtl->global_live_at_start = ALLOC_REG_SET (&reg_obstack);
- bb->il.rtl->global_live_at_end = ALLOC_REG_SET (&reg_obstack);
+ if (bb->il.rtl->global_live_at_start)
+ {
+ CLEAR_REG_SET (bb->il.rtl->global_live_at_start);
+ CLEAR_REG_SET (bb->il.rtl->global_live_at_end);
+ }
+ else
+ {
+ bb->il.rtl->global_live_at_start = ALLOC_REG_SET (&reg_obstack);
+ bb->il.rtl->global_live_at_end = ALLOC_REG_SET (&reg_obstack);
+ }
}
regs_live_at_setjmp = ALLOC_REG_SET (&reg_obstack);