diff options
author | Jakub Jelinek <jakub@redhat.com> | 2019-06-04 14:49:03 +0200 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2019-06-04 14:49:03 +0200 |
commit | 7855700e63045fcd807718625e1c45f561dc7085 (patch) | |
tree | 89b18afd8600dee3f74ec8eee9799a4697964396 /gcc/omp-expand.c | |
parent | 0697ecea7cc6f2a0813716fcf8d922f312f59dce (diff) | |
download | gcc-7855700e63045fcd807718625e1c45f561dc7085.zip gcc-7855700e63045fcd807718625e1c45f561dc7085.tar.gz gcc-7855700e63045fcd807718625e1c45f561dc7085.tar.bz2 |
gimplify.c (gimplify_scan_omp_clauses): Don't sorry_at on lastprivate conditional on combined for simd.
* gimplify.c (gimplify_scan_omp_clauses): Don't sorry_at on lastprivate
conditional on combined for simd.
* omp-low.c (struct omp_context): Add combined_into_simd_safelen0
member.
(lower_rec_input_clauses): For gimple_omp_for_combined_into_p max_vf 1
constructs, don't remove lastprivate_conditional_map, but instead set
ctx->combined_into_simd_safelen0 and adjust hash_map, so that it points
to parent construct temporaries.
(lower_lastprivate_clauses): Handle ctx->combined_into_simd_safelen0
like !ctx->lastprivate_conditional_map.
(lower_omp_1) <case GIMPLE_ASSIGN>: If up->combined_into_simd_safelen0,
use up->outer context instead of up.
* omp-expand.c (expand_omp_for_generic): Perform cond_var bump even if
gimple_omp_for_combined_p.
(expand_omp_for_static_nochunk): Likewise.
(expand_omp_for_static_chunk): Add forgotten cond_var bump that was
probably moved over into expand_omp_for_generic rather than being copied
there.
gcc/cp/
* cp-tree.h (CP_OMP_CLAUSE_INFO): Allow for any clauses up to _condvar_
instead of only up to linear.
gcc/testsuite/
* c-c++-common/gomp/lastprivate-conditional-2.c (foo): Don't expect
a sorry_at on any of the clauses.
libgomp/
* testsuite/libgomp.c-c++-common/lastprivate-conditional-7.c: New test.
* testsuite/libgomp.c-c++-common/lastprivate-conditional-8.c: New test.
* testsuite/libgomp.c-c++-common/lastprivate-conditional-9.c: New test.
* testsuite/libgomp.c-c++-common/lastprivate-conditional-10.c: New test.
From-SVN: r271907
Diffstat (limited to 'gcc/omp-expand.c')
-rw-r--r-- | gcc/omp-expand.c | 89 |
1 files changed, 53 insertions, 36 deletions
diff --git a/gcc/omp-expand.c b/gcc/omp-expand.c index 0c31f95..2eae8c0 100644 --- a/gcc/omp-expand.c +++ b/gcc/omp-expand.c @@ -3257,6 +3257,25 @@ expand_omp_for_generic (struct omp_region *region, vmain = gimple_omp_continue_control_use (cont_stmt); vback = gimple_omp_continue_control_def (cont_stmt); + if (cond_var) + { + tree itype = TREE_TYPE (cond_var); + tree t2; + if ((fd->ordered && fd->collapse == 1) + || bias + || POINTER_TYPE_P (type) + || TREE_CODE (fd->loop.n1) != INTEGER_CST + || fd->loop.cond_code != LT_EXPR) + t2 = build_int_cst (itype, 1); + else + t2 = fold_convert (itype, fd->loop.step); + t2 = fold_build2 (PLUS_EXPR, itype, cond_var, t2); + t2 = force_gimple_operand_gsi (&gsi, t2, false, + NULL_TREE, true, GSI_SAME_STMT); + assign_stmt = gimple_build_assign (cond_var, t2); + gsi_insert_before (&gsi, assign_stmt, GSI_SAME_STMT); + } + if (!gimple_omp_for_combined_p (fd->for_stmt)) { if (POINTER_TYPE_P (type)) @@ -3270,25 +3289,6 @@ expand_omp_for_generic (struct omp_region *region, assign_stmt = gimple_build_assign (vback, t); gsi_insert_before (&gsi, assign_stmt, GSI_SAME_STMT); - if (cond_var) - { - tree itype = TREE_TYPE (cond_var); - tree t2; - if ((fd->ordered && fd->collapse == 1) - || bias - || POINTER_TYPE_P (type) - || TREE_CODE (fd->loop.n1) != INTEGER_CST - || fd->loop.cond_code != LT_EXPR) - t2 = build_int_cst (itype, 1); - else - t2 = fold_convert (itype, fd->loop.step); - t2 = fold_build2 (PLUS_EXPR, itype, cond_var, t2); - t2 = force_gimple_operand_gsi (&gsi, t2, false, - NULL_TREE, true, GSI_SAME_STMT); - assign_stmt = gimple_build_assign (cond_var, t2); - gsi_insert_before (&gsi, assign_stmt, GSI_SAME_STMT); - } - if (fd->ordered && counts[fd->collapse - 1] == NULL_TREE) { tree tem; @@ -3962,6 +3962,23 @@ expand_omp_for_static_nochunk (struct omp_region *region, vmain = gimple_omp_continue_control_use (cont_stmt); vback = gimple_omp_continue_control_def (cont_stmt); + if (cond_var) + { + tree itype = TREE_TYPE (cond_var); + tree t2; + if (POINTER_TYPE_P (type) + || TREE_CODE (n1) != INTEGER_CST + || fd->loop.cond_code != LT_EXPR) + t2 = build_int_cst (itype, 1); + else + t2 = fold_convert (itype, step); + t2 = fold_build2 (PLUS_EXPR, itype, cond_var, t2); + t2 = force_gimple_operand_gsi (&gsi, t2, false, + NULL_TREE, true, GSI_SAME_STMT); + assign_stmt = gimple_build_assign (cond_var, t2); + gsi_insert_before (&gsi, assign_stmt, GSI_SAME_STMT); + } + if (!gimple_omp_for_combined_p (fd->for_stmt)) { if (POINTER_TYPE_P (type)) @@ -3975,23 +3992,6 @@ expand_omp_for_static_nochunk (struct omp_region *region, assign_stmt = gimple_build_assign (vback, t); gsi_insert_before (&gsi, assign_stmt, GSI_SAME_STMT); - if (cond_var) - { - tree itype = TREE_TYPE (cond_var); - tree t2; - if (POINTER_TYPE_P (type) - || TREE_CODE (n1) != INTEGER_CST - || fd->loop.cond_code != LT_EXPR) - t2 = build_int_cst (itype, 1); - else - t2 = fold_convert (itype, step); - t2 = fold_build2 (PLUS_EXPR, itype, cond_var, t2); - t2 = force_gimple_operand_gsi (&gsi, t2, false, - NULL_TREE, true, GSI_SAME_STMT); - assign_stmt = gimple_build_assign (cond_var, t2); - gsi_insert_before (&gsi, assign_stmt, GSI_SAME_STMT); - } - t = build2 (fd->loop.cond_code, boolean_type_node, DECL_P (vback) && TREE_ADDRESSABLE (vback) ? t : vback, e); @@ -4607,6 +4607,23 @@ expand_omp_for_static_chunk (struct omp_region *region, vmain = gimple_omp_continue_control_use (cont_stmt); vback = gimple_omp_continue_control_def (cont_stmt); + if (cond_var) + { + tree itype = TREE_TYPE (cond_var); + tree t2; + if (POINTER_TYPE_P (type) + || TREE_CODE (n1) != INTEGER_CST + || fd->loop.cond_code != LT_EXPR) + t2 = build_int_cst (itype, 1); + else + t2 = fold_convert (itype, step); + t2 = fold_build2 (PLUS_EXPR, itype, cond_var, t2); + t2 = force_gimple_operand_gsi (&gsi, t2, false, + NULL_TREE, true, GSI_SAME_STMT); + assign_stmt = gimple_build_assign (cond_var, t2); + gsi_insert_before (&gsi, assign_stmt, GSI_SAME_STMT); + } + if (!gimple_omp_for_combined_p (fd->for_stmt)) { if (POINTER_TYPE_P (type)) |