diff options
Diffstat (limited to 'gcc/tree-parloops.c')
-rw-r--r-- | gcc/tree-parloops.c | 52 |
1 files changed, 36 insertions, 16 deletions
diff --git a/gcc/tree-parloops.c b/gcc/tree-parloops.c index 79d616b760a..538932e50bf 100644 --- a/gcc/tree-parloops.c +++ b/gcc/tree-parloops.c @@ -1824,7 +1824,7 @@ try_transform_to_exit_first_loop_alt (struct loop *loop, /* Figure out whether nit + 1 overflows. */ if (TREE_CODE (nit) == INTEGER_CST) { - if (!tree_int_cst_equal (nit, TYPE_MAXVAL (nit_type))) + if (!tree_int_cst_equal (nit, TYPE_MAX_VALUE (nit_type))) { alt_bound = fold_build2_loc (UNKNOWN_LOCATION, PLUS_EXPR, nit_type, nit, build_one_cst (nit_type)); @@ -1869,7 +1869,7 @@ try_transform_to_exit_first_loop_alt (struct loop *loop, return false; /* Check if nit + 1 overflows. */ - widest_int type_max = wi::to_widest (TYPE_MAXVAL (nit_type)); + widest_int type_max = wi::to_widest (TYPE_MAX_VALUE (nit_type)); if (nit_max >= type_max) return false; @@ -2115,10 +2115,12 @@ create_parallel_loop (struct loop *loop, tree loop_fn, tree data, gcc_assert (exit == single_dom_exit (loop)); guard = make_edge (for_bb, ex_bb, 0); + /* FIXME: What is the probability? */ + guard->probability = profile_probability::guessed_never (); /* Split the latch edge, so LOOPS_HAVE_SIMPLE_LATCHES is still valid. */ loop->latch = split_edge (single_succ_edge (loop->latch)); single_pred_edge (loop->latch)->flags = 0; - end = make_edge (single_pred (loop->latch), ex_bb, EDGE_FALLTHRU); + end = make_single_succ_edge (single_pred (loop->latch), ex_bb, EDGE_FALLTHRU); rescan_loop_exit (end, true, false); for (gphi_iterator gpi = gsi_start_phis (ex_bb); @@ -2249,7 +2251,6 @@ gen_parallel_loop (struct loop *loop, gimple_seq stmts; edge entry, exit; struct clsn_data clsn_data; - unsigned prob; location_t loc; gimple *cond_stmt; unsigned int m_p_thread=2; @@ -2356,10 +2357,11 @@ gen_parallel_loop (struct loop *loop, initialize_original_copy_tables (); /* We assume that the loop usually iterates a lot. */ - prob = 4 * REG_BR_PROB_BASE / 5; loop_version (loop, many_iterations_cond, NULL, - prob, REG_BR_PROB_BASE - prob, - prob, REG_BR_PROB_BASE - prob, true); + profile_probability::likely (), + profile_probability::unlikely (), + profile_probability::likely (), + profile_probability::unlikely (), true); update_ssa (TODO_update_ssa); free_original_copy_tables (); } @@ -2473,23 +2475,39 @@ build_new_reduction (reduction_info_table_type *reduction_list, gcc_assert (reduc_stmt); - if (dump_file && (dump_flags & TDF_DETAILS)) - { - fprintf (dump_file, - "Detected reduction. reduction stmt is:\n"); - print_gimple_stmt (dump_file, reduc_stmt, 0); - fprintf (dump_file, "\n"); - } - if (gimple_code (reduc_stmt) == GIMPLE_PHI) { tree op1 = PHI_ARG_DEF (reduc_stmt, 0); gimple *def1 = SSA_NAME_DEF_STMT (op1); reduction_code = gimple_assign_rhs_code (def1); } - else reduction_code = gimple_assign_rhs_code (reduc_stmt); + /* Check for OpenMP supported reduction. */ + switch (reduction_code) + { + case PLUS_EXPR: + case MULT_EXPR: + case MAX_EXPR: + case MIN_EXPR: + case BIT_IOR_EXPR: + case BIT_XOR_EXPR: + case BIT_AND_EXPR: + case TRUTH_OR_EXPR: + case TRUTH_XOR_EXPR: + case TRUTH_AND_EXPR: + break; + default: + return; + } + + if (dump_file && (dump_flags & TDF_DETAILS)) + { + fprintf (dump_file, + "Detected reduction. reduction stmt is:\n"); + print_gimple_stmt (dump_file, reduc_stmt, 0); + fprintf (dump_file, "\n"); + } new_reduction = XCNEW (struct reduction_info); @@ -3132,6 +3150,8 @@ oacc_entry_exit_single_gang (bitmap in_loop_bbs, vec<basic_block> region_bbs, gsi_insert_after (&gsi2, cond, GSI_NEW_STMT); edge e3 = make_edge (bb, bb3, EDGE_FALSE_VALUE); + /* FIXME: What is the probability? */ + e3->probability = profile_probability::guessed_never (); e->flags = EDGE_TRUE_VALUE; tree vdef = gimple_vdef (stmt); |