gcc/ChangeLog:
PR tree-optimization/97488
* range-op.cc (operator_lshift::op1_range): Handle large right shifts.
gcc/testsuite/ChangeLog:
* gcc.dg/pr97488.c: New test.
wide_int shift = wi::to_wide (shift_amount);
if (wi::lt_p (shift, 0, SIGNED))
return false;
+ if (wi::ge_p (shift, wi::uhwi (TYPE_PRECISION (type),
+ TYPE_PRECISION (op2.type ())),
+ UNSIGNED))
+ return false;
if (shift == 0)
{
r = lhs;
--- /dev/null
+// { dg-do compile }
+// { dg-options "-O1 -ftree-vrp" }
+
+__int128
+ef (__int128 ms)
+{
+ int dh = 129;
+ int *hj = &dh;
+
+ return ms << *hj ? ms : 0;
+}