From 5cbc53e292c83887dd882fe02e2f9dc172304c6d Mon Sep 17 00:00:00 2001 From: jakub Date: Wed, 21 Jul 2010 08:50:57 +0000 Subject: [PATCH] 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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@162364 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/ChangeLog | 8 ++++++++ gcc/dwarf2out.c | 5 ----- gcc/testsuite/ChangeLog | 4 ++++ gcc/testsuite/gcc.dg/guality/pr45003-2.c | 31 +++++++++++++++++++++++++++++++ gcc/testsuite/gcc.dg/guality/pr45003-3.c | 31 +++++++++++++++++++++++++++++++ gcc/var-tracking.c | 9 ++++++--- 6 files changed, 80 insertions(+), 8 deletions(-) create mode 100644 gcc/testsuite/gcc.dg/guality/pr45003-2.c create mode 100644 gcc/testsuite/gcc.dg/guality/pr45003-3.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 59ca430b230..2d702330376 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,11 @@ +2010-07-21 Jakub Jelinek + + 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. + 2010-07-20 Richard Henderson * vxworks.c (vxworks_emutls_var_fields): Pass locus to build_decls. diff --git a/gcc/dwarf2out.c b/gcc/dwarf2out.c index 385d5da261c..ce35c9182e1 100644 --- a/gcc/dwarf2out.c +++ b/gcc/dwarf2out.c @@ -14254,11 +14254,6 @@ loc_descriptor (rtx rtl, enum machine_mode mode, loc_result = reg_loc_descriptor (rtl, initialized); break; - case SIGN_EXTEND: - case ZERO_EXTEND: - loc_result = loc_descriptor (XEXP (rtl, 0), mode, initialized); - break; - case MEM: loc_result = mem_loc_descriptor (XEXP (rtl, 0), GET_MODE (rtl), initialized); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index e0e49363848..3cac7383659 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -2,6 +2,10 @@ * gcc.dg/guality/asm-1.c: New test. + PR debug/45003 + * gcc.dg/guality/pr45003-2.c: New test. + * gcc.dg/guality/pr45003-3.c: New test. + 2010-07-20 Jerry DeLisle PR libfortran/44697 diff --git a/gcc/testsuite/gcc.dg/guality/pr45003-2.c b/gcc/testsuite/gcc.dg/guality/pr45003-2.c new file mode 100644 index 00000000000..dcdba237ff4 --- /dev/null +++ b/gcc/testsuite/gcc.dg/guality/pr45003-2.c @@ -0,0 +1,31 @@ +/* PR debug/45003 */ +/* { dg-do run { target { x86_64-*-* && lp64 } } } */ +/* { dg-options "-g" } */ + +int __attribute__((noinline)) +foo (unsigned short *p) +{ + int a = *p; + asm volatile ("nop" : : "D" ((int) *p)); + asm volatile ("nop" : : "D" ((int) *p)); /* { dg-final { gdb-test 10 "a" "0x8078" } } */ + return 0; +} + +int __attribute__((noinline)) +bar (short *p) +{ + unsigned int a = *p; + asm volatile ("nop" : : "D" ((unsigned int) *p)); + asm volatile ("nop" : : "D" ((unsigned int) *p)); /* { dg-final { gdb-test 19 "a" "0xffff8078" } } */ + return 0; +} + +int +main () +{ + unsigned short us = 0x8078; + foo (&us); + short s = -32648; + bar (&s); + return 0; +} diff --git a/gcc/testsuite/gcc.dg/guality/pr45003-3.c b/gcc/testsuite/gcc.dg/guality/pr45003-3.c new file mode 100644 index 00000000000..3adc4f2383e --- /dev/null +++ b/gcc/testsuite/gcc.dg/guality/pr45003-3.c @@ -0,0 +1,31 @@ +/* PR debug/45003 */ +/* { dg-do run { target { x86_64-*-* && lp64 } } } */ +/* { dg-options "-g" } */ + +int __attribute__((noinline)) +foo (unsigned short *p) +{ + int a = (short) *p; + asm volatile ("nop" : : "D" ((int) *p)); + asm volatile ("nop" : : "D" ((int) *p)); /* { dg-final { gdb-test 10 "a" "-32648" } } */ + return 0; +} + +int __attribute__((noinline)) +bar (short *p) +{ + unsigned int a = (unsigned short) *p; + asm volatile ("nop" : : "D" ((unsigned int) *p)); + asm volatile ("nop" : : "D" ((unsigned int) *p)); /* { dg-final { gdb-test 19 "a" "0x8078" } } */ + return 0; +} + +int +main () +{ + unsigned short us = 0x8078; + foo (&us); + short s = -32648; + bar (&s); + return 0; +} 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); -- 2.11.4.GIT