diff options
author | Richard Henderson <rth@redhat.com> | 2005-08-31 09:26:51 -0700 |
---|---|---|
committer | Richard Henderson <rth@gcc.gnu.org> | 2005-08-31 09:26:51 -0700 |
commit | be0c514c74a18c5652773c76258dcd7bbc81fade (patch) | |
tree | f7a2dee22307156d52f9729484b53473c1ff7f74 /gcc/function.c | |
parent | 5d3018cee7e9cea99b2b6c823ef3d8ee3c756474 (diff) | |
download | gcc-be0c514c74a18c5652773c76258dcd7bbc81fade.zip gcc-be0c514c74a18c5652773c76258dcd7bbc81fade.tar.gz gcc-be0c514c74a18c5652773c76258dcd7bbc81fade.tar.bz2 |
re PR rtl-optimization/23601 (reload may drop non-call exception information)
PR rtl-opt/23601
* reload1.c (reload): Set MEM_NOTRAP_P in spill slots.
(fixup_eh_region_note): New.
(reload_as_needed): Call it.
(fixup_abnormal_edges): Allow all throwing insns to be deleted;
don't call find_many_sub_basic_blocks; call verify_flow_info.
* function.c (assign_stack_local_1): Set MEM_NOTRAP_P.
(keep_stack_depressed): Likewise.
(assign_stack_temp_for_type): Likewise; use adjust_address_nv.
From-SVN: r103680
Diffstat (limited to 'gcc/function.c')
-rw-r--r-- | gcc/function.c | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/gcc/function.c b/gcc/function.c index fab19ae..3ee5e8b 100644 --- a/gcc/function.c +++ b/gcc/function.c @@ -474,6 +474,7 @@ assign_stack_local_1 (enum machine_mode mode, HOST_WIDE_INT size, int align, function->x_frame_offset += size; x = gen_rtx_MEM (mode, addr); + MEM_NOTRAP_P (x) = 1; function->x_stack_slot_list = gen_rtx_EXPR_LIST (VOIDmode, x, function->x_stack_slot_list); @@ -649,9 +650,7 @@ assign_stack_temp_for_type (enum machine_mode mode, HOST_WIDE_INT size, p->size = best_p->size - rounded_size; p->base_offset = best_p->base_offset + rounded_size; p->full_size = best_p->full_size - rounded_size; - p->slot = gen_rtx_MEM (BLKmode, - plus_constant (XEXP (best_p->slot, 0), - rounded_size)); + p->slot = adjust_address_nv (best_p->slot, BLKmode, rounded_size); p->align = best_p->align; p->address = 0; p->type = best_p->type; @@ -743,6 +742,7 @@ assign_stack_temp_for_type (enum machine_mode mode, HOST_WIDE_INT size, MEM_VOLATILE_P (slot) = TYPE_VOLATILE (type); MEM_SET_IN_STRUCT_P (slot, AGGREGATE_TYPE_P (type)); } + MEM_NOTRAP_P (slot) = 1; return slot; } @@ -4822,6 +4822,7 @@ keep_stack_depressed (rtx insns) info.sp_offset)); retaddr = gen_rtx_MEM (Pmode, retaddr); + MEM_NOTRAP_P (retaddr) = 1; /* If there is a pending load to the equivalent register for SP and we reference that register, we must load our address into |