Commit 6b9fc178 by Richard Biener Committed by Richard Biener

tree-dfa.c (get_ref_base_and_extent): Use range-info to refine results when…

tree-dfa.c (get_ref_base_and_extent): Use range-info to refine results when processing array refs with variable index.

2018-05-18  Richard Biener  <rguenther@suse.de>

	* tree-dfa.c (get_ref_base_and_extent): Use range-info to refine
	results when processing array refs with variable index.

	* gcc.dg/tree-ssa/ssa-dse-35.c: New testcase.
	* gcc.dg/graphite/scop-10.c: Adjust to avoid dead code.
	* gcc.dg/graphite/scop-6.c: Likewise.
	* gcc.dg/graphite/scop-7.c: Likewise.
	* gcc.dg/graphite/scop-8.c: Likewise.
	* gcc.dg/graphite/scop-9.c: Likewise.

From-SVN: r260354
parent 5f007d14
2018-05-18 Richard Biener <rguenther@suse.de>
* tree-dfa.c (get_ref_base_and_extent): Use range-info to refine
results when processing array refs with variable index.
2018-05-18 Toon Moene <toon@moene.org>
* doc/invoke.texi: Move -floop-unroll-and-jam documentation
......
2018-05-18 Richard Biener <rguenther@suse.de>
* gcc.dg/tree-ssa/ssa-dse-35.c: New testcase.
* gcc.dg/graphite/scop-10.c: Adjust to avoid dead code.
* gcc.dg/graphite/scop-6.c: Likewise.
* gcc.dg/graphite/scop-7.c: Likewise.
* gcc.dg/graphite/scop-8.c: Likewise.
* gcc.dg/graphite/scop-9.c: Likewise.
2018-05-18 Kyrylo Tkachov <kyrylo.tkachov@arm.com>
* gcc.target/aarch64/vect-init-ld1.c: New test.
......
......@@ -22,7 +22,7 @@ int toto()
b[i+k] = b[i+k-5] + 2;
}
return a[3][5] + b[1];
return a[3][5] + b[2];
}
/* { dg-final { scan-tree-dump-times "number of SCoPs: 1" 1 "graphite"} } */
......@@ -23,7 +23,7 @@ int toto()
b[i+k] = b[i+k-5] + 2;
}
return a[3][5] + b[1];
return a[3][5] + b[2];
}
/* { dg-final { scan-tree-dump-times "number of SCoPs: 1" 1 "graphite"} } */
......@@ -23,7 +23,7 @@ int toto()
b[i+k] = b[i+k-5] + 2;
}
return a[3][5] + b[1];
return a[3][5] + b[2];
}
/* { dg-final { scan-tree-dump-times "number of SCoPs: 1" 1 "graphite"} } */
......@@ -23,7 +23,7 @@ int toto()
b[i+k] = b[i+k-5] + 2;
}
return a[3][5] + b[1];
return a[3][5] + b[2];
}
/* { dg-final { scan-tree-dump-times "number of SCoPs: 1" 1 "graphite"} } */
......@@ -18,7 +18,7 @@ int toto()
b[i+k] = b[i+k-5] + 2;
}
return a[3][5] + b[1];
return a[3][5] + b[2];
}
/* { dg-final { scan-tree-dump-times "number of SCoPs: 1" 1 "graphite"} } */
/* { dg-do compile } */
/* { dg-options "-O2 -fdump-tree-dse1-details" } */
int a[256];
void foo (void)
{
a[0] = 1;
for (int i = 5; i < 17; ++i)
a[i] = i;
a[0] = 2;
}
/* { dg-final { scan-tree-dump-times "Deleted dead store" 1 "dse1" } } */
......@@ -529,6 +529,49 @@ get_ref_base_and_extent (tree exp, poly_int64_pod *poffset,
/* Remember that we have seen an array ref with a variable
index. */
seen_variable_array_ref = true;
wide_int min, max;
if (TREE_CODE (index) == SSA_NAME
&& (low_bound = array_ref_low_bound (exp),
poly_int_tree_p (low_bound))
&& (unit_size = array_ref_element_size (exp),
TREE_CODE (unit_size) == INTEGER_CST)
&& get_range_info (index, &min, &max) == VR_RANGE)
{
poly_offset_int lbound = wi::to_poly_offset (low_bound);
/* Try to constrain maxsize with range information. */
offset_int omax
= offset_int::from (max, TYPE_SIGN (TREE_TYPE (index)));
if (known_lt (lbound, omax))
{
poly_offset_int rmaxsize;
rmaxsize = (omax - lbound + 1)
* wi::to_offset (unit_size) << LOG2_BITS_PER_UNIT;
if (!known_size_p (maxsize)
|| known_lt (rmaxsize, maxsize))
{
/* If we know an upper bound below the declared
one this is no longer variable. */
if (known_size_p (maxsize))
seen_variable_array_ref = false;
maxsize = rmaxsize;
}
}
/* Try to adjust bit_offset with range information. */
offset_int omin
= offset_int::from (min, TYPE_SIGN (TREE_TYPE (index)));
if (known_le (lbound, omin))
{
poly_offset_int woffset
= wi::sext (omin - lbound,
TYPE_PRECISION (TREE_TYPE (index)));
woffset *= wi::to_offset (unit_size);
woffset <<= LOG2_BITS_PER_UNIT;
bit_offset += woffset;
if (known_size_p (maxsize))
maxsize -= woffset;
}
}
}
}
break;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment