On 10/27/20 10:44 AM, H.J. Lu wrote:
On Tue, Oct 27, 2020 at 7:18 AM Andrew MacLeod via Gcc-patches
<gcc-patches@gcc.gnu.org> wrote:
On 10/27/20 7:23 AM, Christophe Lyon wrote:
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
ah, didn't realize the testcase didnt work properly on non 64 bit
targets... I'll switch it to long long, that seems to make it work.
It works for me. Can you check it in to unblock my testers?
Thanks.
should be all checked in already. sorry I wasnt clear