GCC Middle and Back End API Reference
omp_region Struct Reference
Collaboration diagram for omp_region:

Data Fields

struct omp_regionouter
struct omp_regioninner
struct omp_regionnext
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

Detailed Description

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.nosp@m.llo@.nosp@m.redha.nosp@m.t.co.nosp@m.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.


Field Documentation

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().

vec<tree, va_gc>* omp_region::ws_args

If this is a combined parallel+workshare region, this is a list of additional arguments needed by the combined parallel+workshare library call.


The documentation for this struct was generated from the following file: