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
This commit is contained in:
Georg-Johann Lay 2011-07-11 10:13:30 +00:00 committed by Georg-Johann Lay
parent 0e65e6311b
commit 7e4ec472ee
4 changed files with 38 additions and 3 deletions

View File

@ -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.

View File

@ -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;

View File

@ -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

View File

@ -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;
}