GCC Middle and Back End API Reference
|
Data Fields | |
struct omp_region * | outer |
struct omp_region * | inner |
struct omp_region * | next |
basic_block | entry |
basic_block | exit |
basic_block | cont |
vec< tree, va_gc > * | ws_args |
enum gimple_code | type |
enum omp_clause_schedule_kind | sched_kind |
bool | is_combined_parallel |
Lowering pass for OpenMP directives. Converts OpenMP directives into explicit calls to the runtime library (libgomp) and data marshalling to implement data sharing and copying clauses. Contributed by Diego Novillo dnovi llo@ redha t.co m
Copyright (C) 2005-2013 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/. Lowering of OpenMP parallel and workshare constructs proceeds in two phases. The first phase scans the function looking for OMP statements and then for variables that must be replaced to satisfy data sharing clauses. The second phase expands code for the constructs, as well as re-gimplifying things when variables have been replaced with complex expressions.
Final code generation is done by pass_expand_omp. The flowgraph is scanned for parallel regions which are then moved to a new function, to be invoked by the thread library. Parallel region information. Every parallel and workshare directive is enclosed between two markers, the OMP_* directive and a corresponding OMP_RETURN statement.
basic_block omp_region::cont |
Block containing the OMP_CONTINUE as its last stmt.
Referenced by expand_omp_for_init_vars().
basic_block omp_region::entry |
Block containing the omp directive as its last stmt.
basic_block omp_region::exit |
Block containing the OMP_RETURN as its last stmt.
struct omp_region* omp_region::inner |
First child region.
Referenced by dump_omp_region(), and lower_send_clauses().
bool omp_region::is_combined_parallel |
True if this is a combined parallel+workshare region.
Referenced by is_parallel_ctx().
struct omp_region* omp_region::next |
Next peer region.
Referenced by dump_omp_region().
struct omp_region* omp_region::outer |
The enclosing region.
enum omp_clause_schedule_kind omp_region::sched_kind |
Schedule kind, only used for OMP_FOR type regions.
Referenced by lower_send_clauses().
enum gimple_code omp_region::type |
The code for the omp directive of this region.
Referenced by lower_send_clauses().
If this is a combined parallel+workshare region, this is a list of additional arguments needed by the combined parallel+workshare library call.