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;

Reply via email to