Skip out on processing __builtin_clz when varying.
authorAldy Hernandez <aldyh@redhat.com>
Wed, 12 May 2021 19:22:15 +0000 (15:22 -0400)
committerAldy Hernandez <aldyh@redhat.com>
Wed, 12 May 2021 20:46:58 +0000 (16:46 -0400)
commitd902a1b57606536982a1001670f998de685eaf7c
tree70f23a7edb0c0a6825af6613deed94734620d2e0
parent8982a5354d2697eeb12a77d49b6730db90053618
Skip out on processing __builtin_clz when varying.

The previous changes to irange::constant_p return TRUE for
VARYING, since VARYING has numerical end points like any other
constant range.  The problem is that some users of constant_p
depended on constant_p excluding the full domain.  The
range handler for __builtin_clz, that is shared between ranger
and vr_values, is one such user.

This patch excludes varying_p(), to match the original behavior
for clz.

gcc/ChangeLog:

PR c/100521
* gimple-range.cc (range_of_builtin_call): Skip out on
  processing __builtin_clz when varying.
gcc/gimple-range.cc
gcc/testsuite/gcc.dg/pr100521.c [new file with mode: 0644]