[PATCH] Fix ICEs with "omp declare simd" attribute on versioned fns or omp_fn* (PR middle-end/83977)
Jakub Jelinek
jakub@redhat.com
Thu Jan 25 15:38:00 GMT 2018
On Wed, Jan 24, 2018 at 06:51:54PM +0100, Richard Biener wrote:
> >Well, "omp declare simd" is a part of the ABI just for the original
> >exported
> >functions, for everything else it is a pure optimization, but I'm not
> >sure
> >if we want to deoptimize e.g. callers of these functions outside of
> >loops
> >by disabling the signature changing cloning for those. For calls from
> >within OpenMP simd regions or other loops where we try hard to
> >vectorize
> >them, it might make sense not to change those callers, for callers from
> >other loops, a question.
>
> Until we can distinguish the cases I think not changing the signature by
> default might be a good thing.
Done thusly, bootstrapped/regtested on x86_64-linux and i686-linux,
committed to trunk.
2018-01-25 Jakub Jelinek <jakub@redhat.com>
PR middle-end/83977
* ipa-fnsummary.c (compute_fn_summary): Clear can_change_signature
on functions with #pragma omp declare simd or functions with simd
attribute.
* omp-simd-clone.c (expand_simd_clones): Revert 2018-01-24 change.
* config/i386/i386.c (ix86_simd_clone_compute_vecsize_and_simdlen):
Remove trailing \n from warning_at calls.
* c-c++-common/gomp/pr83977-1.c: Add -w to dg-options.
--- gcc/ipa-fnsummary.c.jj 2018-01-25 12:13:06.651327787 +0100
+++ gcc/ipa-fnsummary.c 2018-01-25 12:14:22.282340706 +0100
@@ -2467,7 +2467,11 @@ compute_fn_summary (struct cgraph_node *
info->inlinable = tree_inlinable_function_p (node->decl);
/* Type attributes can use parameter indices to describe them. */
- if (TYPE_ATTRIBUTES (TREE_TYPE (node->decl)))
+ if (TYPE_ATTRIBUTES (TREE_TYPE (node->decl))
+ /* Likewise for #pragma omp declare simd functions or functions
+ with simd attribute. */
+ || lookup_attribute ("omp declare simd",
+ DECL_ATTRIBUTES (node->decl)))
node->local.can_change_signature = false;
else
{
--- gcc/omp-simd-clone.c.jj 2018-01-25 12:13:06.624327783 +0100
+++ gcc/omp-simd-clone.c 2018-01-25 12:14:22.282340706 +0100
@@ -1574,10 +1574,6 @@ expand_simd_clones (struct cgraph_node *
tree attr = lookup_attribute ("omp declare simd",
DECL_ATTRIBUTES (node->decl));
if (attr == NULL_TREE
- /* Ignore artificial decls with an abstract origin, results of function
- cloning, versioning etc. We want to handle certain builtins
- with simd attribute, like __builtin_sin. */
- || (DECL_ARTIFICIAL (node->decl) && DECL_ABSTRACT_ORIGIN (node->decl))
|| node->global.inlined_to
|| lookup_attribute ("noclone", DECL_ATTRIBUTES (node->decl)))
return;
--- gcc/config/i386/i386.c.jj 2018-01-24 23:41:33.714031847 +0100
+++ gcc/config/i386/i386.c 2018-01-25 12:16:02.231357778 +0100
@@ -50224,7 +50224,7 @@ ix86_simd_clone_compute_vecsize_and_simd
break;
default:
warning_at (DECL_SOURCE_LOCATION (node->decl), 0,
- "unsupported return type %qT for simd\n", ret_type);
+ "unsupported return type %qT for simd", ret_type);
return 0;
}
@@ -50246,7 +50246,7 @@ ix86_simd_clone_compute_vecsize_and_simd
break;
default:
warning_at (DECL_SOURCE_LOCATION (node->decl), 0,
- "unsupported argument type %qT for simd\n", TREE_TYPE (t));
+ "unsupported argument type %qT for simd", TREE_TYPE (t));
return 0;
}
--- gcc/testsuite/c-c++-common/gomp/pr83977-1.c.jj 2018-01-24 17:26:25.217357997 +0100
+++ gcc/testsuite/c-c++-common/gomp/pr83977-1.c 2018-01-25 12:18:34.196383735 +0100
@@ -1,6 +1,6 @@
/* PR middle-end/83977 */
/* { dg-do compile } */
-/* { dg-additional-options "-O2" } */
+/* { dg-additional-options "-O2 -w" } */
struct S { int a, b, c; };
Jakub
More information about the Gcc-patches
mailing list