aboutsummaryrefslogtreecommitdiff
path: root/gcc/dwarf2out.c
diff options
context:
space:
mode:
authorJason Merrill <jason@yorick.cygnus.com>1997-10-18 21:10:32 +0000
committerJason Merrill <jason@gcc.gnu.org>1997-10-18 17:10:32 -0400
commitd1485032c8ae427d2090b32d8dfc50e207f64fd9 (patch)
tree3d75f9c5827cef9704b4bbc12cbda4145c21754a /gcc/dwarf2out.c
parent6bd35f867188095d5a51f49917f245995b5f97b3 (diff)
downloadgcc-d1485032c8ae427d2090b32d8dfc50e207f64fd9.zip
gcc-d1485032c8ae427d2090b32d8dfc50e207f64fd9.tar.gz
gcc-d1485032c8ae427d2090b32d8dfc50e207f64fd9.tar.bz2
tree.c (restore_tree_status): Also free up temporary storage when we finish a toplevel function.
* tree.c (restore_tree_status): Also free up temporary storage when we finish a toplevel function. (dump_tree_statistics): Print stats for backend obstacks. * libgcc2.c (__throw): Don't copy the return address. * dwarf2out.c (expand_builtin_dwarf_reg_size): Ignore return address. * except.c (exceptions_via_longjmp): Initialize to 2 (uninitialized). * toplev.c (main): Initialize exceptions_via_longjmp. * tree.c: Add extra_inline_obstacks. (save_tree_status): Use it. (restore_tree_status): If this is a toplevel inline obstack and we didn't want to save anything on it, recycle it. (print_inline_obstack_statistics): New fn. * function.c (pop_function_context_from): Pass context to restore_tree_status. * obstack.h (obstack_empty_p): New macro. From-SVN: r16050
Diffstat (limited to 'gcc/dwarf2out.c')
-rw-r--r--gcc/dwarf2out.c22
1 files changed, 13 insertions, 9 deletions
diff --git a/gcc/dwarf2out.c b/gcc/dwarf2out.c
index 7a49fd4..eebac52 100644
--- a/gcc/dwarf2out.c
+++ b/gcc/dwarf2out.c
@@ -520,27 +520,31 @@ expand_builtin_dwarf_reg_size (reg_tree, target)
tree reg_tree;
rtx target;
{
- int i, n_ranges, size;
+ int size;
struct reg_size_range ranges[5];
tree t, t2;
- ranges[0].beg = 0;
- ranges[0].size = GET_MODE_SIZE (reg_raw_mode[0]);
- n_ranges = 1;
+ int i = 0;
+ int n_ranges = 0;
+ int last_size = -1;
- for (i = 1; i < FIRST_PSEUDO_REGISTER; ++i)
+ for (; i < FIRST_PSEUDO_REGISTER; ++i)
{
+ /* The return address is out of order on the MIPS, and we don't use
+ copy_reg for it anyway, so we don't care here how large it is. */
+ if (DWARF_FRAME_REGNUM (i) == DWARF_FRAME_RETURN_COLUMN)
+ continue;
+
size = GET_MODE_SIZE (reg_raw_mode[i]);
- if (size != ranges[n_ranges-1].size)
+ if (size != last_size)
{
- ranges[n_ranges-1].end = i-1;
ranges[n_ranges].beg = i;
- ranges[n_ranges].size = GET_MODE_SIZE (reg_raw_mode[i]);
+ ranges[n_ranges].size = last_size = GET_MODE_SIZE (reg_raw_mode[i]);
++n_ranges;
assert (n_ranges < 5);
}
+ ranges[n_ranges-1].end = i;
}
- ranges[n_ranges-1].end = i-1;
/* The usual case: fp regs surrounded by general regs. */
if (n_ranges == 3 && ranges[0].size == ranges[2].size)