re PR c++/85077 (V[248][SD]F abs not optimized to)

PR c++/85077
	* cp-gimplify.c (cp_fold) <case CONSTRUCTOR>: For ctors with vector
	type call fold to generate VECTOR_CSTs when possible.

	* g++.dg/ext/vector35.C: New test.

From-SVN: r258903
This commit is contained in:
Jakub Jelinek 2018-03-27 22:00:56 +02:00 committed by Jakub Jelinek
parent a7dea61705
commit 153dba6cbb
4 changed files with 31 additions and 0 deletions

View file

@ -1,5 +1,9 @@
2018-03-27 Jakub Jelinek <jakub@redhat.com>
PR c++/85077
* cp-gimplify.c (cp_fold) <case CONSTRUCTOR>: For ctors with vector
type call fold to generate VECTOR_CSTs when possible.
PR c++/85076
* tree.c (cp_build_reference_type): If to_type is error_mark_node,
return it right away.

View file

@ -2504,6 +2504,8 @@ cp_fold (tree x)
CONSTRUCTOR_PLACEHOLDER_BOUNDARY (x)
= CONSTRUCTOR_PLACEHOLDER_BOUNDARY (org_x);
}
if (VECTOR_TYPE_P (TREE_TYPE (x)))
x = fold (x);
break;
}
case TREE_VEC:

View file

@ -1,5 +1,8 @@
2018-03-27 Jakub Jelinek <jakub@redhat.com>
PR c++/85077
* g++.dg/ext/vector35.C: New test.
PR c++/85061
* g++.dg/ext/builtin-offsetof3.C: New test.

View file

@ -0,0 +1,22 @@
// PR c++/85077
// { dg-do compile }
// { dg-options "-Ofast -fdump-tree-forwprop1" }
typedef float V __attribute__((vector_size (4 * sizeof (float))));
typedef double W __attribute__((vector_size (2 * sizeof (double))));
void
foo (V *y)
{
V x = *y;
*y = x < 0 ? -x : x;
}
void
bar (W *y)
{
W x = *y;
*y = x < 0 ? -x : x;
}
// { dg-final { scan-tree-dump-times "ABS_EXPR <" 2 "forwprop1" } }