aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2011-07-28 22:35:12 +0200
committerJakub Jelinek <jakub@gcc.gnu.org>2011-07-28 22:35:12 +0200
commit4fe249e74807053dac6c37a8e23f43155ecb6ccb (patch)
treefb9fac801cacf39ca6eee7caac1c8695a6a8ced3
parent86f98641242b99e49d98708bdad9ffa38396c141 (diff)
downloadgcc-4fe249e74807053dac6c37a8e23f43155ecb6ccb.zip
gcc-4fe249e74807053dac6c37a8e23f43155ecb6ccb.tar.gz
gcc-4fe249e74807053dac6c37a8e23f43155ecb6ccb.tar.bz2
re PR debug/49846 (entryval: missing DW_TAG_GNU_call_site_parameter for stack-passed `double' parameter)
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
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/var-tracking.c16
2 files changed, 23 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 6c0ec7c..bda5cc2 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -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.
diff --git a/gcc/var-tracking.c b/gcc/var-tracking.c
index 56f6983..f67b3f5 100644
--- a/gcc/var-tracking.c
+++ b/gcc/var-tracking.c
@@ -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);