diff options
author | Jakub Jelinek <jakub@redhat.com> | 2015-06-17 19:59:25 +0200 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2015-06-17 19:59:25 +0200 |
commit | 8c8b9f3265820507a1a9472fee7384b265692380 (patch) | |
tree | 2678bfd5b1d0ccb490085b30a993176696dcaf3b /gcc/omp-low.c | |
parent | f6e3667f976a0592eb156d948a9dfe240250778d (diff) | |
download | gcc-8c8b9f3265820507a1a9472fee7384b265692380.zip gcc-8c8b9f3265820507a1a9472fee7384b265692380.tar.gz gcc-8c8b9f3265820507a1a9472fee7384b265692380.tar.bz2 |
re PR middle-end/66429 (ICE in expand_GOMP_SIMD_LAST_LANE)
PR middle-end/66429
* omp-low.c (expand_omp_taskreg): Use child_cfun instead of
DECL_STRUCT_FUNCTION (child_fn). Or in has_simduid_loops
and has_force_vectorize_loops flags from cfun into
child_cfun.
(expand_omp_simd): For broken loop, set cfun->has_simduid_loops
if simduid is non-NULL.
* tree-pass.h (make_pass_simduid_cleanup): New prototype.
* passes.def (pass_simduid_cleanup): Add new pass after loop
passes.
* tree-vectorizer.c (adjust_simduid_builtins): Remove one unnecessary
indirection from htab argument's type.
(shrink_simd_arrays): New function.
(vectorize_loops): Use it. Adjust adjust_simduid_builtins caller.
Don't call adjust_simduid_builtins if there are no loops.
(pass_data_simduid_cleanup, pass_simduid_cleanup): New variables.
(pass_simduid_cleanup::execute): New method.
(make_pass_simduid_cleanup): New function.
* c-c++-common/gomp/pr66429.c: New test.
From-SVN: r224568
Diffstat (limited to 'gcc/omp-low.c')
-rw-r--r-- | gcc/omp-low.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/gcc/omp-low.c b/gcc/omp-low.c index 64b5c66..6325b82 100644 --- a/gcc/omp-low.c +++ b/gcc/omp-low.c @@ -5587,7 +5587,9 @@ expand_omp_taskreg (struct omp_region *region) vec_safe_truncate (child_cfun->local_decls, dstidx); /* Inform the callgraph about the new function. */ - DECL_STRUCT_FUNCTION (child_fn)->curr_properties = cfun->curr_properties; + child_cfun->curr_properties = cfun->curr_properties; + child_cfun->has_simduid_loops |= cfun->has_simduid_loops; + child_cfun->has_force_vectorize_loops |= cfun->has_force_vectorize_loops; cgraph_node *node = cgraph_node::get_create (child_fn); node->parallelized_function = 1; cgraph_node::add_new_function (child_fn, true); @@ -7836,6 +7838,8 @@ expand_omp_simd (struct omp_region *region, struct omp_for_data *fd) cfun->has_force_vectorize_loops = true; } } + else if (simduid) + cfun->has_simduid_loops = true; } |