dwarf2out.c (dwarf2out_frame_debug_expr): Handle POST_MODIFY.
authorBernd Schmidt <bernds@codesourcery.com>
Thu, 5 May 2011 16:49:11 +0000 (16:49 +0000)
committerBernd Schmidt <bernds@gcc.gnu.org>
Thu, 5 May 2011 16:49:11 +0000 (16:49 +0000)
* dwarf2out.c (dwarf2out_frame_debug_expr) [rule 10]: Handle
POST_MODIFY.

From-SVN: r173446

gcc/ChangeLog
gcc/dwarf2out.c

index 791f4a2d239df270156024f459af6ed681b8d5bd..642f85f0bfb0333cf75efd701257e86616f4e351 100644 (file)
@@ -1,3 +1,8 @@
+2011-05-05  Bernd Schmidt  <bernds@codesourcery.com>
+
+       * dwarf2out.c (dwarf2out_frame_debug_expr) [rule 10]: Handle
+       POST_MODIFY.
+
 2011-05-05  Steve Ellcey  <sje@cup.hp.com>
 
        * config.gcc (hppa*64*-*-hpux11*): Modify tm_file and extra_options
index 8f2635bd7b730f826814b013f3084215243c237d..e20b01b7479dc843ad489e0df04f7bcc134625fb 100644 (file)
@@ -2237,7 +2237,7 @@ dwarf2out_frame_debug_cfa_restore (rtx reg, const char *label)
           cfa_temp.offset = <const_int>
 
   Rule 10:
-  (set (mem (pre_modify sp:cfa_store (???? <reg1> <const_int>))) <reg2>)
+  (set (mem ({pre,post}_modify sp:cfa_store (???? <reg1> <const_int>))) <reg2>)
   effects: cfa_store.offset -= <const_int>
           cfa.offset = cfa_store.offset if cfa.reg == sp
           cfa.reg = sp
@@ -2578,6 +2578,7 @@ dwarf2out_frame_debug_expr (rtx expr, const char *label)
          /* Rule 10 */
          /* With a push.  */
        case PRE_MODIFY:
+       case POST_MODIFY:
          /* We can't handle variable size modifications.  */
          gcc_assert (GET_CODE (XEXP (XEXP (XEXP (dest, 0), 1), 1))
                      == CONST_INT);
@@ -2590,7 +2591,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_MODIFY)
+           offset -= cfa_store.offset;
+         else
+           offset = -cfa_store.offset;
          break;
 
          /* Rule 11 */