Hi,

On Mon, 26 Oct 2020 at 22:51, Andrew MacLeod via Gcc-patches
<gcc-patches@gcc.gnu.org> wrote:
>
> In the core of gori_compute::logical_combine we are suppose to combine
> the calculated true and false ranges on each side of  the operation.
>
> when encountering
>
> [0,0] =   c_3  | c_4
>
> we know we only need to consider the FALSE values of the range carried
> by c_3 and c_4, but it can be EITHER of those ranges, so we need to
> union them together to get the correct result.
>
> The code was performing an intersection instead, and in this particualr
> case, we knew the range carried thru c_3 was alwasy [0,0]  and it was
> always varying through c_4....    instead of returning varying,  we were
> returning [0,0]  which then caused some folding which was incorrect.
>
> Fixed by correctly calling union...
>
> Bootstrapped on x86_64-pc-linux-gnu, no regressions, and pushed.
>

I think you need to update the testcase and declare
long long g = 4073709551615
instead of just long, as it causes a warning on 32-bit targets:
/gcc/testsuite/gcc.dg/pr97567.c:7:12: warning: overflow in conversion
from 'long long int' to 'long int' changes value from '4073709551615'
to '2080555007' [-Woverflow]

Christophe

> Andrew
>

Reply via email to