aboutsummaryrefslogtreecommitdiff
path: root/gcc/config/i386/i386.c
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2010-03-10 19:17:10 +0100
committerJakub Jelinek <jakub@gcc.gnu.org>2010-03-10 19:17:10 +0100
commit23f39b378852d679e5d24bbc204ec4ca8fefbd8c (patch)
treedacbe9fcddf5ad20226ea333141629bbab53dd47 /gcc/config/i386/i386.c
parent8bb025f55a97aec05b9aaff2147b2df6009e90ad (diff)
downloadgcc-23f39b378852d679e5d24bbc204ec4ca8fefbd8c.zip
gcc-23f39b378852d679e5d24bbc204ec4ca8fefbd8c.tar.gz
gcc-23f39b378852d679e5d24bbc204ec4ca8fefbd8c.tar.bz2
re PR debug/43290 (ICE in dwarf2out_frame_debug_expr)
PR debug/43290 * reg-notes.def (REG_CFA_SET_VDRAP): New note. * dwarf2out.c (dwarf2out_frame_debug_expr): Remove rule 20 - setting of fde->vdrap_reg. (dwarf2out_frame_debug): Handle REG_CFA_SET_VDRAP note. (based_loc_descr): Only express drap or vdrap regno based expressions using DW_OP_fbreg when not optimizing. * config/i386/i386.c (ix86_get_drap_rtx): When not optimizing, make the vDRAP = DRAP assignment RTX_FRAME_RELATED_P and add REG_CFA_SET_VDRAP note. PR debug/36728 * gcc.dg/guality/pr36728-1.c: New test. * gcc.dg/guality/pr36728-2.c: New test. From-SVN: r157363
Diffstat (limited to 'gcc/config/i386/i386.c')
-rw-r--r--gcc/config/i386/i386.c11
1 files changed, 8 insertions, 3 deletions
diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c
index 087c30f..5f560c4 100644
--- a/gcc/config/i386/i386.c
+++ b/gcc/config/i386/i386.c
@@ -8382,7 +8382,7 @@ ix86_get_drap_rtx (void)
unsigned int regno = find_drap_reg ();
rtx drap_vreg;
rtx arg_ptr;
- rtx seq;
+ rtx seq, insn;
arg_ptr = gen_rtx_REG (Pmode, regno);
crtl->drap_reg = arg_ptr;
@@ -8391,8 +8391,13 @@ ix86_get_drap_rtx (void)
drap_vreg = copy_to_reg (arg_ptr);
seq = get_insns ();
end_sequence ();
-
- emit_insn_before (seq, NEXT_INSN (entry_of_function ()));
+
+ insn = emit_insn_before (seq, NEXT_INSN (entry_of_function ()));
+ if (!optimize)
+ {
+ add_reg_note (insn, REG_CFA_SET_VDRAP, drap_vreg);
+ RTX_FRAME_RELATED_P (insn) = 1;
+ }
return drap_vreg;
}
else