diff options
author | Jakub Jelinek <jakub@redhat.com> | 2010-07-21 10:50:57 +0200 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2010-07-21 10:50:57 +0200 |
commit | 370ae5992fa38d0161157ce8b237174d220054bf (patch) | |
tree | b6a2b0a3ebd043807579644d37d17ec082758093 /gcc/var-tracking.c | |
parent | a431e913309586a8b284a30bcee0d5c3ece1f991 (diff) | |
download | gcc-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.c | 9 |
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); |