summaryrefslogtreecommitdiff
path: root/gcc/omp-expand.c
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2019-06-04 14:49:03 +0200
committerJakub Jelinek <jakub@gcc.gnu.org>2019-06-04 14:49:03 +0200
commit7855700e63045fcd807718625e1c45f561dc7085 (patch)
tree89b18afd8600dee3f74ec8eee9799a4697964396 /gcc/omp-expand.c
parent0697ecea7cc6f2a0813716fcf8d922f312f59dce (diff)
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.c89
1 files changed, 53 insertions, 36 deletions
diff --git a/gcc/omp-expand.c b/gcc/omp-expand.c
index 0c31f95ec30..2eae8c02007 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))