re PR middle-end/89246 (LTO produces references to cloned symbols which the compiler failed to clone)

PR middle-end/89246
	* config/i386/i386.c (ix86_simd_clone_compute_vecsize_and_simdlen):
	If !node->definition and TYPE_ARG_TYPES is non-NULL, use
	TYPE_ARG_TYPES instead of DECL_ARGUMENTS.

	* gcc.dg/gomp/pr89246-1.c: New test.
	* gcc.dg/gomp/pr89246-2.c: New test.

From-SVN: r268718
This commit is contained in:
Jakub Jelinek 2019-02-09 09:55:39 +01:00 committed by Jakub Jelinek
parent 4fe5c8c730
commit de3ed9259f
5 changed files with 72 additions and 21 deletions

View File

@ -1,3 +1,10 @@
2019-02-09 Jakub Jelinek <jakub@redhat.com>
PR middle-end/89246
* config/i386/i386.c (ix86_simd_clone_compute_vecsize_and_simdlen):
If !node->definition and TYPE_ARG_TYPES is non-NULL, use
TYPE_ARG_TYPES instead of DECL_ARGUMENTS.
2019-02-09 Alan Modra <amodra@gmail.com>
PR target/88343

View File

@ -50447,9 +50447,14 @@ ix86_simd_clone_compute_vecsize_and_simdlen (struct cgraph_node *node,
tree t;
int i;
tree type_arg_types = TYPE_ARG_TYPES (TREE_TYPE (node->decl));
bool decl_arg_p = (node->definition || type_arg_types == NULL_TREE);
for (t = DECL_ARGUMENTS (node->decl), i = 0; t; t = DECL_CHAIN (t), i++)
switch (TYPE_MODE (TREE_TYPE (t)))
for (t = (decl_arg_p ? DECL_ARGUMENTS (node->decl) : type_arg_types), i = 0;
t && t != void_list_node; t = TREE_CHAIN (t), i++)
{
tree arg_type = decl_arg_p ? TREE_TYPE (t) : TREE_VALUE (t);
switch (TYPE_MODE (arg_type))
{
case E_QImode:
case E_HImode:
@ -50459,16 +50464,17 @@ ix86_simd_clone_compute_vecsize_and_simdlen (struct cgraph_node *node,
case E_DFmode:
/* case E_SCmode: */
/* case E_DCmode: */
if (!AGGREGATE_TYPE_P (TREE_TYPE (t)))
if (!AGGREGATE_TYPE_P (arg_type))
break;
/* FALLTHRU */
default:
if (clonei->args[i].arg_type == SIMD_CLONE_ARG_TYPE_UNIFORM)
break;
warning_at (DECL_SOURCE_LOCATION (node->decl), 0,
"unsupported argument type %qT for simd", TREE_TYPE (t));
"unsupported argument type %qT for simd", arg_type);
return 0;
}
}
if (!TREE_PUBLIC (node->decl))
{

View File

@ -1,3 +1,9 @@
2019-02-09 Jakub Jelinek <jakub@redhat.com>
PR middle-end/89246
* gcc.dg/gomp/pr89246-1.c: New test.
* gcc.dg/gomp/pr89246-2.c: New test.
2019-02-08 Jakub Jelinek <jakub@redhat.com>
PR tree-optimization/88739

View File

@ -0,0 +1,19 @@
/* PR middle-end/89246 */
/* { dg-do link { target { int128 && vect_simd_clones } } } */
/* { dg-options "-O2 -fopenmp-simd -w" } */
/* { dg-additional-sources "pr89246-2.c" } */
#pragma omp declare simd
int foo (__int128 x)
{
return x;
}
#pragma omp declare simd
extern int bar (int x);
int
main ()
{
return foo (0) + bar (0);
}

View File

@ -0,0 +1,13 @@
/* PR middle-end/89246 */
/* { dg-do compile { target int128 } } */
/* { dg-options "-O0 -fno-openmp -fno-openmp-simd" } */
#pragma omp declare simd
extern int foo (__int128 x);
#pragma omp declare simd
int
bar (int x)
{
return x + foo (0);
}