GCC Middle and Back End API Reference
|
Go to the source code of this file.
Data Structures | |
struct | omp_for_data_loop |
struct | omp_for_data |
struct | omp_variant |
struct | omp_addr_tokenizer::omp_addr_token |
Namespaces | |
namespace | omp_addr_tokenizer |
Macros | |
#define | OACC_FN_ATTRIB "oacc function" |
#define | OMP_TS_SCORE_NODE integer_minus_one_node |
#define | OMP_TP_NAMELIST_NODE integer_one_node |
#define | OMP_TSS_ID(NODE) |
#define | OMP_TSS_TRAIT_SELECTORS(NODE) |
#define | OMP_TS_ID(NODE) |
#define | OMP_TS_SCORE(NODE) |
#define | OMP_TS_PROPERTIES(NODE) |
#define | OMP_TP_NAME(NODE) |
#define | OMP_TP_VALUE(NODE) |
#define | OMP_TSS_CODE(t) |
#define | OMP_TSS_NAME(t) |
#define | OMP_TS_CODE(t) |
#define | OMP_TS_NAME(t) |
Typedefs | |
typedef generic_wide_int< fixed_wide_int_storage< 1024 > > | score_wide_int |
typedef omp_addr_tokenizer::omp_addr_token | omp_addr_token |
Variables | |
enum omp_requires | omp_requires_mask |
#define OACC_FN_ATTRIB "oacc function" |
Referenced by oacc_get_fn_attrib(), and oacc_replace_fn_attrib_attr().
#define OMP_TP_NAME | ( | NODE | ) |
Referenced by dump_omp_context_selector(), omp_check_context_selector(), omp_context_name_list_prop(), omp_context_selector_matches(), and omp_context_selector_props_compare().
#define OMP_TP_NAMELIST_NODE integer_one_node |
#define OMP_TP_VALUE | ( | NODE | ) |
#define OMP_TS_CODE | ( | t | ) |
Referenced by dump_omp_context_selector(), omp_check_context_selector(), omp_complete_construct_context(), omp_construct_traits_match(), omp_context_compute_score(), omp_context_selector_matches(), omp_context_selector_set_compare(), omp_get_context_selector(), omp_mark_declare_variant(), and omp_maybe_offloaded().
#define OMP_TS_ID | ( | NODE | ) |
#define OMP_TS_NAME | ( | t | ) |
Referenced by dump_omp_context_selector(), and omp_check_context_selector().
#define OMP_TS_PROPERTIES | ( | NODE | ) |
Referenced by dump_omp_context_selector(), omp_check_context_selector(), omp_construct_traits_match(), omp_context_selector_matches(), omp_context_selector_set_compare(), omp_dynamic_cond(), and omp_selector_is_dynamic().
#define OMP_TS_SCORE | ( | NODE | ) |
Referenced by dump_omp_context_selector(), omp_context_compute_score(), and omp_context_selector_set_compare().
#define OMP_TS_SCORE_NODE integer_minus_one_node |
Accessors for OMP context selectors, used by variant directives. These are represented internally by a multilevel TREE_LIST structure, but these accessors should be used to avoid confusion. The grammar is: context-set-selector-specification: trait-set-selector [, trait-set-selector [, ...]] trait-set-selector: trait-set-selector-name = { trait-selector [, trait-selector [, ... ]] } trait-selector: trait-selector-name [ ( [trait-score: ] trait-property [, trait-property [, ...]] ) ] trait-properties can variously be identifiers, strings, clauses, or expressions. All the lists are chained via TREE_CHAIN. If a score is present, it is internally tacked on to the properties with a TREE_PURPOSE of OMP_TS_SCORE_NODE.
Referenced by make_trait_selector().
#define OMP_TSS_CODE | ( | t | ) |
#define OMP_TSS_ID | ( | NODE | ) |
#define OMP_TSS_NAME | ( | t | ) |
Referenced by dump_omp_context_selector(), and omp_check_context_selector().
#define OMP_TSS_TRAIT_SELECTORS | ( | NODE | ) |
typedef generic_wide_int<fixed_wide_int_storage <1024> > score_wide_int |
Needs to be a GC-friendly widest_int variant, but precision is desirable to be the same on all targets.
enum oacc_loop_flags |
General types and functions that are uselful for processing of OpenMP, OpenACC and similar directivers at various stages of compilation. Copyright (C) 2005-2025 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GCC; see the file COPYING3. If not see <http://www.gnu.org/licenses/>.
Flags for an OpenACC loop.
Enumerator | |
---|---|
OLF_SEQ | |
OLF_AUTO | |
OLF_INDEPENDENT | |
OLF_GANG_STATIC | |
OLF_TILE | |
OLF_REDUCTION | |
OLF_DIM_BASE | |
OLF_DIM_GANG | |
OLF_DIM_WORKER | |
OLF_DIM_VECTOR | |
OLF_MAX |
enum omp_ctx_directive |
enum omp_requires |
Find OMP_FOR resp. OMP_SIMD with non-NULL OMP_FOR_INIT. Also, fill in pdata array, pdata[0] non-NULL if there is anything non-trivial in between, pdata[1] is address of OMP_PARALLEL in between if any, pdata[2] is address of OMP_FOR in between if any and pdata[3] is address of the inner OMP_FOR/OMP_SIMD.
References BIND_EXPR_BLOCK, BIND_EXPR_VARS, BLOCK_VARS, NULL_TREE, OMP_FOR_INIT, TREE_CODE, tsi_one_before_end_p(), and tsi_start().
Referenced by gimplify_omp_for().
|
inline |
References MSG_NOTE, MSG_PRIORITY_INTERNALS, and OPENACC_PRIVATIZATION_QUIET.
Referenced by execute_oacc_device_lower(), and oacc_privatization_candidate_p().
Constructor for metadirective variants.
References build_tree_list().
References omp_ts_info::name, and tree_cons().
References build_int_cst(), integer_type_node, NULL_TREE, OMP_TS_SCORE_NODE, and tree_cons().
Referenced by omp_complete_construct_context(), and omp_get_construct_context().
|
extern |
Constructors for context selectors.
References build_int_cst(), integer_type_node, and tree_cons().
Process the OpenACC 'routine' directive clauses to generate an attribute for the level of parallelism. All dimensions have a size of zero (dynamic). TREE_PURPOSE is set to indicate whether that dimension can have a loop partitioned on it. non-zero indicates yes, zero indicates no. By construction once a non-zero has been reached, further inner dimensions must also be non-zero. We set TREE_VALUE to zero for the dimensions that may be partitioned and 1 for the other ones -- if a loop is (erroneously) spawned at an outer level, we don't want to try and partition it.
References boolean_type_node, build_int_cst(), gcc_checking_assert, integer_type_node, NULL_TREE, OMP_CLAUSE_CHAIN, OMP_CLAUSE_CODE, OMP_CLAUSE_GANG, OMP_CLAUSE_SEQ, OMP_CLAUSE_VECTOR, OMP_CLAUSE_WORKER, and tree_cons().
Retrieve the oacc function attrib and return it. Non-oacc functions will return NULL.
References DECL_ATTRIBUTES, lookup_attribute(), and OACC_FN_ATTRIB.
Referenced by check_omp_nesting_restrictions(), execute_oacc_device_lower(), execute_oacc_loop_designation(), expand_builtin_goacc_parlevel_id_size(), expand_simd_clones(), oacc_do_neutering(), oacc_get_fn_dim_size(), oacc_loop_discover_walk(), omp_declare_target_fn_p(), omp_notice_variable(), omp_sese_active_worker_call(), parallelize_loops(), and scan_omp_for().
|
extern |
Extract an oacc execution dimension from FN. FN must be an offloaded function or routine that has already had its execution dimensions lowered to the target-specific values.
References gcc_assert, oacc_get_fn_attrib(), TREE_CHAIN, TREE_INT_CST_LOW, and TREE_VALUE.
Referenced by execute_oacc_device_lower(), execute_omp_oacc_neuter_broadcast(), fold_internal_goacc_dim(), and cfn_goacc_dim::fold_range().
|
extern |
Extract the dimension axis from an IFN_GOACC_DIM_POS or IFN_GOACC_DIM_SIZE call.
References gcc_checking_assert, gimple_call_arg(), gimple_call_internal_fn(), and TREE_INT_CST_LOW.
Referenced by fold_internal_goacc_dim(), and gimple_range_op_handler::maybe_builtin_call().
Encode an oacc launch argument. This matches the GOMP_LAUNCH_PACK macro on gomp-constants.h. We do not check for overflow.
References build_int_cst(), fold_build2, and unsigned_type_node.
Referenced by expand_omp_target(), and oacc_set_fn_attrib().
Replace any existing oacc fn attribute on FN with updated dimensions.
References DECL_ATTRIBUTES, and oacc_replace_fn_attrib_attr().
Referenced by expand_omp_target(), oacc_set_fn_attrib(), and oacc_validate_dims().
Openacc compute grid dimension clauses are converted to an attribute attached to the function. This permits the target-side code to (a) massage the dimensions, (b) emit that data and (c) optimize. Non-constant dimensions are pushed onto ARGS. The attribute value is a TREE_LIST. A set of dimensions is represented as a list of INTEGER_CST. Those that are runtime exprs are represented as an INTEGER_CST of zero. TODO: Normally the attribute will just contain a single such list. If however it contains a list of lists, this will represent the use of device_type. Each member of the outer list is an assoc list of dimensions, keyed by the device type. The first entry will be the default. Well, that's the plan.
Replace any existing oacc fn attribute in ATTRIBS with updated dimensions.
References get_identifier(), OACC_FN_ATTRIB, TREE_CHAIN, tree_cons(), and TREE_PURPOSE.
Referenced by oacc_replace_fn_attrib().
Scan CLAUSES for launch dimensions and attach them to the oacc function attribute. Push any that are non-constant onto the ARGS list, along with an appropriate GOMP_LAUNCH_DIM tag.
References integer_zero_node, NULL_TREE, oacc_launch_pack(), oacc_replace_fn_attrib(), OMP_CLAUSE_EXPR, OMP_CLAUSE_NUM_GANGS, OMP_CLAUSE_NUM_WORKERS, OMP_CLAUSE_VECTOR_LENGTH, omp_find_clause(), TREE_CODE, and tree_cons().
Referenced by execute_oacc_loop_designation(), and expand_omp_target().
|
extern |
Verify OpenACC routine clauses. Returns 0 if FNDECL should be marked with an OpenACC 'routine' directive, 1 if it has already been marked in compatible way, and -1 if incompatible. Upon returning, the chain of clauses will contain exactly one clause specifying the level of parallelism.
References build_omp_clause(), DECL_ATTRIBUTES, error_at(), gcc_checking_assert, gcc_unreachable, inform(), lookup_attribute(), NULL_TREE, OMP_CLAUSE_CHAIN, OMP_CLAUSE_CODE, omp_clause_code_name, OMP_CLAUSE_GANG, OMP_CLAUSE_LOCATION, OMP_CLAUSE_NOHOST, OMP_CLAUSE_SEQ, OMP_CLAUSE_VECTOR, OMP_CLAUSE_WORKER, and TREE_VALUE.
Return true if FN is an OpenMP or OpenACC offloading function.
References DECL_ATTRIBUTES, and lookup_attribute().
Referenced by tree_switch_conversion::switch_conversion::build_one_array().
|
extern |
Adjust *COND_CODE and *N2 so that the former is either LT_EXPR or GT_EXPR, given that V is the loop index variable and STEP is loop step.
References build_int_cst(), convert_to_ptrofftype_loc(), fold_build1_loc(), fold_build2_loc(), fold_build_pointer_plus_loc(), gcc_assert, gcc_unreachable, integer_minus_onep(), integer_onep(), wi::neg(), POINTER_TYPE_P, wi::to_widest(), TREE_CODE, tree_int_cst_equal(), TREE_TYPE, and TYPE_SIZE_UNIT.
Referenced by omp_apply_tile(), omp_extract_for_data(), and omp_loop_number_of_iterations().
Build a call to GOMP_barrier.
References builtin_decl_explicit(), g, gimple_build_call(), and gimple_call_set_lhs().
Referenced by expand_omp_for_static_chunk(), expand_omp_for_static_nochunk(), expand_omp_single(), lower_omp_for_scan(), and lower_rec_input_clauses().
Build COMPONENT_REF and set TREE_THIS_VOLATILE and TREE_READONLY on it as appropriate.
References build3(), NULL, TREE_READONLY, TREE_THIS_VOLATILE, and TREE_TYPE.
Referenced by build_outer_var_ref(), build_receiver_ref(), build_receiver_ref(), build_sender_ref(), build_sender_ref(), create_task_copyfn(), lower_omp_target(), and lower_send_clauses().
|
extern |
Diagnose errors in an OpenMP context selector, return CTX if it is correct or error_mark_node otherwise.
References candidate(), error_at(), error_mark_node, exp(), expr_uses_parm_decl(), IDENTIFIER_POINTER, NULL, omp_context_name_list_prop(), OMP_CTX_BEGIN_DECLARE_VARIANT, OMP_CTX_METADIRECTIVE, OMP_TP_NAME, OMP_TP_NAMELIST_NODE, OMP_TP_VALUE, OMP_TRAIT_CONSTRUCT_SIMD, OMP_TRAIT_DEVICE_ARCH, OMP_TRAIT_DEVICE_ISA, OMP_TRAIT_DEVICE_KIND, OMP_TRAIT_DEVICE_NUM, OMP_TRAIT_IMPLEMENTATION_ADMO, OMP_TRAIT_INVALID, OMP_TRAIT_LAST, OMP_TRAIT_SET_CONSTRUCT, OMP_TRAIT_SET_LAST, OMP_TRAIT_USER_CONDITION, OMP_TS_CODE, omp_ts_map, OMP_TS_NAME, OMP_TS_PROPERTIES, OMP_TSS_CODE, OMP_TSS_NAME, OMP_TSS_TRAIT_SELECTORS, sorry_at(), TREE_CHAIN, TREE_CODE, omp_ts_info::valid_properties, walk_tree, and warning_at().
Check whether this DECL belongs to a Fortran optional argument. With 'for_present_check' set to false, decls which are optional parameters themselve are returned as tree - or a NULL_TREE otherwise. Those decls are always pointers. With 'for_present_check' set to true, the decl for checking whether an argument is present is returned; for arguments with value attribute this is the hidden argument and of BOOLEAN_TYPE. If the decl is unrelated to optional arguments, NULL_TREE is returned.
References lang_hooks::decls, and lang_hooks_for_decls::omp_check_optional_argument.
Referenced by lower_omp_target().
|
extern |
Return a name from PROP, a property in selectors accepting name lists.
References gcc_assert, IDENTIFIER_POINTER, lang_GNU_Fortran(), NULL, OMP_TP_NAME, OMP_TP_NAMELIST_NODE, OMP_TP_VALUE, TREE_CODE, TREE_STRING_LENGTH, and TREE_STRING_POINTER.
Referenced by dump_omp_context_selector(), omp_check_context_selector(), omp_context_selector_matches(), omp_context_selector_props_compare(), omp_dynamic_cond(), and omp_target_device_matches_on_host().
Return 1 if context selector CTX matches the current OpenMP context, 0 if it does not and -1 if it is unknown and need to be determined later. Some properties can be checked right away during parsing, others need to wait until the whole TU is parsed, others need to wait until IPA, others until vectorization. CONSTRUCT_CONTEXT is a list of construct traits from the OpenMP context, which must be collected by omp_get_construct_context during gimplification. It is ignored (and may be null) if this function is called during parsing. Otherwise COMPLETE_P should indicate whether CONSTRUCT_CONTEXT is known to be complete and not missing constructs filled in later during compilation. Dynamic properties (which are evaluated at run-time) should always return 1.
References cfun, current_function_decl, DECL_ATTRIBUTES, gcc_assert, gcc_unreachable, IDENTIFIER_POINTER, integer_nonzerop(), integer_zerop(), lookup_attribute(), NULL, NULL_TREE, omp_construct_traits_match(), omp_context_name_list_prop(), omp_device_arch, omp_device_isa, omp_device_kind, omp_maybe_offloaded(), OMP_MEMORY_ORDER_ACQ_REL, OMP_MEMORY_ORDER_ACQUIRE, OMP_MEMORY_ORDER_RELAXED, OMP_MEMORY_ORDER_RELEASE, OMP_MEMORY_ORDER_SEQ_CST, OMP_MEMORY_ORDER_UNSPECIFIED, omp_offload_device_kind_arch_isa(), OMP_REQUIRES_ATOMIC_DEFAULT_MEM_ORDER, OMP_REQUIRES_DYNAMIC_ALLOCATORS, omp_requires_mask, OMP_REQUIRES_REVERSE_OFFLOAD, OMP_REQUIRES_SELF_MAPS, OMP_REQUIRES_UNIFIED_ADDRESS, OMP_REQUIRES_UNIFIED_SHARED_MEMORY, OMP_TP_NAME, OMP_TP_VALUE, OMP_TRAIT_CONSTRUCT_SIMD, OMP_TRAIT_CONSTRUCT_TARGET, OMP_TRAIT_DEVICE_ARCH, OMP_TRAIT_DEVICE_ISA, OMP_TRAIT_DEVICE_KIND, OMP_TRAIT_IMPLEMENTATION_ADMO, OMP_TRAIT_IMPLEMENTATION_DYNAMIC_ALLOCATORS, OMP_TRAIT_IMPLEMENTATION_EXTENSION, OMP_TRAIT_IMPLEMENTATION_REVERSE_OFFLOAD, OMP_TRAIT_IMPLEMENTATION_SELF_MAPS, OMP_TRAIT_IMPLEMENTATION_UNIFIED_ADDRESS, OMP_TRAIT_IMPLEMENTATION_UNIFIED_SHARED_MEMORY, OMP_TRAIT_IMPLEMENTATION_VENDOR, OMP_TRAIT_INVALID, OMP_TRAIT_SET_CONSTRUCT, OMP_TRAIT_SET_DEVICE, OMP_TRAIT_SET_IMPLEMENTATION, OMP_TRAIT_SET_TARGET_DEVICE, OMP_TRAIT_SET_USER, OMP_TRAIT_USER_CONDITION, OMP_TS_CODE, OMP_TS_PROPERTIES, OMP_TSS_CODE, OMP_TSS_TRAIT_SELECTORS, PARSING, PROP_gimple_any, r, sorry(), symtab, targetm, TREE_CHAIN, and tree_fits_shwi_p().
Referenced by omp_declare_variant_candidates(), omp_get_dynamic_candidates(), and omp_metadirective_candidates().
|
extern |
Two attempts are made to resolve calls to "declare variant" functions: early resolution in the gimplifier, and late resolution in the omp_device_lower pass. If early resolution is not possible, the original function call is gimplified into the same form as metadirective and goes through the same late resolution code as metadirective.
Collect "declare variant" candidates for BASE. CONSTRUCT_CONTEXT is the un-augmented context, or NULL_TREE if that information is not available yet.
References omp_variant::alternative, omp_variant::body, candidate(), candidates, DECL_ATTRIBUTES, omp_variant::dynamic_selector, lookup_attribute(), NULL_TREE, omp_complete_construct_context(), omp_context_selector_matches(), omp_variant::selector, TREE_CHAIN, TREE_CODE, TREE_PURPOSE, and TREE_VALUE.
Referenced by expand_variant_call_expr(), and gimplify_omp_dispatch().
Return a tree expression representing the dynamic part of the context selector CTX. SUPERCONTEXT is the surrounding BLOCK, in case we need to introduce a new BLOCK in the result.
References BLOCK_SUPERCONTEXT, build2(), build3(), build_int_cst(), build_omp_clause(), cfun, create_tmp_var, cgraph_node::get(), cgraph_node::has_omp_variant_constructs, integer_one_node, integer_type_node, integer_zero_node, make_node(), map, NULL_TREE, OMP_CLAUSE_CHAIN, OMP_CLAUSE_DECL, OMP_CLAUSE_DEVICE, OMP_CLAUSE_DEVICE_ANCESTOR, OMP_CLAUSE_DEVICE_ID, OMP_CLAUSE_MAP, OMP_CLAUSE_SET_MAP_KIND, omp_context_name_list_prop(), omp_device_num_check(), omp_get_context_selector(), omp_get_context_selector_list(), OMP_TARGET_BODY, OMP_TARGET_CLAUSES, omp_target_device_matches_on_host(), OMP_TP_VALUE, OMP_TRAIT_DEVICE_ARCH, OMP_TRAIT_DEVICE_ISA, OMP_TRAIT_DEVICE_KIND, OMP_TRAIT_DEVICE_NUM, OMP_TRAIT_SET_TARGET_DEVICE, OMP_TRAIT_SET_USER, OMP_TRAIT_USER_CONDITION, OMP_TS_PROPERTIES, PROP_gimple_any, tree_fits_shwi_p(), TREE_SIDE_EFFECTS, TREE_TYPE, UNKNOWN_LOCATION, and void_type_node.
Referenced by expand_late_variant_directive(), expand_omp_metadirective(), and expand_variant_call_expr().
|
extern |
Return a vector of dynamic replacement candidates for the metadirective statement in METADIRECTIVE. Return an empty vector if the metadirective cannot be resolved. This function is intended to be called from the front ends, prior to gimplification.
References candidates, NULL_TREE, omp_get_dynamic_candidates(), and omp_metadirective_candidates().
|
extern |
Extract the header elements of parallel loop FOR_STMT and store them into *FD.
References omp_for_data::adjn1, boolean_type_node, build_bitint_type(), build_int_cst(), build_nonstandard_integer_type(), build_one_cst(), build_zero_cst(), omp_for_data::chunk_size, omp_for_data::collapse, omp_for_data_loop::cond_code, count, create_tmp_var, omp_for_data::factor, omp_for_data::first_inner_iterations, omp_for_data::first_nonrect, fold_binary, fold_build1, fold_build2, fold_build2_loc(), fold_convert, fold_convert_loc(), fold_unary, omp_for_data::for_stmt, gcc_assert, GF_OMP_FOR_KIND_DISTRIBUTE, GF_OMP_FOR_KIND_OACC_LOOP, GF_OMP_FOR_KIND_SIMD, GF_OMP_FOR_KIND_TASKLOOP, gimple_location(), gimple_omp_for_clauses(), gimple_omp_for_cond(), gimple_omp_for_final(), gimple_omp_for_incr(), gimple_omp_for_index(), gimple_omp_for_initial(), gimple_omp_for_kind(), omp_for_data::have_nonctrl_scantemp, omp_for_data::have_nowait, omp_for_data::have_ordered, omp_for_data::have_pointer_condtemp, omp_for_data::have_reductemp, omp_for_data::have_scantemp, i, integer_nonzerop(), integer_one_node, integer_zero_node, integer_zerop(), omp_for_data::iter_type, last, omp_for_data::last_nonrect, omp_for_data::lastprivate_conditional, list_length(), long_integer_type_node, long_long_unsigned_type_node, omp_for_data::loop, omp_for_data::loops, omp_for_data_loop::m1, omp_for_data_loop::m2, make_tree_vec(), omp_for_data_loop::n1, omp_for_data_loop::n2, omp_for_data::non_rect, NULL, NULL_TREE, omp_adjust_for_condition(), OMP_CLAUSE__CONDTEMP_, OMP_CLAUSE__REDUCTEMP_, OMP_CLAUSE__SCANTEMP_, OMP_CLAUSE__SCANTEMP__ALLOC, OMP_CLAUSE__SCANTEMP__CONTROL, OMP_CLAUSE_CHAIN, OMP_CLAUSE_CODE, OMP_CLAUSE_COLLAPSE, OMP_CLAUSE_COLLAPSE_COUNT, OMP_CLAUSE_COLLAPSE_EXPR, OMP_CLAUSE_COLLAPSE_ITERVAR, OMP_CLAUSE_DECL, OMP_CLAUSE_DIST_SCHEDULE, OMP_CLAUSE_DIST_SCHEDULE_CHUNK_EXPR, OMP_CLAUSE_LASTPRIVATE, OMP_CLAUSE_LASTPRIVATE_CONDITIONAL, OMP_CLAUSE_NOWAIT, OMP_CLAUSE_ORDER, OMP_CLAUSE_ORDER_UNCONSTRAINED, OMP_CLAUSE_ORDERED, OMP_CLAUSE_ORDERED_DOACROSS, OMP_CLAUSE_ORDERED_EXPR, OMP_CLAUSE_SCHEDULE, OMP_CLAUSE_SCHEDULE_AUTO, OMP_CLAUSE_SCHEDULE_CHUNK_EXPR, OMP_CLAUSE_SCHEDULE_KIND, OMP_CLAUSE_SCHEDULE_MASK, OMP_CLAUSE_SCHEDULE_RUNTIME, OMP_CLAUSE_SCHEDULE_SIMD, OMP_CLAUSE_SCHEDULE_STATIC, OMP_CLAUSE_TILE, OMP_CLAUSE_TILE_COUNT, OMP_CLAUSE_TILE_ITERVAR, OMP_CLAUSE_TILE_LIST, omp_get_for_step_from_incr(), omp_for_data::ordered, omp_for_data_loop::outer, POINTER_TYPE_P, omp_for_data::pre, omp_for_data::sched_kind, omp_for_data::sched_modifiers, signed_type_for(), omp_for_data::simd_schedule, SSA_NAME_VAR, SSA_VAR_P, omp_for_data_loop::step, omp_for_data::tiling, TREE_CODE, TREE_CONSTANT, tree_int_cst_lt(), TREE_OPERAND, tree_to_shwi(), TREE_TYPE, TREE_VEC_ELT, TYPE_MAX_VALUE, TYPE_MIN_VALUE, TYPE_PRECISION, TYPE_UNSIGNED, and omp_for_data_loop::v.
Referenced by add_taskreg_looptemp_clauses(), expand_omp_for(), expand_task_call(), get_ws_args_for(), gimplify_omp_for(), lower_lastprivate_conditional_clauses(), lower_omp_for(), lower_omp_for_lastprivate(), lower_omp_ordered_clauses(), and workshare_safe_to_combine_p().
|
extern |
Find an OMP clause of type KIND within CLAUSES.
References NULL_TREE, OMP_CLAUSE_CHAIN, and OMP_CLAUSE_CODE.
Referenced by add_taskreg_looptemp_clauses(), adjust_region_code_walk_stmt_fn(), check_omp_nesting_restrictions(), determine_parallel_type(), execute_oacc_loop_designation(), expand_omp_for_generic(), expand_omp_for_init_counts(), expand_omp_for_init_vars(), expand_omp_for_static_chunk(), expand_omp_for_static_nochunk(), expand_omp_sections(), expand_omp_simd(), expand_omp_target(), expand_omp_taskloop_for_inner(), expand_omp_taskloop_for_outer(), expand_parallel_call(), expand_task_call(), expand_taskwait_call(), expand_teams_call(), find_lastprivate_looptemp(), finish_taskreg_scan(), get_target_arguments(), get_ws_args_for(), gimplify_omp_dispatch(), gimplify_omp_for(), gimplify_omp_loop(), gimplify_omp_loop_xform(), gimplify_omp_target_update(), gimplify_omp_task(), gimplify_omp_workshare(), gimplify_scan_omp_clauses(), lower_depend_clauses(), lower_lastprivate_clauses(), lower_lastprivate_conditional_clauses(), lower_omp_1(), lower_omp_for(), lower_omp_for_lastprivate(), lower_omp_master(), lower_omp_ordered(), lower_omp_scan(), lower_omp_scope(), lower_omp_sections(), lower_omp_single(), lower_omp_target(), lower_omp_task_reductions(), lower_omp_taskreg(), lower_omp_teams(), lower_rec_input_clauses(), lower_rec_simd_input_clauses(), modify_call_for_omp_dispatch(), oacc_set_fn_attrib(), omp_default_clause(), omp_discover_declare_target_fn_r(), omp_discover_declare_target_tgt_fn_r(), omp_get_construct_context(), omp_has_nocontext(), omp_has_novariants(), omp_maybe_apply_loop_xforms(), omp_task_reduction_iterate(), omp_task_reductions_find_first(), optimize_omp_library_calls(), optimize_target_teams(), scan_omp_1_stmt(), scan_omp_parallel(), and scan_omp_task().
|
extern |
From context selector CTX, return trait-selector with name SEL in trait-selector-set with name SET if any, or NULL_TREE if not found.
References NULL_TREE, OMP_TS_CODE, OMP_TSS_CODE, OMP_TSS_TRAIT_SELECTORS, and TREE_CHAIN.
Referenced by omp_dynamic_cond(), and omp_selector_is_dynamic().
|
extern |
Similar, but returns the whole trait-selector list for SET in CTX.
References NULL_TREE, OMP_TSS_CODE, OMP_TSS_TRAIT_SELECTORS, and TREE_CHAIN.
Referenced by omp_dynamic_cond(), and omp_selector_is_dynamic().
|
extern |
Return a vector of dynamic replacement candidates for the directive candidates in ALL_VARIANTS. Return an empty vector if the candidates cannot be resolved.
References cfun, dump_file, omp_variant::dynamic_selector, gcc_assert, i, list_length(), omp_variant::matchable, NULL, NULL_TREE, omp_complete_construct_context(), omp_context_compute_score(), omp_context_selector_compare(), omp_context_selector_matches(), omp_selector_is_dynamic(), OMP_TRAIT_SET_CONSTRUCT, OMP_TRAIT_SET_DEVICE, OMP_TRAIT_SET_TARGET_DEVICE, OMP_TSS_CODE, PARSING, print_omp_context_selector(), PROP_gimple_any, r, omp_variant::scorable, omp_variant::score, omp_variant::selector, sort_variant(), symtab, TDF_NONE, and TREE_CHAIN.
Referenced by expand_variant_call_expr(), gimplify_omp_dispatch(), gimplify_omp_metadirective(), omp_early_resolve_metadirective(), and omp_resolve_variant_construct().
Return the looping step from INCR, extracted from the step of a gimple omp for statement.
References fold_build1_loc(), fold_convert, gcc_unreachable, ssizetype, TREE_CODE, TREE_OPERAND, and TREE_TYPE.
Referenced by omp_extract_for_data(), and omp_loop_number_of_iterations().
True if OpenMP should regard this DECL as being a scalar which has Fortran's allocatable or pointer attribute.
References lang_hooks::decls, and lang_hooks_for_decls::omp_is_allocatable_or_ptr.
Referenced by lower_omp_target(), and scan_sharing_clauses().
Return number of iterations of loop I in FOR_STMT. If PSTEP is non-NULL, *PSTEP will be the loop step.
References build_int_cst(), COMPARISON_CLASS_P, EXPR_LOCATION, fold_build1, fold_build2, fold_convert, gcc_assert, gcc_unreachable, i, INTEGRAL_TYPE_P, long_long_integer_type_node, NULL_TREE, omp_adjust_for_condition(), OMP_FOR_COND, OMP_FOR_INCR, OMP_FOR_INIT, omp_get_for_step_from_incr(), POINTER_TYPE_P, ssizetype, TREE_CODE, TREE_OPERAND, TREE_TYPE, TREE_VEC_ELT, TYPE_PRECISION, and TYPE_UNSIGNED.
Referenced by gimplify_omp_loop_xform(), omp_apply_tile(), and omp_maybe_apply_loop_xforms().
Return true if TYPE is an OpenMP mappable type.
References COMPLETE_TYPE_P, and error_mark_node.
Referenced by omp_notice_variable().
Register VARIANT as variant of some base function marked with #pragma omp declare variant. CONSTRUCT is corresponding list of trait-selectors for the construct selector set. This is stashed as the value of the "omp declare variant variant" attribute on VARIANT.
References DECL_ATTRIBUTES, error_at(), get_identifier(), lookup_attribute(), NULL_TREE, omp_context_selector_set_compare(), OMP_TRAIT_INVALID, OMP_TRAIT_SET_CONSTRUCT, OMP_TS_CODE, TREE_CHAIN, tree_cons(), TREE_VALUE, and unshare_expr().
|
extern |
Return maximum SIMT width if offloading may target SIMT hardware.
References startswith().
Referenced by expand_omp_simd(), lower_omp_ordered(), lower_rec_simd_input_clauses(), and scan_omp_1_stmt().
|
extern |
Return maximum possible vectorization factor for the target, or for the OpenMP offload target if one exists.
References GET_MODE_CLASS, GET_MODE_NUNITS(), i, modes, omp_max_vf(), OPTION_SET_P, startswith(), and targetm.
Referenced by execute_omp_device_lower(), lower_rec_simd_input_clauses(), omp_adjust_chunk_size(), and omp_max_vf().
Main entry point for performing OpenMP loop transformations.
References append_to_statement_list(), error_at(), EXPR_LOCATION, find_nested_loop_xform(), gcc_assert, gcc_checking_assert, i, make_tree_vec(), NULL, NULL_TREE, omp_apply_tile(), OMP_CLAUSE_FULL, OMP_CLAUSE_ORDERED, OMP_CLAUSE_PARTIAL, OMP_CLAUSE_PARTIAL_EXPR, OMP_CLAUSE_SIZES, OMP_CLAUSE_SIZES_LIST, omp_find_clause(), OMP_FOR_BODY, OMP_FOR_CLAUSES, OMP_FOR_COND, OMP_FOR_INCR, OMP_FOR_INIT, OMP_FOR_ORIG_DECLS, OMP_FOR_PRE_BODY, omp_loop_number_of_iterations(), OMP_LOOPXFORM_LOWERED, omp_maybe_apply_loop_xforms(), TREE_CODE, TREE_OPERAND, tree_to_shwi(), TREE_VEC_ELT, TREE_VEC_LENGTH, void_node, and walk_tree.
Referenced by gimplify_omp_for(), gimplify_omp_loop(), and omp_maybe_apply_loop_xforms().
|
extern |
Collect metadirective candidates for METADIRECTIVE. CONSTRUCT_CONTEXT is the un-augmented context, or NULL_TREE if that information is not available yet.
References candidate(), candidates, gcc_assert, omp_complete_construct_context(), omp_context_selector_matches(), OMP_METADIRECTIVE_VARIANT_BODY, OMP_METADIRECTIVE_VARIANT_DIRECTIVE, OMP_METADIRECTIVE_VARIANT_SELECTOR, OMP_METADIRECTIVE_VARIANTS, omp_variant::selector, and TREE_CHAIN.
Referenced by gimplify_omp_metadirective(), and omp_early_resolve_metadirective().
|
extern |
True if OpenMP should privatize what this DECL points to rather than the DECL itself.
References lang_hooks::decls, and lang_hooks_for_decls::omp_privatize_by_reference.
Referenced by build_outer_var_ref(), create_task_copyfn(), expand_omp_for_generic(), expand_omp_for_static_chunk(), expand_omp_for_static_nochunk(), gimplify_adjust_omp_clauses_1(), gimplify_decl_expr(), install_var_field(), lower_copyprivate_clauses(), lower_lastprivate_clauses(), lower_oacc_reductions(), lower_omp_for_scan(), lower_omp_scan(), lower_omp_target(), lower_omp_task_reductions(), lower_private_allocate(), lower_rec_input_clauses(), lower_reduction_clauses(), lower_send_clauses(), oacc_default_clause(), omp_add_variable(), omp_check_private(), omp_notice_variable(), omp_shared_to_firstprivate_optimizable_decl_p(), omp_task_reduction_iterate(), and scan_sharing_clauses().
|
extern |
Return a vector of dynamic replacement candidates for the variant construct with SELECTORS and CONSTRUCT_CONTEXT. This version is called during late resolution in the ompdevlow pass.
References omp_variant::alternative, omp_variant::body, build_int_cst(), omp_variant::dynamic_selector, i, integer_type_node, NULL_TREE, omp_get_dynamic_candidates(), omp_variant::selector, TREE_VEC_ELT, and TREE_VEC_LENGTH.
Referenced by resolve_omp_variant_cookies().
Called for late resolution of the OMP_TARGET_DEVICE_MATCHES tree node to a constant in omp-offload.cc. This is used in code that is wrapped in a #pragma omp target construct to execute on the specified device, and can be reduced to a compile-time constant in the offload compiler. NODE is an OMP_TARGET_DEVICE_MATCHES tree node and the result is an INTEGER_CST.
References integer_one_node, integer_zero_node, omp_target_device_matches_on_host(), OMP_TARGET_DEVICE_MATCHES_PROPERTIES, OMP_TARGET_DEVICE_MATCHES_SELECTOR, and tree_to_shwi().
Referenced by resolve_omp_variant_cookies().
|
extern |
General types and functions that are useful for processing of OpenMP, OpenACC and similar directives at various stages of compilation. Copyright (C) 2005-2025 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GCC; see the file COPYING3. If not see <http://www.gnu.org/licenses/>.
Referenced by gimplify_bind_expr(), input_offload_tables(), lower_omp_target(), omp_context_selector_matches(), output_offload_tables(), and scan_sharing_clauses().