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 <[email protected]>
* 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;