Commit 9b915824 by Jakub Jelinek Committed by Jakub Jelinek

re PR rtl-optimization/85376 (wrong code with -Og -fno-dce -fgcse -fno-tree-ccp…

re PR rtl-optimization/85376 (wrong code with -Og -fno-dce -fgcse -fno-tree-ccp -fno-tree-copy-prop)

	PR rtl-optimization/85376
	* simplify-rtx.c (simplify_const_unary_operation): For CLZ and CTZ and
	zero op0, if C?Z_DEFINED_VALUE_AT_ZERO is false, return NULL_RTX
	instead of a specific value.

	* gcc.dg/pr85376.c: New test.

From-SVN: r259377
parent 272277dc
2018-04-13 Jakub Jelinek <jakub@redhat.com>
PR rtl-optimization/85376
* simplify-rtx.c (simplify_const_unary_operation): For CLZ and CTZ and
zero op0, if C?Z_DEFINED_VALUE_AT_ZERO is false, return NULL_RTX
instead of a specific value.
2018-04-13 Jan Hubicka <hubicka@ucw.cz>
Bin Cheng <bin.cheng@arm.com>
......
......@@ -1877,7 +1877,7 @@ simplify_const_unary_operation (enum rtx_code code, machine_mode mode,
if (wi::ne_p (op0, 0))
int_value = wi::clz (op0);
else if (! CLZ_DEFINED_VALUE_AT_ZERO (imode, int_value))
int_value = GET_MODE_PRECISION (imode);
return NULL_RTX;
result = wi::shwi (int_value, result_mode);
break;
......@@ -1889,7 +1889,7 @@ simplify_const_unary_operation (enum rtx_code code, machine_mode mode,
if (wi::ne_p (op0, 0))
int_value = wi::ctz (op0);
else if (! CTZ_DEFINED_VALUE_AT_ZERO (imode, int_value))
int_value = GET_MODE_PRECISION (imode);
return NULL_RTX;
result = wi::shwi (int_value, result_mode);
break;
......
2018-04-13 Jakub Jelinek <jakub@redhat.com>
PR rtl-optimization/85376
* gcc.dg/pr85376.c: New test.
2018-04-13 Andrey Belevantsev <abel@ispras.ru>
PR rtl-optimization/83852
......
/* PR rtl-optimization/85376 */
/* { dg-do run { target int128 } } */
/* { dg-options "-Og -fno-dce -fgcse -fno-tree-ccp -fno-tree-copy-prop -Wno-psabi" } */
typedef unsigned int U __attribute__ ((vector_size (64)));
typedef unsigned __int128 V __attribute__ ((vector_size (64)));
unsigned int e, i, l;
unsigned char f;
U g, h, k, j;
static inline V
foo (unsigned char n, unsigned short o, unsigned int p, U q, U r, U s)
{
unsigned int t;
o <<= 5;
q[7] >>= __builtin_add_overflow (0xfffffff0, __builtin_ffs (n), &s[5]);
t = __builtin_ffs (g[7]);
e *= __builtin_sub_overflow (o, t, &f);
return f + (V) g + (V) h + (V) q + i + (V) j + (V) s + (V) k + l;
}
int
main ()
{
if (__SIZEOF_INT128__ != 16 || __SIZEOF_INT__ != 4 || __CHAR_BIT__ != 8)
return 0;
V x = foo (0, 1, 5, (U) { }, (U) { }, (U) { });
for (unsigned i = 0; i < 4; i++)
if ((unsigned int) x[i] != 0x20)
__builtin_abort ();
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