From d1485032c8ae427d2090b32d8dfc50e207f64fd9 Mon Sep 17 00:00:00 2001 From: Jason Merrill Date: Sat, 18 Oct 1997 21:10:32 +0000 Subject: 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 --- gcc/dwarf2out.c | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) (limited to 'gcc/dwarf2out.c') 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) -- cgit v1.1