diff options
author | Alexandre Oliva <aoliva@gcc.gnu.org> | 2007-10-02 01:28:06 +0000 |
---|---|---|
committer | Alexandre Oliva <aoliva@gcc.gnu.org> | 2007-10-02 01:28:06 +0000 |
commit | d1aed86b6657e21134c48f68bace41793e3f8e98 (patch) | |
tree | 4ae8b9479a85461b3b4d4d15313a3ec3809c54a7 /gcc | |
parent | 6cd9e97f91364ff0992aeb1a3a7e48fd110c107b (diff) | |
download | gcc-d1aed86b6657e21134c48f68bace41793e3f8e98.zip gcc-d1aed86b6657e21134c48f68bace41793e3f8e98.tar.gz gcc-d1aed86b6657e21134c48f68bace41793e3f8e98.tar.bz2 |
Revert patches that should have been installed in the vta branch only.
From-SVN: r128933
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog.vta | 10 | ||||
-rw-r--r-- | gcc/tree-ssa-live.c | 39 |
2 files changed, 35 insertions, 14 deletions
diff --git a/gcc/ChangeLog.vta b/gcc/ChangeLog.vta deleted file mode 100644 index 12ef27f..0000000 --- a/gcc/ChangeLog.vta +++ /dev/null @@ -1,10 +0,0 @@ -2007-10-01 Alexandre Oliva <aoliva@redhat.com> - - * tree-ssa-live.c (remove_unused_scope_block_p): Don't change - generated code depending on -g. Reverts part of 2007-07-26's - patch. - -Local Variables: -mode: change-log -change-log-default-name: "ChangeLog.vta" -End: diff --git a/gcc/tree-ssa-live.c b/gcc/tree-ssa-live.c index 4cf6620..a78dd9c 100644 --- a/gcc/tree-ssa-live.c +++ b/gcc/tree-ssa-live.c @@ -468,10 +468,39 @@ mark_scope_block_unused (tree scope) static bool remove_unused_scope_block_p (tree scope) { - tree *t; + tree *t, *next; bool unused = !TREE_USED (scope); + var_ann_t ann; int nsubblocks = 0; + for (t = &BLOCK_VARS (scope); *t; t = next) + { + next = &TREE_CHAIN (*t); + + /* Debug info of nested function refers to the block of the + function. */ + if (TREE_CODE (*t) == FUNCTION_DECL) + unused = false; + + /* When we are outputting debug info, we usually want to output + info about optimized-out variables in the scope blocks. + Exception are the scope blocks not containing any instructions + at all so user can't get into the scopes at first place. */ + else if ((ann = var_ann (*t)) != NULL + && ann->used) + unused = false; + + /* When we are not doing full debug info, we however can keep around + only the used variables for cfgexpand's memory packing saving quite + a lot of memory. */ + else if (debug_info_level != DINFO_LEVEL_NORMAL + && debug_info_level != DINFO_LEVEL_VERBOSE) + { + *t = TREE_CHAIN (*t); + next = t; + } + } + for (t = &BLOCK_SUBBLOCKS (scope); *t ;) if (remove_unused_scope_block_p (*t)) { @@ -504,10 +533,12 @@ remove_unused_scope_block_p (tree scope) /* When there is only one subblock, see if it is just wrapper we can ignore. Wrappers are not declaring any variables and not changing abstract origin. */ - else if (nsubblocks <= 1 + else if (nsubblocks == 1 && (BLOCK_VARS (scope) - || (BLOCK_ABSTRACT_ORIGIN (scope) - != BLOCK_ABSTRACT_ORIGIN (BLOCK_SUPERCONTEXT (scope))))) + || ((debug_info_level == DINFO_LEVEL_NORMAL + || debug_info_level == DINFO_LEVEL_VERBOSE) + && ((BLOCK_ABSTRACT_ORIGIN (scope) + != BLOCK_ABSTRACT_ORIGIN (BLOCK_SUPERCONTEXT (scope))))))) unused = false; return unused; } |