diff options
Diffstat (limited to 'gcc/omp-low.c')
-rw-r--r-- | gcc/omp-low.c | 22 |
1 files changed, 20 insertions, 2 deletions
diff --git a/gcc/omp-low.c b/gcc/omp-low.c index c3972383bcf..c5279646ff3 100644 --- a/gcc/omp-low.c +++ b/gcc/omp-low.c @@ -11230,13 +11230,31 @@ lower_omp_for (gimple_stmt_iterator *gsi_p, omp_context *ctx) for (i = 0; i < gimple_omp_for_collapse (stmt); i++) { rhs_p = gimple_omp_for_initial_ptr (stmt, i); - if (!is_gimple_min_invariant (*rhs_p)) + if (TREE_CODE (*rhs_p) == TREE_VEC) + { + if (!is_gimple_min_invariant (TREE_VEC_ELT (*rhs_p, 1))) + TREE_VEC_ELT (*rhs_p, 1) + = get_formal_tmp_var (TREE_VEC_ELT (*rhs_p, 1), &cnt_list); + if (!is_gimple_min_invariant (TREE_VEC_ELT (*rhs_p, 2))) + TREE_VEC_ELT (*rhs_p, 1) + = get_formal_tmp_var (TREE_VEC_ELT (*rhs_p, 2), &cnt_list); + } + else if (!is_gimple_min_invariant (*rhs_p)) *rhs_p = get_formal_tmp_var (*rhs_p, &cnt_list); else if (TREE_CODE (*rhs_p) == ADDR_EXPR) recompute_tree_invariant_for_addr_expr (*rhs_p); rhs_p = gimple_omp_for_final_ptr (stmt, i); - if (!is_gimple_min_invariant (*rhs_p)) + if (TREE_CODE (*rhs_p) == TREE_VEC) + { + if (!is_gimple_min_invariant (TREE_VEC_ELT (*rhs_p, 1))) + TREE_VEC_ELT (*rhs_p, 1) + = get_formal_tmp_var (TREE_VEC_ELT (*rhs_p, 1), &cnt_list); + if (!is_gimple_min_invariant (TREE_VEC_ELT (*rhs_p, 2))) + TREE_VEC_ELT (*rhs_p, 1) + = get_formal_tmp_var (TREE_VEC_ELT (*rhs_p, 2), &cnt_list); + } + else if (!is_gimple_min_invariant (*rhs_p)) *rhs_p = get_formal_tmp_var (*rhs_p, &cnt_list); else if (TREE_CODE (*rhs_p) == ADDR_EXPR) recompute_tree_invariant_for_addr_expr (*rhs_p); |