re PR debug/49846 (entryval: missing DW_TAG_GNU_call_site_parameter for stack-passed...
authorJakub Jelinek <jakub@redhat.com>
Thu, 28 Jul 2011 20:35:12 +0000 (22:35 +0200)
committerJakub Jelinek <jakub@gcc.gnu.org>
Thu, 28 Jul 2011 20:35:12 +0000 (22:35 +0200)
PR debug/49846
* var-tracking.c (prepare_call_arguments): For non-MODE_INT stack
arguments also check if they aren't initialized with a MODE_INT
mode of the same size.

From-SVN: r176892

gcc/ChangeLog
gcc/var-tracking.c

index 6c0ec7cfd8b0e25630270c333a05f556eca97d8c..bda5cc2b00915448cd02ea51c3413dd0ad774d47 100644 (file)
@@ -1,3 +1,10 @@
+2011-07-28  Jakub Jelinek  <jakub@redhat.com>
+
+       PR debug/49846
+       * var-tracking.c (prepare_call_arguments): For non-MODE_INT stack
+       arguments also check if they aren't initialized with a MODE_INT
+       mode of the same size.
+
 2011-07-28  Aldy Hernandez  <aldyh@redhat.com>
 
        * expr.c (get_bit_range): Handle *MEM_REF's.
index 56f698391b73c24b04f0eab7523a1e231e638926..f67b3f5d183bba5c33101ff27a8f619f1c6fc628 100644 (file)
@@ -5777,6 +5777,22 @@ prepare_call_arguments (basic_block bb, rtx insn)
            val = cselib_lookup (mem, GET_MODE (mem), 0, VOIDmode);
            if (val && cselib_preserved_value_p (val))
              item = gen_rtx_CONCAT (GET_MODE (x), copy_rtx (x), val->val_rtx);
+           else if (GET_MODE_CLASS (GET_MODE (mem)) != MODE_INT)
+             {
+               /* For non-integer stack argument see also if they weren't
+                  initialized by integers.  */
+               enum machine_mode imode = int_mode_for_mode (GET_MODE (mem));
+               if (imode != GET_MODE (mem) && imode != BLKmode)
+                 {
+                   val = cselib_lookup (adjust_address_nv (mem, imode, 0),
+                                        imode, 0, VOIDmode);
+                   if (val && cselib_preserved_value_p (val))
+                     item = gen_rtx_CONCAT (GET_MODE (x), copy_rtx (x),
+                                            lowpart_subreg (GET_MODE (x),
+                                                            val->val_rtx,
+                                                            imode));
+                 }
+             }
          }
        if (item)
          call_arguments = gen_rtx_EXPR_LIST (VOIDmode, item, call_arguments);