Commit c7d7e222 by Bin Cheng Committed by Bin Cheng

tree-data-ref.c (prune_runtime_alias_test_list): Relax minimal segment length…

tree-data-ref.c (prune_runtime_alias_test_list): Relax minimal segment length for dr_b and compute it in wide_int.

	* tree-data-ref.c (prune_runtime_alias_test_list): Relax minimal
	segment length for dr_b and compute it in wide_int.

	gcc/testsuite
	* gcc.dg/vect/pr80815-3.c: New test.

From-SVN: r248725
parent 945bafd6
2017-05-31 Bin Cheng <bin.cheng@arm.com>
* tree-data-ref.c (prune_runtime_alias_test_list): Relax minimal
segment length for dr_b and compute it in wide_int.
2017-05-31 Richard Biener <rguenther@suse.de>
PR tree-optimization/80906
......
2017-05-31 Bin Cheng <bin.cheng@arm.com>
* gcc.dg/vect/pr80815-3.c: New test.
2017-05-31 Richard Biener <rguenther@suse.de>
PR tree-optimization/80906
......
/* { dg-require-effective-target vect_int } */
#include "tree-vect.h"
int arr[2048];
int res[100] = { 2148, 2146, 2144, 2142, 2140, 2138, 2136, 2134, 2132, 2130,
2128, 2126, 2124, 2122, 2120, 2118, 2116, 2114, 2112, 2110,
2108, 2106, 2104, 2102, 2100, 2098, 2096, 2094, 2092, 2090,
2088, 2086, 2084, 2082, 2080, 2078, 2076, 2074, 2072, 2070,
2068, 2066, 2064, 2062, 2060, 2058, 2056, 2054, 3078, 2050};
__attribute__ ((noinline)) int
foo (int *a, int *b, int len)
{
int i;
int *a1 = a;
int *a0 = a1 - 4;
for (i = 0; i < len; i++)
{
*b = *a0 + *a1;
b--;
a0++;
a1++;
}
return 0;
}
int main (void)
{
int *a = &arr[1027];
int *b = &arr[1024];
int i;
for (i = 0; i < 2048; i++)
arr[i] = i;
foo (a, b, 50);
for (i = 975; i < 1025; i++)
if (arr[i] != res[i - 975])
abort ();
return 0;
}
/* { dg-final { scan-tree-dump "improved number of alias checks from \[0-9\]* to 1" "vect" } } */
......@@ -1361,14 +1361,10 @@ prune_runtime_alias_test_list (vec<dr_with_seg_len_pair_t> *alias_pairs,
wide_int min_seg_len_b;
tree new_seg_len;
if (tree_fits_uhwi_p (dr_b1->seg_len))
{
min_seg_len_b = dr_b1->seg_len;
if (tree_int_cst_sign_bit (dr_b1->seg_len))
min_seg_len_b = wi::neg (min_seg_len_b);
}
if (TREE_CODE (dr_b1->seg_len) == INTEGER_CST)
min_seg_len_b = wi::abs (dr_b1->seg_len);
else
min_seg_len_b = wi::uhwi (factor, TYPE_PRECISION (sizetype));
min_seg_len_b = wi::mul (factor, wi::abs (DR_STEP (dr_b1->dr)));
/* Now we try to merge alias check dr_a1 & dr_b and dr_a2 & dr_b.
......
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