aboutsummaryrefslogtreecommitdiff
path: root/gcc/function.c
diff options
context:
space:
mode:
authorRichard Henderson <rth@redhat.com>2005-08-31 09:26:51 -0700
committerRichard Henderson <rth@gcc.gnu.org>2005-08-31 09:26:51 -0700
commitbe0c514c74a18c5652773c76258dcd7bbc81fade (patch)
treef7a2dee22307156d52f9729484b53473c1ff7f74 /gcc/function.c
parent5d3018cee7e9cea99b2b6c823ef3d8ee3c756474 (diff)
downloadgcc-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.c7
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