+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>
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;
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
--- /dev/null
+/* 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;
+}