With Pmode == SImode and word_mode == DImode, we generate (insn/f 105 104 106 2 (set (mem:DI (pre_dec:SI (reg/f:SI 7 sp)) [0 S8 A8]) (reg:DI 6 bp)) x.cc:18 42 {*pushdi2_rex64} (nil))
to push frame pointer onto stack. Checking hard_frame_pointer_rtx fails since hard_frame_pointer_rtx is in Pmode, not word_mode. This patch checks HARD_FRAME_POINTER_REGNUM instead of hard_frame_pointer_rtx for push/pop. OK for trunk? Thanks. H.J. --- 2011-11-04 H.J. Lu <hongjiu...@intel.com> * dwarf2cfi.c (dwarf2out_frame_debug_expr): Check HARD_FRAME_POINTER_REGNUM instead of hard_frame_pointer_rtx in Rule 18. diff --git a/gcc/dwarf2cfi.c b/gcc/dwarf2cfi.c index 4f44c77..69e6f21 100644 --- a/gcc/dwarf2cfi.c +++ b/gcc/dwarf2cfi.c @@ -1757,7 +1757,8 @@ dwarf2out_frame_debug_expr (rtx expr) regiser. */ if (fde && fde->stack_realign - && src == hard_frame_pointer_rtx) + && REG_P (src) + && REGNO (src) == HARD_FRAME_POINTER_REGNUM) { gcc_assert (cur_cfa->reg != dw_frame_pointer_regnum); cur_trace->cfa_store.offset = 0;