OSDN Git Service

* dwarf2out.c (dwarf2out_frame_debug_expr) [rule 10]: Handle
authorbernds <bernds@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 5 May 2011 16:49:11 +0000 (16:49 +0000)
committerbernds <bernds@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 5 May 2011 16:49:11 +0000 (16:49 +0000)
POST_MODIFY.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@173446 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/dwarf2out.c

index 791f4a2..642f85f 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 8f2635b..e20b01b 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 */