diff options
author | Jason Merrill <jason@yorick.cygnus.com> | 1997-10-18 21:10:32 +0000 |
---|---|---|
committer | Jason Merrill <jason@gcc.gnu.org> | 1997-10-18 17:10:32 -0400 |
commit | d1485032c8ae427d2090b32d8dfc50e207f64fd9 (patch) | |
tree | 3d75f9c5827cef9704b4bbc12cbda4145c21754a /gcc/dwarf2out.c | |
parent | 6bd35f867188095d5a51f49917f245995b5f97b3 (diff) | |
download | gcc-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.c | 22 |
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) |