diff options
author | Georg-Johann Lay <avr@gjlay.de> | 2011-07-11 10:13:30 +0000 |
---|---|---|
committer | Georg-Johann Lay <gjl@gcc.gnu.org> | 2011-07-11 10:13:30 +0000 |
commit | 7e4ec472eeae2c37c4c16767eca148d568773bd0 (patch) | |
tree | 8cf4937b9ec598e6be79dd902b6226504cc37363 /gcc | |
parent | 0e65e6311b89c91d88e7e785be06bb188fe91e8a (diff) | |
download | gcc-7e4ec472eeae2c37c4c16767eca148d568773bd0.zip gcc-7e4ec472eeae2c37c4c16767eca148d568773bd0.tar.gz gcc-7e4ec472eeae2c37c4c16767eca148d568773bd0.tar.bz2 |
re PR target/39633 ([avr] loop bug: missing 8-bit comparison (*cmpqi))
gcc/
PR target/39633
* config/avr/avr.c (notice_update_cc): For ashiftrt:QI, only
offsets 1..5 set cc0 in a usable way.
testsuite/
PR target/39633
* gcc.target/avr/torture/pr39633.c: New test case.
From-SVN: r176141
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/config/avr/avr.c | 5 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/avr/torture/pr39633.c | 25 |
4 files changed, 38 insertions, 3 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index e43ef79..9597705 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2011-07-11 Georg-Johann Lay <avr@gjlay.de> + + PR target/39633 + * config/avr/avr.c (notice_update_cc): For ashiftrt:QI, only + offsets 1..5 set cc0 in a usable way. + 2011-07-11 Romain Geissler <romain.geissler@gmail.com> * tree.h (call_expr_arg): Remove. diff --git a/gcc/config/avr/avr.c b/gcc/config/avr/avr.c index 5d1a127..128706d 100644 --- a/gcc/config/avr/avr.c +++ b/gcc/config/avr/avr.c @@ -1479,9 +1479,8 @@ notice_update_cc (rtx body ATTRIBUTE_UNUSED, rtx insn) { rtx x = XEXP (src, 1); - if (GET_CODE (x) == CONST_INT - && INTVAL (x) > 0 - && INTVAL (x) != 6) + if (CONST_INT_P (x) + && IN_RANGE (INTVAL (x), 1, 5)) { cc_status.value1 = SET_DEST (set); cc_status.flags |= CC_OVERFLOW_UNUSABLE; diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 3ae096e..e87be0d 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2011-07-11 Georg-Johann Lay <avr@gjlay.de> + + PR target/39633 + * gcc.target/avr/torture/pr39633.c: New test case. + 2011-07-11 Tobias Burnus <burnus@net-b.de> PR fortran/18918 diff --git a/gcc/testsuite/gcc.target/avr/torture/pr39633.c b/gcc/testsuite/gcc.target/avr/torture/pr39633.c new file mode 100644 index 0000000..c5f5b04 --- /dev/null +++ b/gcc/testsuite/gcc.target/avr/torture/pr39633.c @@ -0,0 +1,25 @@ +/* { dg-do run } */ + +#include <stdlib.h> + +char c = 42; + +void __attribute__((noinline,noclone)) +pr39633 (char a) +{ + a >>= 7; + if (a) + c = a; +} + +int main() +{ + pr39633 (6); + + if (c != 42) + abort(); + + exit(0); + + return 0; +} |