re PR tree-optimization/90006 (gcc loops indefinitely around vect_get_constant_vectors on -O2 -ftree-slp-vectorize -fno-math-errno)
2019-04-08 Richard Biener <rguenther@suse.de> PR tree-optimization/90006 * tree-vect-data-refs.c (vect_get_smallest_scalar_type): Handle calls like lrint. * gcc.dg/vect/bb-slp-pr90006.c: New testcase. From-SVN: r270210
This commit is contained in:
parent
b8e214c6b3
commit
a265c9a929
4 changed files with 51 additions and 0 deletions
|
@ -1,3 +1,9 @@
|
|||
2019-04-08 Richard Biener <rguenther@suse.de>
|
||||
|
||||
PR tree-optimization/90006
|
||||
* tree-vect-data-refs.c (vect_get_smallest_scalar_type): Handle
|
||||
calls like lrint.
|
||||
|
||||
2019-04-08 Andrea Corallo <andrea.corallo@arm.com>
|
||||
|
||||
PR target/83033
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
2019-04-08 Richard Biener <rguenther@suse.de>
|
||||
|
||||
PR tree-optimization/90006
|
||||
* gcc.dg/vect/bb-slp-pr90006.c: New testcase.
|
||||
|
||||
2019-04-08 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR rtl-optimization/89865
|
||||
|
|
31
gcc/testsuite/gcc.dg/vect/bb-slp-pr90006.c
Normal file
31
gcc/testsuite/gcc.dg/vect/bb-slp-pr90006.c
Normal file
|
@ -0,0 +1,31 @@
|
|||
/* { dg-do compile } */
|
||||
/* { dg-additional-options "-fno-math-errno" } */
|
||||
/* { dg-additional-options "-march=x86-64" { target x86_64-*-* i?86-*-* } } */
|
||||
|
||||
long int lrint(double x);
|
||||
|
||||
int a, b;
|
||||
union c {
|
||||
int d;
|
||||
};
|
||||
|
||||
int e()
|
||||
{
|
||||
int f, g, h;
|
||||
long i, j, k;
|
||||
double l, m = b = lrint(0.3127);
|
||||
a = b >> 16 >> 8 & 255;
|
||||
((union c *)e)->d = a;
|
||||
k = m;
|
||||
h = k >> 16 >> 8 & 255;
|
||||
((union c *)(e + 4))->d = h;
|
||||
j = lrint(l);
|
||||
g = j >> 16 >> 8 & 255;
|
||||
((union c *)(e + 8))->d = g;
|
||||
i = lrint(0.292);
|
||||
f = i >> 16 >> 8 & 255;
|
||||
((union c *)(e + 12))->d = f;
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* { dg-final { scan-tree-dump "basic block vectorized" "slp2" { target { { x86_64-*-* i?86-*-* } && ilp32 } } } } */
|
|
@ -141,6 +141,15 @@ vect_get_smallest_scalar_type (stmt_vec_info stmt_info,
|
|||
{
|
||||
tree rhs_type = TREE_TYPE (gimple_assign_rhs1 (assign));
|
||||
|
||||
rhs = TREE_INT_CST_LOW (TYPE_SIZE_UNIT (rhs_type));
|
||||
if (rhs < lhs)
|
||||
scalar_type = rhs_type;
|
||||
}
|
||||
else if (is_gimple_call (stmt_info->stmt)
|
||||
&& gimple_call_num_args (stmt_info->stmt) > 0)
|
||||
{
|
||||
tree rhs_type = TREE_TYPE (gimple_call_arg (stmt_info->stmt, 0));
|
||||
|
||||
rhs = TREE_INT_CST_LOW (TYPE_SIZE_UNIT (rhs_type));
|
||||
if (rhs < lhs)
|
||||
scalar_type = rhs_type;
|
||||
|
|
Loading…
Add table
Reference in a new issue