Allow arg_pointer_rtx/frame_pointer_rtx for based_loc_descr
authorH.J. Lu <hongjiu.lu@intel.com>
Fri, 24 Aug 2012 13:21:55 +0000 (13:21 +0000)
committerH.J. Lu <hjl@gcc.gnu.org>
Fri, 24 Aug 2012 13:21:55 +0000 (06:21 -0700)
gcc/

PR debug/52857
* dwarf2out.c (mem_loc_descriptor): Allow arg_pointer_rtx and
frame_pointer_rtx for based_loc_descr.

gcc/testsuite/

PR debug/52857
* gcc.target/i386/pr52857-1.c: New.
* gcc.target/i386/pr52857-2.c: Likewise.

From-SVN: r190647

gcc/ChangeLog
gcc/dwarf2out.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.target/i386/pr52857-1.c [new file with mode: 0644]
gcc/testsuite/gcc.target/i386/pr52857-2.c [new file with mode: 0644]

index c566f093bdfc92320e99484a736758e881271d88..65cb9939d9be0c8f03b8b970f9431d4f4cf5d8b9 100644 (file)
@@ -1,3 +1,9 @@
+2012-08-24  H.J. Lu  <hongjiu.lu@intel.com>
+
+       PR debug/52857
+       * dwarf2out.c (mem_loc_descriptor): Allow arg_pointer_rtx and
+       frame_pointer_rtx for based_loc_descr.
+
 2012-08-24  Martin Jambor  <mjambor@suse.cz>
 
        * predict.c (maybe_hot_frequency_p): New parameter fun.  Use its decl
index 11d925b943212e730da28fc9b77e79d9e04e3aad..4c268d48eeaa1ba4944bb776ff7d0d138b0c8727 100644 (file)
@@ -11253,6 +11253,8 @@ mem_loc_descriptor (rtx rtl, enum machine_mode mode,
     case REG:
       if (GET_MODE_CLASS (mode) != MODE_INT
          || (GET_MODE_SIZE (mode) > DWARF2_ADDR_SIZE
+             && rtl != arg_pointer_rtx
+             && rtl != frame_pointer_rtx
 #ifdef POINTERS_EXTEND_UNSIGNED
              && (mode != Pmode || mem_mode == VOIDmode)
 #endif
@@ -11525,7 +11527,9 @@ mem_loc_descriptor (rtx rtl, enum machine_mode mode,
     case PLUS:
     plus:
       if (is_based_loc (rtl)
-         && GET_MODE_SIZE (mode) <= DWARF2_ADDR_SIZE
+         && (GET_MODE_SIZE (mode) <= DWARF2_ADDR_SIZE
+             || XEXP (rtl, 0) == arg_pointer_rtx
+             || XEXP (rtl, 0) == frame_pointer_rtx)
          && GET_MODE_CLASS (mode) == MODE_INT)
        mem_loc_result = based_loc_descr (XEXP (rtl, 0),
                                          INTVAL (XEXP (rtl, 1)),
index 3221d14bb0df91da1d9788a78bfde4e1b4cbca9b..e217cd58fdd71209adf0a71b0261c9c4bd53af4d 100644 (file)
@@ -1,3 +1,9 @@
+2012-08-24  H.J. Lu  <hongjiu.lu@intel.com>
+
+       PR debug/52857
+       * gcc.target/i386/pr52857-1.c: New.
+       * gcc.target/i386/pr52857-2.c: Likewise.
+
 2012-08-23  Richard Sandiford  <rdsandiford@googlemail.com>
 
        * gcc.target/mips/code-readable-4.c: New test.
diff --git a/gcc/testsuite/gcc.target/i386/pr52857-1.c b/gcc/testsuite/gcc.target/i386/pr52857-1.c
new file mode 100644 (file)
index 0000000..16fd78f
--- /dev/null
@@ -0,0 +1,10 @@
+/* { dg-do compile { target { ! { ia32 } } } } */
+/* { dg-options "-g -O -mx32 -maddress-mode=long" } */
+
+extern void get_BID128 (int *);
+void 
+__bid128_div (void)
+{
+  int res;
+  get_BID128 (&res);
+}
diff --git a/gcc/testsuite/gcc.target/i386/pr52857-2.c b/gcc/testsuite/gcc.target/i386/pr52857-2.c
new file mode 100644 (file)
index 0000000..879240a
--- /dev/null
@@ -0,0 +1,8 @@
+/* { dg-do compile { target { ! { ia32 } } } } */
+/* { dg-options "-g -O -mx32 -maddress-mode=long" } */
+
+void uw_init_context_1 (void *);
+void _Unwind_ForcedUnwind (void)
+{
+  uw_init_context_1 (__builtin_dwarf_cfa ());
+}