summaryrefslogtreecommitdiff
path: root/gcc/var-tracking.c
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2010-07-21 10:50:57 +0200
committerJakub Jelinek <jakub@gcc.gnu.org>2010-07-21 10:50:57 +0200
commit370ae5992fa38d0161157ce8b237174d220054bf (patch)
treeb6a2b0a3ebd043807579644d37d17ec082758093 /gcc/var-tracking.c
parenta431e913309586a8b284a30bcee0d5c3ece1f991 (diff)
downloadgcc-370ae5992fa38d0161157ce8b237174d220054bf.tar.gz
re PR debug/45003 (VTA issues with sign/zero extension and debug temporaries)
PR debug/45003 * var-tracking.c (reverse_op): Also handle {SIGN,ZERO}_EXTEND of a MEM. * dwarf2out.c (loc_descriptor): Don't handle SIGN_EXTEND nor ZERO_EXTEND here. * gcc.dg/guality/pr45003-2.c: New test. * gcc.dg/guality/pr45003-3.c: New test. From-SVN: r162364
Diffstat (limited to 'gcc/var-tracking.c')
-rw-r--r--gcc/var-tracking.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/gcc/var-tracking.c b/gcc/var-tracking.c
index e13f340b03f..d1c584a8435 100644
--- a/gcc/var-tracking.c
+++ b/gcc/var-tracking.c
@@ -5187,16 +5187,19 @@ reverse_op (rtx val, const_rtx expr)
case XOR:
case NOT:
case NEG:
+ if (!REG_P (XEXP (src, 0)))
+ return NULL_RTX;
+ break;
case SIGN_EXTEND:
case ZERO_EXTEND:
+ if (!REG_P (XEXP (src, 0)) && !MEM_P (XEXP (src, 0)))
+ return NULL_RTX;
break;
default:
return NULL_RTX;
}
- if (!REG_P (XEXP (src, 0))
- || !SCALAR_INT_MODE_P (GET_MODE (src))
- || XEXP (src, 0) == cfa_base_rtx)
+ if (!SCALAR_INT_MODE_P (GET_MODE (src)) || XEXP (src, 0) == cfa_base_rtx)
return NULL_RTX;
v = cselib_lookup (XEXP (src, 0), GET_MODE (XEXP (src, 0)), 0);