/* Loop autoparallelization.
- Copyright (C) 2006-2019 Free Software Foundation, Inc.
+ Copyright (C) 2006-2021 Free Software Foundation, Inc.
Contributed by Sebastian Pop <pop@cri.ensmp.fr>
Zdenek Dvorak <dvorakz@suse.cz> and Razya Ladelsky <razya@il.ibm.com>.
#include "omp-general.h"
#include "omp-low.h"
#include "tree-ssa.h"
-#include "params.h"
-#include "params-enum.h"
#include "tree-ssa-alias.h"
#include "tree-eh.h"
#include "gomp-constants.h"
gimple_assign_rhs1_ptr (next_stmt),
gimple_assign_rhs2_ptr (next_stmt));
update_stmt (next_stmt);
-
- if (CONSTANT_CLASS_P (gimple_assign_rhs1 (next_stmt)))
- LOOP_VINFO_OPERANDS_SWAPPED (loop_info) = true;
}
else
return false;
if (dump_enabled_p ())
report_ploop_op (MSG_NOTE, def_stmt,
"detected reduction: need to swap operands: ");
-
- if (CONSTANT_CLASS_P (gimple_assign_rhs1 (def_stmt)))
- LOOP_VINFO_OPERANDS_SWAPPED (loop_info) = true;
}
else
{
/* Minimal number of iterations of a loop that should be executed in each
thread. */
-#define MIN_PER_THREAD PARAM_VALUE (PARAM_PARLOOPS_MIN_PER_THREAD)
+#define MIN_PER_THREAD param_parloops_min_per_thread
/* Element of the hashtable, representing a
reduction in the current loop. */
if (!dslot->to)
{
var_copy = create_tmp_var (TREE_TYPE (var), get_name (var));
- DECL_GIMPLE_REG_P (var_copy) = DECL_GIMPLE_REG_P (var);
+ DECL_NOT_GIMPLE_REG_P (var_copy) = DECL_NOT_GIMPLE_REG_P (var);
dslot->uid = uid;
dslot->to = var_copy;
DECL_ARGUMENTS (decl) = t;
allocate_struct_function (decl, false);
- DECL_STRUCT_FUNCTION (decl)->last_clique = act_cfun->last_clique;
/* The call to allocate_struct_function clobbers CFUN, so we need to restore
it. */
/* Emit GIMPLE_OMP_FOR. */
if (oacc_kernels_p)
/* Parallelized OpenACC kernels constructs use gang parallelism. See also
- omp-offload.c:execute_oacc_device_lower. */
+ omp-offload.c:execute_oacc_loop_designation. */
t = build_omp_clause (loc, OMP_CLAUSE_GANG);
else
{
t = build_omp_clause (loc, OMP_CLAUSE_SCHEDULE);
- int chunk_size = PARAM_VALUE (PARAM_PARLOOPS_CHUNK_SIZE);
- enum PARAM_PARLOOPS_SCHEDULE_KIND schedule_type \
- = (enum PARAM_PARLOOPS_SCHEDULE_KIND) PARAM_VALUE (PARAM_PARLOOPS_SCHEDULE);
- switch (schedule_type)
+ int chunk_size = param_parloops_chunk_size;
+ switch (param_parloops_schedule)
{
- case PARAM_PARLOOPS_SCHEDULE_KIND_static:
+ case PARLOOPS_SCHEDULE_STATIC:
OMP_CLAUSE_SCHEDULE_KIND (t) = OMP_CLAUSE_SCHEDULE_STATIC;
break;
- case PARAM_PARLOOPS_SCHEDULE_KIND_dynamic:
+ case PARLOOPS_SCHEDULE_DYNAMIC:
OMP_CLAUSE_SCHEDULE_KIND (t) = OMP_CLAUSE_SCHEDULE_DYNAMIC;
break;
- case PARAM_PARLOOPS_SCHEDULE_KIND_guided:
+ case PARLOOPS_SCHEDULE_GUIDED:
OMP_CLAUSE_SCHEDULE_KIND (t) = OMP_CLAUSE_SCHEDULE_GUIDED;
break;
- case PARAM_PARLOOPS_SCHEDULE_KIND_auto:
+ case PARLOOPS_SCHEDULE_AUTO:
OMP_CLAUSE_SCHEDULE_KIND (t) = OMP_CLAUSE_SCHEDULE_AUTO;
chunk_size = 0;
break;
- case PARAM_PARLOOPS_SCHEDULE_KIND_runtime:
+ case PARLOOPS_SCHEDULE_RUNTIME:
OMP_CLAUSE_SCHEDULE_KIND (t) = OMP_CLAUSE_SCHEDULE_RUNTIME;
chunk_size = 0;
break;
reduction results in REDUCTION_STORES. */
static bool
-oacc_entry_exit_ok_1 (bitmap in_loop_bbs, vec<basic_block> region_bbs,
+oacc_entry_exit_ok_1 (bitmap in_loop_bbs, const vec<basic_block> ®ion_bbs,
reduction_info_table_type *reduction_list,
bitmap reduction_stores)
{
if any changes were made. */
static bool
-oacc_entry_exit_single_gang (bitmap in_loop_bbs, vec<basic_block> region_bbs,
+oacc_entry_exit_single_gang (bitmap in_loop_bbs,
+ const vec<basic_block> ®ion_bbs,
bitmap reduction_stores)
{
tree gang_pos = NULL_TREE;
reduction_info_table_type *reduction_list)
{
basic_block *loop_bbs = get_loop_body_in_dom_order (loop);
- vec<basic_block> region_bbs
+ auto_vec<basic_block> region_bbs
= get_all_dominated_blocks (CDI_DOMINATORS, ENTRY_BLOCK_PTR_FOR_FN (cfun));
bitmap in_loop_bbs = BITMAP_ALLOC (NULL);
}
}
- region_bbs.release ();
free (loop_bbs);
BITMAP_FREE (in_loop_bbs);
{
unsigned n_threads;
bool changed = false;
- class loop *loop;
class loop *skip_loop = NULL;
class tree_niter_desc niter_desc;
struct obstack parloop_obstack;
calculate_dominance_info (CDI_DOMINATORS);
- FOR_EACH_LOOP (loop, 0)
+ for (auto loop : loops_list (cfun, 0))
{
if (loop == skip_loop)
{