diff options
author | Aldy Hernandez <aldyh@gcc.gnu.org> | 2019-06-18 22:44:57 +0000 |
---|---|---|
committer | Aldy Hernandez <aldyh@gcc.gnu.org> | 2019-06-18 22:44:57 +0000 |
commit | 5cf12989a937cadd57e32ae33c6901b431954361 (patch) | |
tree | 1fa3c2412bee25c5176a0095282e86104760525b /gcc/tree-ssa-loop-prefetch.c | |
parent | 30a4f38c782f626ae4300aceba830e9a8514e86b (diff) | |
download | gcc-5cf12989a937cadd57e32ae33c6901b431954361.zip gcc-5cf12989a937cadd57e32ae33c6901b431954361.tar.gz gcc-5cf12989a937cadd57e32ae33c6901b431954361.tar.bz2 |
irange on value_range implementation.
Known failures:
*** FAIL: gcc.dg/pr85598.c (test for excess errors)
x_10 has a global range of [0, 256]
x_10 = PHI <0(2), x_6(3)> is analyzed as [0, 255][257, 257]
range_of_stmt calculates the intersection of both:
range = [0, 255]
On irange : value_range, the PHI range is [0, 257], so the
intersection comes out as [0, 256]. This extra number causes
sprintf to think we'll overflow.
This is because the sprintf pass has been converted to the
ranger. Presumably we can leave sprintf unconverted until we
have more sub-ranges.
*** FAIL: gcc.dg/tree-ssa/rvrp09.c scan-tree-dump-times rvrp "Branch rewritten" 4
The branch from BB9 -> BB10 below was previously removed as
UNDEFINED, but we no longer know d_5 is UNDEFINED on that path
because of the loss of precision in the original range for
d_5.
Note: fails for irange m_max_pairs=2 also.
Was:
=========== BB 8 ============
x_2(D) char VARYING
<bb 8> :
d_5 = x_2(D) & -16;
if (d_5 > 0)
goto <bb 9>; [INV]
else
goto <bb 11>; [INV]
d_5 : char [-INF, -16][0, 0][16, 112]
8->9 (T) d_5 : char [16, 112]
8->11 (F) d_5 : char [-INF, -16][0, 0]
=========== BB 9 ============
d_5 char [16, 112]
<bb 9> :
if (d_5 <= 15)
goto <bb 10>; [INV]
else
goto <bb 11>; [INV]
===> 9->10 (T) d_5 : char UNDEFINED
9->11 (F) d_5 : char [16, 112]
But is now:
=========== BB 8 ============
x_2(D) char VARYING
<bb 8> :
d_5 = x_2(D) & -16;
if (d_5 > 0)
goto <bb 9>; [INV]
else
goto <bb 11>; [INV]
d_5 : char [-INF, 112]
8->9 (T) d_5 : char [1, 112]
8->11 (F) d_5 : char [-INF, 0]
=========== BB 9 ============
d_5 char [1, 112]
<bb 9> :
if (d_5 <= 15)
goto <bb 10>; [INV]
else
goto <bb 11>; [INV]
===> 9->10 (T) d_5 : char [1, 15]
9->11 (F) d_5 : char [16, 112]
From-SVN: r272458
Diffstat (limited to 'gcc/tree-ssa-loop-prefetch.c')
0 files changed, 0 insertions, 0 deletions