Commit 000525b2 by Oleg Endo

re PR target/53987 ([SH] Unnecessary zero-extensions)

gcc/testsuite/
	PR target/53987
	* gcc.target/sh/pr53987-1.c: New.

From-SVN: r219110
parent 7aa358f2
2014-12-30 Oleg Endo <olegendo@gcc.gnu.org>
PR target/53987
* gcc.target/sh/pr53987-1.c: New.
2014-12-30 Jan Hubicka <hubicka@ucw.cz>
* gcc.dg/ipa/inline-7.c: New testcase.
......
/* Check that no unnecessary sign/zero extensions are being emitted. */
/* { dg-do compile } */
/* { dg-options "-O2" } */
/* { dg-final { scan-assembler-times "extu.b" 2 } } */
/* { dg-final { scan-assembler-not "extu.w" } } */
/* { dg-final { scan-assembler-not "exts.b" } } */
/* { dg-final { scan-assembler-not "exts.w" } } */
/* { dg-final { scan-assembler-not "movu" } } */
/* { dg-final { scan-assembler-not "tst\t#255" { xfail *-*-*} } } */
int
test_00 (unsigned char* x, char* xx, int y, int z)
{
/* If x[0] / b is treated as a non-extended QImode subreg the zero
test will be a QImode subreg test, which is supposed to ignore
bits[31:8]. However, since the QImode memory load always sign
extends, it's also OK to test all the bits. Thus we don't want
to see a tst #255 here. */
int b = x[0];
xx[0] = b;
return b ? y : z;
}
int
test_01 (unsigned char a, unsigned char b, int c, int d)
{
/* 2x extu.b */
if (a == b)
return c;
return d;
}
int
test_02 (unsigned char* a, unsigned char* b, int c, int d)
{
/* 2x mov.b */
if (*a != 0 && *b == 0)
return c;
return d;
}
int
test_03 (unsigned char* a)
{
/* 1x mov.b */
return *a == 0;
}
int
test_04 (unsigned short* a)
{
/* 1x mov.w */
return *a == 0;
}
unsigned char test_05_var;
int
test_05 (int a, int b, int c, int d)
{
/* Must not see sign/zero extension here. */
test_05_var = (a == b) | (b == c);
if (test_05_var)
return d;
return 0;
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment