diff options
author | rth <rth@138bc75d-0d04-0410-961f-82ee72b054a4> | 2005-08-31 16:26:51 +0000 |
---|---|---|
committer | rth <rth@138bc75d-0d04-0410-961f-82ee72b054a4> | 2005-08-31 16:26:51 +0000 |
commit | 43283c919fd31a5b7099e51657f0455938cde4c5 (patch) | |
tree | f7a2dee22307156d52f9729484b53473c1ff7f74 /gcc/function.c | |
parent | 350cce57f58b82034d2f772aea0a8494a7d4a50b (diff) | |
download | gcc-43283c919fd31a5b7099e51657f0455938cde4c5.tar.gz |
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.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@103680 138bc75d-0d04-0410-961f-82ee72b054a4
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 fab19ae2ee7..3ee5e8b8892 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 |