diff options
author | rth <rth@138bc75d-0d04-0410-961f-82ee72b054a4> | 2009-05-30 00:33:46 +0000 |
---|---|---|
committer | rth <rth@138bc75d-0d04-0410-961f-82ee72b054a4> | 2009-05-30 00:33:46 +0000 |
commit | 25e880b1917bd6bbf07e86b5574c698f3e9472d9 (patch) | |
tree | f977a6cde3ef60ef5e2fd7e916cfad3c81f71215 /gcc/reg-notes.def | |
parent | dc8802ec1484ee3605bf3ba36120ce029e3970ab (diff) | |
download | gcc-25e880b1917bd6bbf07e86b5574c698f3e9472d9.tar.gz |
* cfgcleanup.c (try_crossjump_to_edge): Only skip past
NOTE_INSN_BASIC_BLOCK.
* cfglayout.c (duplicate_insn_chain): Copy epilogue insn marks.
Duplicate NOTE_INSN_EPILOGUE_BEG notes.
* cfgrtl.c (can_delete_note_p): Allow NOTE_INSN_EPILOGUE_BEG
to be deleted.
* dwarf2out.c (struct cfa_loc): Change indirect field to bitfield,
add in_use field.
(add_cfi): Disable check redefining cfa away from drap.
(lookup_cfa_1): Add remember argument; handle remember/restore.
(lookup_cfa): Pass remember argument.
(cfa_remember): New.
(compute_barrier_args_size_1): Remove sibcall check.
(dwarf2out_frame_debug_def_cfa): New.
(dwarf2out_frame_debug_adjust_cfa): New.
(dwarf2out_frame_debug_cfa_offset): New.
(dwarf2out_frame_debug_cfa_register): New.
(dwarf2out_frame_debug_cfa_restore): New.
(dwarf2out_frame_debug): Handle REG_CFA_* notes.
(dwarf2out_begin_epilogue): New.
(dwarf2out_frame_debug_restore_state): New.
(dw_cfi_oprnd1_desc): Handle DW_CFA_remember_state,
DW_CFA_restore_state.
(output_cfi_directive): Likewise.
(convert_cfa_to_fb_loc_list): Likewise.
(dw_cfi_oprnd1_desc): Handle DW_CFA_restore.
* dwarf2out.h: Update.
* emit-rtl.c (try_split): Don't split RTX_FRAME_RELATED_P.
(copy_insn_1): Early out for null.
* final.c (final_scan_insn): Call dwarf2out_begin_epilogue
and dwarf2out_frame_debug_restore_state.
* function.c (prologue, epilogue, sibcall_epilogue): Remove.
(prologue_insn_hash, epilogue_insn_hash): New.
(free_after_compilation): Adjust freeing accordingly.
(record_insns): Create hash table if needed; push insns into
hash instead of array.
(maybe_copy_epilogue_insn): New.
(contains): Search hash table instead of array.
(sibcall_epilogue_contains): Remove.
(thread_prologue_and_epilogue_insns): Split eh_return insns
and mark them as epilogues.
(reposition_prologue_and_epilogue_notes): Rewrite epilogue
scanning in terms of basic blocks.
* insn-notes.def (CFA_RESTORE_STATE): New.
* jump.c (returnjump_p_1): Accept EH_RETURN.
(eh_returnjump_p_1, eh_returnjump_p): New.
* reg-notes.def (CFA_DEF_CFA, CFA_ADJUST_CFA, CFA_OFFSET,
CFA_REGISTER, CFA_RESTORE): New.
* rtl.def (EH_RETURN): New.
* rtl.h (eh_returnjump_p, maybe_copy_epilogue_insn): Declare.
* config/bfin/bfin.md (UNSPEC_VOLATILE_EH_RETURN): Remove.
(eh_return_internal): Use eh_return rtx; split w/ epilogue.
* config/i386/i386.c (gen_push): Update cfa state.
(pro_epilogue_adjust_stack): Add set_cfa argument. When true,
add a CFA_ADJUST_CFA note.
(ix86_dwarf_handle_frame_unspec): Remove.
(ix86_expand_prologue): Update cfa state.
(ix86_emit_restore_reg_using_pop): New.
(ix86_emit_restore_regs_using_pop): New.
(ix86_emit_leave): New.
(ix86_emit_restore_regs_using_mov): Add CFA_RESTORE notes.
(ix86_expand_epilogue): Add notes for unwinding the epilogue.
* config/i386/i386.h (struct machine_cfa_state): New.
(ix86_cfa_state): New.
* config/i386/i386.md (UNSPEC_EH_RETURN): Remove.
(eh_return_internal): Merge from eh_return_<mode>,
use eh_return rtx, split w/ epilogue.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@147995 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/reg-notes.def')
-rw-r--r-- | gcc/reg-notes.def | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/gcc/reg-notes.def b/gcc/reg-notes.def index 60e41bb9803..90b5fde3feb 100644 --- a/gcc/reg-notes.def +++ b/gcc/reg-notes.def @@ -118,6 +118,41 @@ REG_NOTE (BR_PRED) instead of intuition. */ REG_NOTE (FRAME_RELATED_EXPR) +/* Attached to insns that are RTX_FRAME_RELATED_P, but are too complex + for FRAME_RELATED_EXPR intuition. The insn's first pattern must be + a SET, and the destination must be the CFA register. The attached + rtx is an expression that defines the CFA. In the simplest case, the + rtx could be just the stack_pointer_rtx; more common would be a PLUS + with a base register and a constant offset. In the most complicated + cases, this will result in a DW_CFA_def_cfa_expression with the rtx + expression rendered in a dwarf location expression. */ +REG_NOTE (CFA_DEF_CFA) + +/* Attached to insns that are RTX_FRAME_RELATED_P, but are too complex + for FRAME_RELATED_EXPR intuition. This note adjusts the expression + from which the CFA is computed. The attached rtx defines a new CFA + expression, relative to the old CFA expression. This rtx must be of + the form (SET new-cfa-reg (PLUS old-cfa-reg const_int)). If the note + rtx is NULL, we use the first SET of the insn. */ +REG_NOTE (CFA_ADJUST_CFA) + +/* Similar to FRAME_RELATED_EXPR, with the additional information that + this is a save to memory, i.e. will result in DW_CFA_offset or the + like. The pattern or the insn should be a simple store relative to + the CFA. */ +REG_NOTE (CFA_OFFSET) + +/* Similar to FRAME_RELATED_EXPR, with the additional information that this + is a save to a register, i.e. will result in DW_CFA_register. The insn + or the pattern should be simple reg-reg move. */ +REG_NOTE (CFA_REGISTER) + +/* Attached to insns that are RTX_FRAME_RELATED_P, with the information + that this is a restore operation, i.e. will result in DW_CFA_restore + or the like. Either the attached rtx, or the destination of the insn's + first pattern is the register to be restored. */ +REG_NOTE (CFA_RESTORE) + /* Indicates that REG holds the exception context for the function. This context is shared by inline functions, so the code to acquire the real exception context is delayed until after inlining. */ |