* dwarf2out.c (dwarf2out_frame_debug_expr) [rule 11]: Handle post_dec.
authorRichard Henderson <rth@redhat.com>
Tue, 22 Mar 2011 16:02:59 +0000 (09:02 -0700)
committerRichard Henderson <rth@gcc.gnu.org>
Tue, 22 Mar 2011 16:02:59 +0000 (09:02 -0700)
From-SVN: r171296

gcc/ChangeLog
gcc/dwarf2out.c

index 396c8be7a84b8db0185f488bff90726c8fbad398..3fff7d69741cc10b09009355919be8a882558086 100644 (file)
@@ -16,6 +16,8 @@
        (*pushhi, *pushsi, *pushsf, popqi): Likewise.
        (pophi): Remove.
 
+       * dwarf2out.c (dwarf2out_frame_debug_expr) [rule 11]: Handle post_dec.
+
 2011-03-22  Nathan Froyd  <froydnj@codesourcery.com>
 
        * tree.c (build_call_1): New function.
index 5d64b8d3fb90f98a62eecad36fdf261e52cbf4fb..32ffe1b6d6291d211e824f0cad2841f95fbf0aef 100644 (file)
@@ -2239,7 +2239,7 @@ dwarf2out_frame_debug_cfa_restore (rtx reg, const char *label)
           cfa.base_offset = -cfa_store.offset
 
   Rule 11:
-  (set (mem ({pre_inc,pre_dec} sp:cfa_store.reg)) <reg>)
+  (set (mem ({pre_inc,pre_dec,post_dec} sp:cfa_store.reg)) <reg>)
   effects: cfa_store.offset += -/+ mode_size(mem)
           cfa.offset = cfa_store.offset if cfa.reg == sp
           cfa.reg = sp
@@ -2258,7 +2258,7 @@ dwarf2out_frame_debug_cfa_restore (rtx reg, const char *label)
           cfa.base_offset = -{cfa_store,cfa_temp}.offset
 
   Rule 14:
-  (set (mem (postinc <reg1>:cfa_temp <const_int>)) <reg2>)
+  (set (mem (post_inc <reg1>:cfa_temp <const_int>)) <reg2>)
   effects: cfa.reg = <reg1>
           cfa.base_offset = -cfa_temp.offset
           cfa_temp.offset -= mode_size(mem)
@@ -2591,6 +2591,7 @@ dwarf2out_frame_debug_expr (rtx expr, const char *label)
          /* Rule 11 */
        case PRE_INC:
        case PRE_DEC:
+       case POST_DEC:
          offset = GET_MODE_SIZE (GET_MODE (dest));
          if (GET_CODE (XEXP (dest, 0)) == PRE_INC)
            offset = -offset;
@@ -2615,7 +2616,10 @@ dwarf2out_frame_debug_expr (rtx expr, const char *label)
          if (cfa.reg == STACK_POINTER_REGNUM)
            cfa.offset = cfa_store.offset;
 
-         offset = -cfa_store.offset;
+         if (GET_CODE (XEXP (dest, 0)) == POST_DEC)
+           offset += -cfa_store.offset;
+         else
+           offset = -cfa_store.offset;
          break;
 
          /* Rule 12 */