diff options
author | Jason Merrill <jason@gcc.gnu.org> | 2000-12-15 10:10:30 -0500 |
---|---|---|
committer | Jason Merrill <jason@gcc.gnu.org> | 2000-12-15 10:10:30 -0500 |
commit | 745b909395539378b31154a57d159223c37b1e03 (patch) | |
tree | 3860b72608b161a601c21048bd63f5856dcbebb0 /gcc | |
parent | ad334b51696beb8fe749cca68aa082622743cebb (diff) | |
download | gcc-745b909395539378b31154a57d159223c37b1e03.zip gcc-745b909395539378b31154a57d159223c37b1e03.tar.gz gcc-745b909395539378b31154a57d159223c37b1e03.tar.bz2 |
jump.c (jump_optimize_1): Don't delete the line note after the prologue even if it seems redundant.
* jump.c (jump_optimize_1): Don't delete the line note after the
prologue even if it seems redundant.
* config/arm/arm.c (arm_expand_prologue): Set RTX_FRAME_RELATED_P
on all insns used to adjust the stack.
From-SVN: r38286
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 44 | ||||
-rw-r--r-- | gcc/config/arm/arm.c | 10 | ||||
-rw-r--r-- | gcc/jump.c | 25 |
3 files changed, 51 insertions, 28 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index bf665e4..598529a 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,11 @@ +2000-12-15 Jason Merrill <jason@redhat.com> + + * jump.c (jump_optimize_1): Don't delete the line note after the + prologue even if it seems redundant. + + * config/arm/arm.c (arm_expand_prologue): Set RTX_FRAME_RELATED_P + on all insns used to adjust the stack. + Fri Dec 15 15:32:16 MET 2000 Jan Hubicka <jh@suse.cz> * combine.c (cant_combine_insn_p): Get around SUBREGs when determining @@ -207,24 +215,24 @@ Mon Dec 11 13:51:09 2000 Jeffrey A Law (law@cygnus.com) 2000-12-11 Neil Booth <neilb@earthling.net> - * cpperror.c (print_location): New function. - (print_containing_files): Simplify. - (_cpp_begin_message): Simplify and use print_location. - * cppfiles.c (stack_include_file): Update. - (_cpp_pop_file_buffer): Update. - * cpphash.h (struct cpp_buffer): New members - include_stack_listed and type. - * cpplib.c (_cpp_handle_directive): Buffer->inc is not null. - (run_directive): Take buffer type. cpp_push_buffer cannot fail. - (_cpp_do__Pragma, cpp_define, _cpp_define_builtin, cpp_undef, - handle_assertion): Update. - (cpp_push_buffer): Take a buffer type and file name. - (cpp_pop_buffer): Update. Clear include_stack_listed. - * cpplib.h (input_stack_listing_current): Remove. - (enum cpp_buffer_type): New. - (cpp_push_buffer): New prototype. - * cppmacro.c (builtin_macro): Simplify; buffer cannot be null. - * fix-header.c (read_scan_file): Update. + * cpperror.c (print_location): New function. + (print_containing_files): Simplify. + (_cpp_begin_message): Simplify and use print_location. + * cppfiles.c (stack_include_file): Update. + (_cpp_pop_file_buffer): Update. + * cpphash.h (struct cpp_buffer): New members + include_stack_listed and type. + * cpplib.c (_cpp_handle_directive): Buffer->inc is not null. + (run_directive): Take buffer type. cpp_push_buffer cannot fail. + (_cpp_do__Pragma, cpp_define, _cpp_define_builtin, cpp_undef, + handle_assertion): Update. + (cpp_push_buffer): Take a buffer type and file name. + (cpp_pop_buffer): Update. Clear include_stack_listed. + * cpplib.h (input_stack_listing_current): Remove. + (enum cpp_buffer_type): New. + (cpp_push_buffer): New prototype. + * cppmacro.c (builtin_macro): Simplify; buffer cannot be null. + * fix-header.c (read_scan_file): Update. 2000-12-10 Robert Lipe <robertlipe@usa.net> diff --git a/gcc/config/arm/arm.c b/gcc/config/arm/arm.c index f5541af..ee2757c 100644 --- a/gcc/config/arm/arm.c +++ b/gcc/config/arm/arm.c @@ -7848,9 +7848,17 @@ arm_expand_prologue () if (amount != const0_rtx) { + /* This add can produce multiple insns for a large constant, so we + need to get tricky. */ + rtx last = get_last_insn (); insn = emit_insn (gen_addsi3 (stack_pointer_rtx, stack_pointer_rtx, amount)); - RTX_FRAME_RELATED_P (insn) = 1; + do + { + last = last ? NEXT_INSN (last) : get_insns (); + RTX_FRAME_RELATED_P (last) = 1; + } + while (last != insn); /* If the frame pointer is needed, emit a special barrier that will prevent the scheduler from moving stores to the frame @@ -723,18 +723,25 @@ jump_optimize_1 (f, cross_jump, noop_moves, after_regscan, rtx last_note = 0; for (insn = f; insn; insn = NEXT_INSN (insn)) - if (GET_CODE (insn) == NOTE && NOTE_LINE_NUMBER (insn) >= 0) + if (GET_CODE (insn) == NOTE) { - /* Delete this note if it is identical to previous note. */ - if (last_note - && NOTE_SOURCE_FILE (insn) == NOTE_SOURCE_FILE (last_note) - && NOTE_LINE_NUMBER (insn) == NOTE_LINE_NUMBER (last_note)) + if (NOTE_LINE_NUMBER (insn) == NOTE_INSN_FUNCTION_BEG) + /* Any previous line note was for the prologue; gdb wants a new + note after the prologue even if it is for the same line. */ + last_note = NULL_RTX; + else if (NOTE_LINE_NUMBER (insn) >= 0) { - delete_insn (insn); - continue; - } + /* Delete this note if it is identical to previous note. */ + if (last_note + && NOTE_SOURCE_FILE (insn) == NOTE_SOURCE_FILE (last_note) + && NOTE_LINE_NUMBER (insn) == NOTE_LINE_NUMBER (last_note)) + { + delete_insn (insn); + continue; + } - last_note = insn; + last_note = insn; + } } } |