summaryrefslogtreecommitdiff
path: root/libgomp
diff options
context:
space:
mode:
authorLorry Tar Creator <lorry-tar-importer@lorry>2016-08-22 10:27:46 +0000
committerLorry Tar Creator <lorry-tar-importer@lorry>2016-08-22 10:27:46 +0000
commitf733cf303bcdc952c92b81dd62199a40a1f555ec (patch)
tree0a9a9e0f28aa7c7f5bc4d1d1d0e9647163cac4f7 /libgomp
parente0e4357b88efe5dc53e50d341a09de4d02331200 (diff)
downloadgcc-tarball-51b577d7e597bf27e0277cae6b3b54bbf2e90ee2.tar.gz
gcc-6.2.0gcc-6.2.0
Diffstat (limited to 'libgomp')
-rw-r--r--libgomp/ChangeLog89
-rw-r--r--libgomp/libgomp.info2216
-rw-r--r--libgomp/testsuite/libgomp.c++/target-20.C80
-rw-r--r--libgomp/testsuite/libgomp.c++/target-21.C173
-rw-r--r--libgomp/testsuite/libgomp.c/pr70680-1.c75
-rw-r--r--libgomp/testsuite/libgomp.c/pr70680-2.c79
-rw-r--r--libgomp/testsuite/libgomp.fortran/associate3.f9020
-rw-r--r--libgomp/testsuite/libgomp.hsa.c/complex-align-2.c27
-rw-r--r--libgomp/testsuite/libgomp.hsa.c/switch-sbr-2.c59
-rw-r--r--libgomp/testsuite/libgomp.oacc-c++/template-reduction.C8
-rw-r--r--libgomp/testsuite/libgomp.oacc-c-c++-common/cache-1.c49
-rw-r--r--libgomp/testsuite/libgomp.oacc-c-c++-common/collapse-2.c2
-rw-r--r--libgomp/testsuite/libgomp.oacc-c-c++-common/collapse-4.c2
-rw-r--r--libgomp/testsuite/libgomp.oacc-c-c++-common/combined-reduction.c23
-rw-r--r--libgomp/testsuite/libgomp.oacc-c-c++-common/loop-red-g-1.c2
-rw-r--r--libgomp/testsuite/libgomp.oacc-c-c++-common/loop-red-gwv-1.c2
-rw-r--r--libgomp/testsuite/libgomp.oacc-c-c++-common/loop-red-v-1.c2
-rw-r--r--libgomp/testsuite/libgomp.oacc-c-c++-common/loop-red-w-1.c2
-rw-r--r--libgomp/testsuite/libgomp.oacc-c-c++-common/loop-red-wv-1.c2
-rw-r--r--libgomp/testsuite/libgomp.oacc-c-c++-common/reduction-7.c23
-rw-r--r--libgomp/testsuite/libgomp.oacc-c-c++-common/reduction-cplx-dbl.c6
-rw-r--r--libgomp/testsuite/libgomp.oacc-c-c++-common/reduction-cplx-flt.c6
-rw-r--r--libgomp/testsuite/libgomp.oacc-c-c++-common/reduction-dbl.c6
-rw-r--r--libgomp/testsuite/libgomp.oacc-c-c++-common/reduction-flt.c6
-rw-r--r--libgomp/testsuite/libgomp.oacc-c/nested-function-1.c52
-rw-r--r--libgomp/testsuite/libgomp.oacc-c/nested-function-2.c155
-rw-r--r--libgomp/testsuite/libgomp.oacc-fortran/cache-1.f956
-rw-r--r--libgomp/testsuite/libgomp.oacc-fortran/combined-reduction.f9019
-rw-r--r--libgomp/testsuite/libgomp.oacc-fortran/nested-function-1.f9070
-rw-r--r--libgomp/testsuite/libgomp.oacc-fortran/nested-function-2.f90173
-rw-r--r--libgomp/testsuite/libgomp.oacc-fortran/nested-function-3.f90244
-rw-r--r--libgomp/testsuite/libgomp.oacc-fortran/reduction-6.f9010
-rw-r--r--libgomp/testsuite/libgomp.oacc-fortran/reduction-7.f906
33 files changed, 2502 insertions, 1192 deletions
diff --git a/libgomp/ChangeLog b/libgomp/ChangeLog
index 4d42e36e4c..4f8be82e66 100644
--- a/libgomp/ChangeLog
+++ b/libgomp/ChangeLog
@@ -1,3 +1,92 @@
+2016-08-22 Release Manager
+
+ * GCC 6.2.0 released.
+
+2016-08-18 Chung-Lin Tang <cltang@codesourcery.com>
+
+ Backport from mainline
+ 2016-08-18 Chung-Lin Tang <cltang@codesourcery.com>
+
+ PR middle-end/70895
+ * testsuite/libgomp.oacc-fortran/reduction-7.f90: Add explicit
+ firstprivate clauses.
+ * testsuite/libgomp.oacc-fortran/reduction-6.f90: Remove explicit
+ copy clauses.
+ * testsuite/libgomp.oacc-c-c++-common/reduction-7.c: Likewise.
+ * testsuite/libgomp.oacc-c-c++-common/reduction-cplx-flt.c: Likewise.
+ * testsuite/libgomp.oacc-c-c++-common/reduction-flt.c: Likewise.
+ * testsuite/libgomp.oacc-c-c++-common/collapse-2.c: Likewise.
+ * testsuite/libgomp.oacc-c-c++-common/loop-red-wv-1.c: Likewise.
+ * testsuite/libgomp.oacc-c-c++-common/collapse-4.c: Likewise.
+ * testsuite/libgomp.oacc-c-c++-common/loop-red-v-1.c: Likewise.
+ * testsuite/libgomp.oacc-c-c++-common/reduction-cplx-dbl.c: Likewise.
+ * testsuite/libgomp.oacc-c-c++-common/loop-red-g-1.c: Likewise.
+ * testsuite/libgomp.oacc-c-c++-common/loop-red-gwv-1.c: Likewise.
+ * testsuite/libgomp.oacc-c-c++-common/loop-red-w-1.c: Likewise.
+ * testsuite/libgomp.oacc-c-c++-common/reduction-dbl.c: Likewise.
+
+2016-07-02 Jakub Jelinek <jakub@redhat.com>
+
+ Backported from mainline
+ 2016-07-01 Jakub Jelinek <jakub@redhat.com>
+
+ PR fortran/71717
+ * testsuite/libgomp.fortran/associate3.f90: New test.
+
+2016-06-21 Jakub Jelinek <jakub@redhat.com>
+
+ Backported from mainline
+ 2016-06-17 Jakub Jelinek <jakub@redhat.com>
+
+ * testsuite/libgomp.c++/target-21.C: New test.
+
+ 2016-06-16 Jakub Jelinek <jakub@redhat.com>
+
+ * testsuite/libgomp.c++/target-20.C: New test.
+
+2016-06-10 Thomas Schwinge <thomas@codesourcery.com>
+
+ PR middle-end/71373
+ Backport from trunk r237291:
+ 2016-06-10 Thomas Schwinge <thomas@codesourcery.com>
+ Cesar Philippidis <cesar@codesourcery.com>
+
+ * libgomp.oacc-c/nested-function-1.c: New file.
+ * libgomp.oacc-c/nested-function-2.c: Likewise.
+ * libgomp.oacc-fortran/nested-function-1.f90: Likewise.
+ * libgomp.oacc-fortran/nested-function-2.f90: Likewise.
+ * libgomp.oacc-fortran/nested-function-3.f90: Likewise.
+
+ PR c/71381
+ Backport from trunk r237290:
+ * testsuite/libgomp.oacc-c-c++-common/cache-1.c: #include
+ "../../../gcc/testsuite/c-c++-common/goacc/cache-1.c".
+ * testsuite/libgomp.oacc-fortran/cache-1.f95: New file.
+
+2016-05-23 Martin Jambor <mjambor@suse.cz>
+
+ * testsuite/libgomp.hsa.c/switch-sbr-2.c: New test.
+
+2016-05-16 Martin Jambor <mjambor@suse.cz>
+
+ * testsuite/libgomp.hsa.c/complex-align-2.c: New test.
+
+2016-04-29 Cesar Philippidis <cesar@codesourcery.com>
+
+ PR middle-end/70626
+ * testsuite/libgomp.oacc-c++/template-reduction.C: Adjust test.
+ * testsuite/libgomp.oacc-c-c++-common/combined-reduction.c: New test.
+ * testsuite/libgomp.oacc-fortran/combined-reduction.f90: New test.
+
+2016-04-27 Jakub Jelinek <jakub@redhat.com>
+
+ Backported from mainline
+ 2016-04-19 Jakub Jelinek <jakub@redhat.com>
+
+ PR middle-end/70680
+ * testsuite/libgomp.c/pr70680-1.c: New test.
+ * testsuite/libgomp.c/pr70680-2.c: New test.
+
2016-04-27 Release Manager
* GCC 6.1.0 released.
diff --git a/libgomp/libgomp.info b/libgomp/libgomp.info
index 45a5341f9f..f11794ecc8 100644
--- a/libgomp/libgomp.info
+++ b/libgomp/libgomp.info
@@ -1,5 +1,5 @@
-This is libgomp.info, produced by makeinfo version 5.2 from
-libgomp.texi.
+This is libgomp.info, produced by makeinfo version 4.12 from
+/space/rguenther/gcc-6.2.0/gcc-6.2.0/libgomp/libgomp.texi.
Copyright (C) 2006-2016 Free Software Foundation, Inc.
@@ -18,8 +18,9 @@ Free Documentation License".
(b) The FSF's Back-Cover Text is:
You have freedom to copy and modify this GNU Manual, like GNU
-software. Copies published by the Free Software Foundation raise funds
-for GNU development.
+software. Copies published by the Free Software Foundation raise
+funds for GNU development.
+
INFO-DIR-SECTION GNU Libraries
START-INFO-DIR-ENTRY
* libgomp: (libgomp). GNU Offloading and Multi Processing Runtime Library.
@@ -50,8 +51,8 @@ Free Documentation License".
(b) The FSF's Back-Cover Text is:
You have freedom to copy and modify this GNU Manual, like GNU
-software. Copies published by the Free Software Foundation raise funds
-for GNU development.
+software. Copies published by the Free Software Foundation raise
+funds for GNU development.

File: libgomp.info, Node: Top, Next: Enabling OpenMP, Up: (dir)
@@ -59,11 +60,11 @@ File: libgomp.info, Node: Top, Next: Enabling OpenMP, Up: (dir)
Introduction
************
-This manual documents the usage of libgomp, the GNU Offloading and Multi
-Processing Runtime Library. This includes the GNU implementation of the
-OpenMP (http://www.openmp.org) Application Programming Interface (API)
-for multi-platform shared-memory parallel programming in C/C++ and
-Fortran, and the GNU implementation of the OpenACC
+This manual documents the usage of libgomp, the GNU Offloading and
+Multi Processing Runtime Library. This includes the GNU implementation
+of the OpenMP (http://www.openmp.org) Application Programming Interface
+(API) for multi-platform shared-memory parallel programming in C/C++
+and Fortran, and the GNU implementation of the OpenACC
(http://www.openacc.org/) Application Programming Interface (API) for
offloading of code to accelerator devices in C/C++ and Fortran.
@@ -107,16 +108,17 @@ File: libgomp.info, Node: Enabling OpenMP, Next: Runtime Library Routines, Pr
*****************
To activate the OpenMP extensions for C/C++ and Fortran, the
-compile-time flag '-fopenmp' must be specified. This enables the OpenMP
-directive '#pragma omp' in C/C++ and '!$omp' directives in free form,
-'c$omp', '*$omp' and '!$omp' directives in fixed form, '!$' conditional
-compilation sentinels in free form and 'c$', '*$' and '!$' sentinels in
-fixed form, for Fortran. The flag also arranges for automatic linking
-of the OpenMP runtime library (*note Runtime Library Routines::).
+compile-time flag `-fopenmp' must be specified. This enables the
+OpenMP directive `#pragma omp' in C/C++ and `!$omp' directives in free
+form, `c$omp', `*$omp' and `!$omp' directives in fixed form, `!$'
+conditional compilation sentinels in free form and `c$', `*$' and `!$'
+sentinels in fixed form, for Fortran. The flag also arranges for
+automatic linking of the OpenMP runtime library (*note Runtime Library
+Routines::).
- A complete description of all OpenMP directives accepted may be found
-in the OpenMP Application Program Interface (http://www.openmp.org)
-manual, version 4.5.
+ A complete description of all OpenMP directives accepted may be
+found in the OpenMP Application Program Interface
+(http://www.openmp.org) manual, version 4.5.

File: libgomp.info, Node: Runtime Library Routines, Next: Environment Variables, Prev: Enabling OpenMP, Up: Top
@@ -184,7 +186,7 @@ Portable, thread-based, wall clock timer.

File: libgomp.info, Node: omp_get_active_level, Next: omp_get_ancestor_thread_num, Up: Runtime Library Routines
-2.1 'omp_get_active_level' - Number of parallel regions
+2.1 `omp_get_active_level' - Number of parallel regions
=======================================================
_Description_:
@@ -192,10 +194,10 @@ _Description_:
blocks, which enclose the calling call.
_C/C++_
- _Prototype_: 'int omp_get_active_level(void);'
+ _Prototype_: `int omp_get_active_level(void);'
_Fortran_:
- _Interface_: 'integer function omp_get_active_level()'
+ _Interface_: `integer function omp_get_active_level()'
_See also_:
*note omp_get_level::, *note omp_get_max_active_levels::, *note
@@ -207,21 +209,21 @@ _Reference_:

File: libgomp.info, Node: omp_get_ancestor_thread_num, Next: omp_get_cancellation, Prev: omp_get_active_level, Up: Runtime Library Routines
-2.2 'omp_get_ancestor_thread_num' - Ancestor thread ID
+2.2 `omp_get_ancestor_thread_num' - Ancestor thread ID
======================================================
_Description_:
This function returns the thread identification number for the
given nesting level of the current thread. For values of LEVEL
- outside zero to 'omp_get_level' -1 is returned; if LEVEL is
- 'omp_get_level' the result is identical to 'omp_get_thread_num'.
+ outside zero to `omp_get_level' -1 is returned; if LEVEL is
+ `omp_get_level' the result is identical to `omp_get_thread_num'.
_C/C++_
- _Prototype_: 'int omp_get_ancestor_thread_num(int level);'
+ _Prototype_: `int omp_get_ancestor_thread_num(int level);'
_Fortran_:
- _Interface_: 'integer function omp_get_ancestor_thread_num(level)'
- 'integer level'
+ _Interface_: `integer function omp_get_ancestor_thread_num(level)'
+ `integer level'
_See also_:
*note omp_get_level::, *note omp_get_thread_num::, *note
@@ -233,20 +235,20 @@ _Reference_:

File: libgomp.info, Node: omp_get_cancellation, Next: omp_get_default_device, Prev: omp_get_ancestor_thread_num, Up: Runtime Library Routines
-2.3 'omp_get_cancellation' - Whether cancellation support is enabled
+2.3 `omp_get_cancellation' - Whether cancellation support is enabled
====================================================================
_Description_:
- This function returns 'true' if cancellation is activated, 'false'
- otherwise. Here, 'true' and 'false' represent their
- language-specific counterparts. Unless 'OMP_CANCELLATION' is set
+ This function returns `true' if cancellation is activated, `false'
+ otherwise. Here, `true' and `false' represent their
+ language-specific counterparts. Unless `OMP_CANCELLATION' is set
true, cancellations are deactivated.
_C/C++_:
- _Prototype_: 'int omp_get_cancellation(void);'
+ _Prototype_: `int omp_get_cancellation(void);'
_Fortran_:
- _Interface_: 'logical function omp_get_cancellation()'
+ _Interface_: `logical function omp_get_cancellation()'
_See also_:
*note OMP_CANCELLATION::
@@ -257,17 +259,17 @@ _Reference_:

File: libgomp.info, Node: omp_get_default_device, Next: omp_get_dynamic, Prev: omp_get_cancellation, Up: Runtime Library Routines
-2.4 'omp_get_default_device' - Get the default device for target regions
+2.4 `omp_get_default_device' - Get the default device for target regions
========================================================================
_Description_:
Get the default device for target regions without device clause.
_C/C++_:
- _Prototype_: 'int omp_get_default_device(void);'
+ _Prototype_: `int omp_get_default_device(void);'
_Fortran_:
- _Interface_: 'integer function omp_get_default_device()'
+ _Interface_: `integer function omp_get_default_device()'
_See also_:
*note OMP_DEFAULT_DEVICE::, *note omp_set_default_device::
@@ -278,23 +280,23 @@ _Reference_:

File: libgomp.info, Node: omp_get_dynamic, Next: omp_get_level, Prev: omp_get_default_device, Up: Runtime Library Routines
-2.5 'omp_get_dynamic' - Dynamic teams setting
+2.5 `omp_get_dynamic' - Dynamic teams setting
=============================================
_Description_:
- This function returns 'true' if enabled, 'false' otherwise. Here,
- 'true' and 'false' represent their language-specific counterparts.
+ This function returns `true' if enabled, `false' otherwise. Here,
+ `true' and `false' represent their language-specific counterparts.
The dynamic team setting may be initialized at startup by the
- 'OMP_DYNAMIC' environment variable or at runtime using
- 'omp_set_dynamic'. If undefined, dynamic adjustment is disabled by
- default.
+ `OMP_DYNAMIC' environment variable or at runtime using
+ `omp_set_dynamic'. If undefined, dynamic adjustment is disabled
+ by default.
_C/C++_:
- _Prototype_: 'int omp_get_dynamic(void);'
+ _Prototype_: `int omp_get_dynamic(void);'
_Fortran_:
- _Interface_: 'logical function omp_get_dynamic()'
+ _Interface_: `logical function omp_get_dynamic()'
_See also_:
*note omp_set_dynamic::, *note OMP_DYNAMIC::
@@ -305,7 +307,7 @@ _Reference_:

File: libgomp.info, Node: omp_get_level, Next: omp_get_max_active_levels, Prev: omp_get_dynamic, Up: Runtime Library Routines
-2.6 'omp_get_level' - Obtain the current nesting level
+2.6 `omp_get_level' - Obtain the current nesting level
======================================================
_Description_:
@@ -313,10 +315,10 @@ _Description_:
which enclose the calling call.
_C/C++_
- _Prototype_: 'int omp_get_level(void);'
+ _Prototype_: `int omp_get_level(void);'
_Fortran_:
- _Interface_: 'integer function omp_level()'
+ _Interface_: `integer function omp_level()'
_See also_:
*note omp_get_active_level::
@@ -327,7 +329,7 @@ _Reference_:

File: libgomp.info, Node: omp_get_max_active_levels, Next: omp_get_max_task_priority, Prev: omp_get_level, Up: Runtime Library Routines
-2.7 'omp_get_max_active_levels' - Maximum number of active regions
+2.7 `omp_get_max_active_levels' - Maximum number of active regions
==================================================================
_Description_:
@@ -335,10 +337,10 @@ _Description_:
parallel regions.
_C/C++_
- _Prototype_: 'int omp_get_max_active_levels(void);'
+ _Prototype_: `int omp_get_max_active_levels(void);'
_Fortran_:
- _Interface_: 'integer function omp_get_max_active_levels()'
+ _Interface_: `integer function omp_get_max_active_levels()'
_See also_:
*note omp_set_max_active_levels::, *note omp_get_active_level::
@@ -349,7 +351,7 @@ _Reference_:

File: libgomp.info, Node: omp_get_max_task_priority, Next: omp_get_max_threads, Prev: omp_get_max_active_levels, Up: Runtime Library Routines
-2.8 'omp_get_max_task_priority' - Maximum priority value
+2.8 `omp_get_max_task_priority' - Maximum priority value
========================================================
that can be set for tasks.
@@ -358,10 +360,10 @@ _Description_:
tasks.
_C/C++_
- _Prototype_: 'int omp_get_max_task_priority(void);'
+ _Prototype_: `int omp_get_max_task_priority(void);'
_Fortran_:
- _Interface_: 'integer function omp_get_max_task_priority()'
+ _Interface_: `integer function omp_get_max_task_priority()'
_Reference_:
OpenMP specification v4.5 (http://www.openmp.org/), Section 3.2.29.
@@ -369,18 +371,18 @@ _Reference_:

File: libgomp.info, Node: omp_get_max_threads, Next: omp_get_nested, Prev: omp_get_max_task_priority, Up: Runtime Library Routines
-2.9 'omp_get_max_threads' - Maximum number of threads of parallel region
+2.9 `omp_get_max_threads' - Maximum number of threads of parallel region
========================================================================
_Description_:
Return the maximum number of threads used for the current parallel
- region that does not use the clause 'num_threads'.
+ region that does not use the clause `num_threads'.
_C/C++_:
- _Prototype_: 'int omp_get_max_threads(void);'
+ _Prototype_: `int omp_get_max_threads(void);'
_Fortran_:
- _Interface_: 'integer function omp_get_max_threads()'
+ _Interface_: `integer function omp_get_max_threads()'
_See also_:
*note omp_set_num_threads::, *note omp_set_dynamic::, *note
@@ -392,24 +394,24 @@ _Reference_:

File: libgomp.info, Node: omp_get_nested, Next: omp_get_num_devices, Prev: omp_get_max_threads, Up: Runtime Library Routines
-2.10 'omp_get_nested' - Nested parallel regions
+2.10 `omp_get_nested' - Nested parallel regions
===============================================
_Description_:
- This function returns 'true' if nested parallel regions are
- enabled, 'false' otherwise. Here, 'true' and 'false' represent
+ This function returns `true' if nested parallel regions are
+ enabled, `false' otherwise. Here, `true' and `false' represent
their language-specific counterparts.
Nested parallel regions may be initialized at startup by the
- 'OMP_NESTED' environment variable or at runtime using
- 'omp_set_nested'. If undefined, nested parallel regions are
+ `OMP_NESTED' environment variable or at runtime using
+ `omp_set_nested'. If undefined, nested parallel regions are
disabled by default.
_C/C++_:
- _Prototype_: 'int omp_get_nested(void);'
+ _Prototype_: `int omp_get_nested(void);'
_Fortran_:
- _Interface_: 'logical function omp_get_nested()'
+ _Interface_: `logical function omp_get_nested()'
_See also_:
*note omp_set_nested::, *note OMP_NESTED::
@@ -420,17 +422,17 @@ _Reference_:

File: libgomp.info, Node: omp_get_num_devices, Next: omp_get_num_procs, Prev: omp_get_nested, Up: Runtime Library Routines
-2.11 'omp_get_num_devices' - Number of target devices
+2.11 `omp_get_num_devices' - Number of target devices
=====================================================
_Description_:
Returns the number of target devices.
_C/C++_:
- _Prototype_: 'int omp_get_num_devices(void);'
+ _Prototype_: `int omp_get_num_devices(void);'
_Fortran_:
- _Interface_: 'integer function omp_get_num_devices()'
+ _Interface_: `integer function omp_get_num_devices()'
_Reference_:
OpenMP specification v4.5 (http://www.openmp.org/), Section 3.2.31.
@@ -438,17 +440,17 @@ _Reference_:

File: libgomp.info, Node: omp_get_num_procs, Next: omp_get_num_teams, Prev: omp_get_num_devices, Up: Runtime Library Routines
-2.12 'omp_get_num_procs' - Number of processors online
+2.12 `omp_get_num_procs' - Number of processors online
======================================================
_Description_:
Returns the number of processors online on that device.
_C/C++_:
- _Prototype_: 'int omp_get_num_procs(void);'
+ _Prototype_: `int omp_get_num_procs(void);'
_Fortran_:
- _Interface_: 'integer function omp_get_num_procs()'
+ _Interface_: `integer function omp_get_num_procs()'
_Reference_:
OpenMP specification v4.5 (http://www.openmp.org/), Section 3.2.5.
@@ -456,17 +458,17 @@ _Reference_:

File: libgomp.info, Node: omp_get_num_teams, Next: omp_get_num_threads, Prev: omp_get_num_procs, Up: Runtime Library Routines
-2.13 'omp_get_num_teams' - Number of teams
+2.13 `omp_get_num_teams' - Number of teams
==========================================
_Description_:
Returns the number of teams in the current team region.
_C/C++_:
- _Prototype_: 'int omp_get_num_teams(void);'
+ _Prototype_: `int omp_get_num_teams(void);'
_Fortran_:
- _Interface_: 'integer function omp_get_num_teams()'
+ _Interface_: `integer function omp_get_num_teams()'
_Reference_:
OpenMP specification v4.5 (http://www.openmp.org/), Section 3.2.32.
@@ -474,25 +476,25 @@ _Reference_:

File: libgomp.info, Node: omp_get_num_threads, Next: omp_get_proc_bind, Prev: omp_get_num_teams, Up: Runtime Library Routines
-2.14 'omp_get_num_threads' - Size of the active team
+2.14 `omp_get_num_threads' - Size of the active team
====================================================
_Description_:
- Returns the number of threads in the current team. In a sequential
- section of the program 'omp_get_num_threads' returns 1.
+ Returns the number of threads in the current team. In a
+ sequential section of the program `omp_get_num_threads' returns 1.
The default team size may be initialized at startup by the
- 'OMP_NUM_THREADS' environment variable. At runtime, the size of
- the current team may be set either by the 'NUM_THREADS' clause or
- by 'omp_set_num_threads'. If none of the above were used to define
- a specific value and 'OMP_DYNAMIC' is disabled, one thread per CPU
- online is used.
+ `OMP_NUM_THREADS' environment variable. At runtime, the size of
+ the current team may be set either by the `NUM_THREADS' clause or
+ by `omp_set_num_threads'. If none of the above were used to
+ define a specific value and `OMP_DYNAMIC' is disabled, one thread
+ per CPU online is used.
_C/C++_:
- _Prototype_: 'int omp_get_num_threads(void);'
+ _Prototype_: `int omp_get_num_threads(void);'
_Fortran_:
- _Interface_: 'integer function omp_get_num_threads()'
+ _Interface_: `integer function omp_get_num_threads()'
_See also_:
*note omp_get_max_threads::, *note omp_set_num_threads::, *note
@@ -504,22 +506,22 @@ _Reference_:

File: libgomp.info, Node: omp_get_proc_bind, Next: omp_get_schedule, Prev: omp_get_num_threads, Up: Runtime Library Routines
-2.15 'omp_get_proc_bind' - Whether theads may be moved between CPUs
+2.15 `omp_get_proc_bind' - Whether theads may be moved between CPUs
===================================================================
_Description_:
- This functions returns the currently active thread affinity policy,
- which is set via 'OMP_PROC_BIND'. Possible values are
- 'omp_proc_bind_false', 'omp_proc_bind_true',
- 'omp_proc_bind_master', 'omp_proc_bind_close' and
- 'omp_proc_bind_spread'.
+ This functions returns the currently active thread affinity
+ policy, which is set via `OMP_PROC_BIND'. Possible values are
+ `omp_proc_bind_false', `omp_proc_bind_true',
+ `omp_proc_bind_master', `omp_proc_bind_close' and
+ `omp_proc_bind_spread'.
_C/C++_:
- _Prototype_: 'omp_proc_bind_t omp_get_proc_bind(void);'
+ _Prototype_: `omp_proc_bind_t omp_get_proc_bind(void);'
_Fortran_:
- _Interface_: 'integer(kind=omp_proc_bind_kind) function
- omp_get_proc_bind()'
+ _Interface_: `integer(kind=omp_proc_bind_kind) function
+ omp_get_proc_bind()'
_See also_:
*note OMP_PROC_BIND::, *note OMP_PLACES::, *note
@@ -531,23 +533,23 @@ _Reference_:

File: libgomp.info, Node: omp_get_schedule, Next: omp_get_team_num, Prev: omp_get_proc_bind, Up: Runtime Library Routines
-2.16 'omp_get_schedule' - Obtain the runtime scheduling method
+2.16 `omp_get_schedule' - Obtain the runtime scheduling method
==============================================================
_Description_:
Obtain the runtime scheduling method. The KIND argument will be
- set to the value 'omp_sched_static', 'omp_sched_dynamic',
- 'omp_sched_guided' or 'omp_sched_auto'. The second argument,
+ set to the value `omp_sched_static', `omp_sched_dynamic',
+ `omp_sched_guided' or `omp_sched_auto'. The second argument,
CHUNK_SIZE, is set to the chunk size.
_C/C++_
- _Prototype_: 'void omp_get_schedule(omp_sched_t *kind, int
- *chunk_size);'
+ _Prototype_: `void omp_get_schedule(omp_sched_t *kind, int
+ *chunk_size);'
_Fortran_:
- _Interface_: 'subroutine omp_get_schedule(kind, chunk_size)'
- 'integer(kind=omp_sched_kind) kind'
- 'integer chunk_size'
+ _Interface_: `subroutine omp_get_schedule(kind, chunk_size)'
+ `integer(kind=omp_sched_kind) kind'
+ `integer chunk_size'
_See also_:
*note omp_set_schedule::, *note OMP_SCHEDULE::
@@ -558,17 +560,17 @@ _Reference_:

File: libgomp.info, Node: omp_get_team_num, Next: omp_get_team_size, Prev: omp_get_schedule, Up: Runtime Library Routines
-2.17 'omp_get_team_num' - Get team number
+2.17 `omp_get_team_num' - Get team number
=========================================
_Description_:
Returns the team number of the calling thread.
_C/C++_:
- _Prototype_: 'int omp_get_team_num(void);'
+ _Prototype_: `int omp_get_team_num(void);'
_Fortran_:
- _Interface_: 'integer function omp_get_team_num()'
+ _Interface_: `integer function omp_get_team_num()'
_Reference_:
OpenMP specification v4.5 (http://www.openmp.org/), Section 3.2.33.
@@ -576,22 +578,22 @@ _Reference_:

File: libgomp.info, Node: omp_get_team_size, Next: omp_get_thread_limit, Prev: omp_get_team_num, Up: Runtime Library Routines
-2.18 'omp_get_team_size' - Number of threads in a team
+2.18 `omp_get_team_size' - Number of threads in a team
======================================================
_Description_:
This function returns the number of threads in a thread team to
which either the current thread or its ancestor belongs. For
- values of LEVEL outside zero to 'omp_get_level', -1 is returned; if
- LEVEL is zero, 1 is returned, and for 'omp_get_level', the result
- is identical to 'omp_get_num_threads'.
+ values of LEVEL outside zero to `omp_get_level', -1 is returned;
+ if LEVEL is zero, 1 is returned, and for `omp_get_level', the
+ result is identical to `omp_get_num_threads'.
_C/C++_:
- _Prototype_: 'int omp_get_team_size(int level);'
+ _Prototype_: `int omp_get_team_size(int level);'
_Fortran_:
- _Interface_: 'integer function omp_get_team_size(level)'
- 'integer level'
+ _Interface_: `integer function omp_get_team_size(level)'
+ `integer level'
_See also_:
*note omp_get_num_threads::, *note omp_get_level::, *note
@@ -603,17 +605,17 @@ _Reference_:

File: libgomp.info, Node: omp_get_thread_limit, Next: omp_get_thread_num, Prev: omp_get_team_size, Up: Runtime Library Routines
-2.19 'omp_get_thread_limit' - Maximum number of threads
+2.19 `omp_get_thread_limit' - Maximum number of threads
=======================================================
_Description_:
Return the maximum number of threads of the program.
_C/C++_:
- _Prototype_: 'int omp_get_thread_limit(void);'
+ _Prototype_: `int omp_get_thread_limit(void);'
_Fortran_:
- _Interface_: 'integer function omp_get_thread_limit()'
+ _Interface_: `integer function omp_get_thread_limit()'
_See also_:
*note omp_get_max_threads::, *note OMP_THREAD_LIMIT::
@@ -624,21 +626,21 @@ _Reference_:

File: libgomp.info, Node: omp_get_thread_num, Next: omp_in_parallel, Prev: omp_get_thread_limit, Up: Runtime Library Routines
-2.20 'omp_get_thread_num' - Current thread ID
+2.20 `omp_get_thread_num' - Current thread ID
=============================================
_Description_:
Returns a unique thread identification number within the current
- team. In a sequential parts of the program, 'omp_get_thread_num'
- always returns 0. In parallel regions the return value varies from
- 0 to 'omp_get_num_threads'-1 inclusive. The return value of the
- master thread of a team is always 0.
+ team. In a sequential parts of the program, `omp_get_thread_num'
+ always returns 0. In parallel regions the return value varies
+ from 0 to `omp_get_num_threads'-1 inclusive. The return value of
+ the master thread of a team is always 0.
_C/C++_:
- _Prototype_: 'int omp_get_thread_num(void);'
+ _Prototype_: `int omp_get_thread_num(void);'
_Fortran_:
- _Interface_: 'integer function omp_get_thread_num()'
+ _Interface_: `integer function omp_get_thread_num()'
_See also_:
*note omp_get_num_threads::, *note omp_get_ancestor_thread_num::
@@ -649,19 +651,19 @@ _Reference_:

File: libgomp.info, Node: omp_in_parallel, Next: omp_in_final, Prev: omp_get_thread_num, Up: Runtime Library Routines
-2.21 'omp_in_parallel' - Whether a parallel region is active
+2.21 `omp_in_parallel' - Whether a parallel region is active
============================================================
_Description_:
- This function returns 'true' if currently running in parallel,
- 'false' otherwise. Here, 'true' and 'false' represent their
+ This function returns `true' if currently running in parallel,
+ `false' otherwise. Here, `true' and `false' represent their
language-specific counterparts.
_C/C++_:
- _Prototype_: 'int omp_in_parallel(void);'
+ _Prototype_: `int omp_in_parallel(void);'
_Fortran_:
- _Interface_: 'logical function omp_in_parallel()'
+ _Interface_: `logical function omp_in_parallel()'
_Reference_:
OpenMP specification v4.5 (http://www.openmp.org/), Section 3.2.6.
@@ -669,19 +671,19 @@ _Reference_:

File: libgomp.info, Node: omp_in_final, Next: omp_is_initial_device, Prev: omp_in_parallel, Up: Runtime Library Routines
-2.22 'omp_in_final' - Whether in final or included task region
+2.22 `omp_in_final' - Whether in final or included task region
==============================================================
_Description_:
- This function returns 'true' if currently running in a final or
- included task region, 'false' otherwise. Here, 'true' and 'false'
+ This function returns `true' if currently running in a final or
+ included task region, `false' otherwise. Here, `true' and `false'
represent their language-specific counterparts.
_C/C++_:
- _Prototype_: 'int omp_in_final(void);'
+ _Prototype_: `int omp_in_final(void);'
_Fortran_:
- _Interface_: 'logical function omp_in_final()'
+ _Interface_: `logical function omp_in_final()'
_Reference_:
OpenMP specification v4.5 (http://www.openmp.org/), Section 3.2.21.
@@ -689,19 +691,19 @@ _Reference_:

File: libgomp.info, Node: omp_is_initial_device, Next: omp_set_default_device, Prev: omp_in_final, Up: Runtime Library Routines
-2.23 'omp_is_initial_device' - Whether executing on the host device
+2.23 `omp_is_initial_device' - Whether executing on the host device
===================================================================
_Description_:
- This function returns 'true' if currently running on the host
- device, 'false' otherwise. Here, 'true' and 'false' represent
+ This function returns `true' if currently running on the host
+ device, `false' otherwise. Here, `true' and `false' represent
their language-specific counterparts.
_C/C++_:
- _Prototype_: 'int omp_is_initial_device(void);'
+ _Prototype_: `int omp_is_initial_device(void);'
_Fortran_:
- _Interface_: 'logical function omp_is_initial_device()'
+ _Interface_: `logical function omp_is_initial_device()'
_Reference_:
OpenMP specification v4.5 (http://www.openmp.org/), Section 3.2.34.
@@ -709,7 +711,7 @@ _Reference_:

File: libgomp.info, Node: omp_set_default_device, Next: omp_set_dynamic, Prev: omp_is_initial_device, Up: Runtime Library Routines
-2.24 'omp_set_default_device' - Set the default device for target regions
+2.24 `omp_set_default_device' - Set the default device for target regions
=========================================================================
_Description_:
@@ -717,11 +719,11 @@ _Description_:
The argument shall be a nonnegative device number.
_C/C++_:
- _Prototype_: 'void omp_set_default_device(int device_num);'
+ _Prototype_: `void omp_set_default_device(int device_num);'
_Fortran_:
- _Interface_: 'subroutine omp_set_default_device(device_num)'
- 'integer device_num'
+ _Interface_: `subroutine omp_set_default_device(device_num)'
+ `integer device_num'
_See also_:
*note OMP_DEFAULT_DEVICE::, *note omp_get_default_device::
@@ -732,21 +734,21 @@ _Reference_:

File: libgomp.info, Node: omp_set_dynamic, Next: omp_set_max_active_levels, Prev: omp_set_default_device, Up: Runtime Library Routines
-2.25 'omp_set_dynamic' - Enable/disable dynamic teams
+2.25 `omp_set_dynamic' - Enable/disable dynamic teams
=====================================================
_Description_:
Enable or disable the dynamic adjustment of the number of threads
within a team. The function takes the language-specific equivalent
- of 'true' and 'false', where 'true' enables dynamic adjustment of
- team sizes and 'false' disables it.
+ of `true' and `false', where `true' enables dynamic adjustment of
+ team sizes and `false' disables it.
_C/C++_:
- _Prototype_: 'void omp_set_dynamic(int dynamic_threads);'
+ _Prototype_: `void omp_set_dynamic(int dynamic_threads);'
_Fortran_:
- _Interface_: 'subroutine omp_set_dynamic(dynamic_threads)'
- 'logical, intent(in) :: dynamic_threads'
+ _Interface_: `subroutine omp_set_dynamic(dynamic_threads)'
+ `logical, intent(in) :: dynamic_threads'
_See also_:
*note OMP_DYNAMIC::, *note omp_get_dynamic::
@@ -757,7 +759,7 @@ _Reference_:

File: libgomp.info, Node: omp_set_max_active_levels, Next: omp_set_nested, Prev: omp_set_dynamic, Up: Runtime Library Routines
-2.26 'omp_set_max_active_levels' - Limits the number of active parallel regions
+2.26 `omp_set_max_active_levels' - Limits the number of active parallel regions
===============================================================================
_Description_:
@@ -765,11 +767,11 @@ _Description_:
parallel regions.
_C/C++_
- _Prototype_: 'void omp_set_max_active_levels(int max_levels);'
+ _Prototype_: `void omp_set_max_active_levels(int max_levels);'
_Fortran_:
- _Interface_: 'subroutine omp_set_max_active_levels(max_levels)'
- 'integer max_levels'
+ _Interface_: `subroutine omp_set_max_active_levels(max_levels)'
+ `integer max_levels'
_See also_:
*note omp_get_max_active_levels::, *note omp_get_active_level::
@@ -780,21 +782,21 @@ _Reference_:

File: libgomp.info, Node: omp_set_nested, Next: omp_set_num_threads, Prev: omp_set_max_active_levels, Up: Runtime Library Routines
-2.27 'omp_set_nested' - Enable/disable nested parallel regions
+2.27 `omp_set_nested' - Enable/disable nested parallel regions
==============================================================
_Description_:
Enable or disable nested parallel regions, i.e., whether team
members are allowed to create new teams. The function takes the
- language-specific equivalent of 'true' and 'false', where 'true'
- enables dynamic adjustment of team sizes and 'false' disables it.
+ language-specific equivalent of `true' and `false', where `true'
+ enables dynamic adjustment of team sizes and `false' disables it.
_C/C++_:
- _Prototype_: 'void omp_set_nested(int nested);'
+ _Prototype_: `void omp_set_nested(int nested);'
_Fortran_:
- _Interface_: 'subroutine omp_set_nested(nested)'
- 'logical, intent(in) :: nested'
+ _Interface_: `subroutine omp_set_nested(nested)'
+ `logical, intent(in) :: nested'
_See also_:
*note OMP_NESTED::, *note omp_get_nested::
@@ -805,20 +807,20 @@ _Reference_:

File: libgomp.info, Node: omp_set_num_threads, Next: omp_set_schedule, Prev: omp_set_nested, Up: Runtime Library Routines
-2.28 'omp_set_num_threads' - Set upper team size limit
+2.28 `omp_set_num_threads' - Set upper team size limit
======================================================
_Description_:
Specifies the number of threads used by default in subsequent
- parallel sections, if those do not specify a 'num_threads' clause.
- The argument of 'omp_set_num_threads' shall be a positive integer.
+ parallel sections, if those do not specify a `num_threads' clause.
+ The argument of `omp_set_num_threads' shall be a positive integer.
_C/C++_:
- _Prototype_: 'void omp_set_num_threads(int num_threads);'
+ _Prototype_: `void omp_set_num_threads(int num_threads);'
_Fortran_:
- _Interface_: 'subroutine omp_set_num_threads(num_threads)'
- 'integer, intent(in) :: num_threads'
+ _Interface_: `subroutine omp_set_num_threads(num_threads)'
+ `integer, intent(in) :: num_threads'
_See also_:
*note OMP_NUM_THREADS::, *note omp_get_num_threads::, *note
@@ -830,25 +832,25 @@ _Reference_:

File: libgomp.info, Node: omp_set_schedule, Next: omp_init_lock, Prev: omp_set_num_threads, Up: Runtime Library Routines
-2.29 'omp_set_schedule' - Set the runtime scheduling method
+2.29 `omp_set_schedule' - Set the runtime scheduling method
===========================================================
_Description_:
Sets the runtime scheduling method. The KIND argument can have the
- value 'omp_sched_static', 'omp_sched_dynamic', 'omp_sched_guided'
- or 'omp_sched_auto'. Except for 'omp_sched_auto', the chunk size
+ value `omp_sched_static', `omp_sched_dynamic', `omp_sched_guided'
+ or `omp_sched_auto'. Except for `omp_sched_auto', the chunk size
is set to the value of CHUNK_SIZE if positive, or to the default
- value if zero or negative. For 'omp_sched_auto' the CHUNK_SIZE
+ value if zero or negative. For `omp_sched_auto' the CHUNK_SIZE
argument is ignored.
_C/C++_
- _Prototype_: 'void omp_set_schedule(omp_sched_t kind, int
- chunk_size);'
+ _Prototype_: `void omp_set_schedule(omp_sched_t kind, int
+ chunk_size);'
_Fortran_:
- _Interface_: 'subroutine omp_set_schedule(kind, chunk_size)'
- 'integer(kind=omp_sched_kind) kind'
- 'integer chunk_size'
+ _Interface_: `subroutine omp_set_schedule(kind, chunk_size)'
+ `integer(kind=omp_sched_kind) kind'
+ `integer chunk_size'
_See also_:
*note omp_get_schedule:: *note OMP_SCHEDULE::
@@ -859,7 +861,7 @@ _Reference_:

File: libgomp.info, Node: omp_init_lock, Next: omp_set_lock, Prev: omp_set_schedule, Up: Runtime Library Routines
-2.30 'omp_init_lock' - Initialize simple lock
+2.30 `omp_init_lock' - Initialize simple lock
=============================================
_Description_:
@@ -867,11 +869,11 @@ _Description_:
unlocked state.
_C/C++_:
- _Prototype_: 'void omp_init_lock(omp_lock_t *lock);'
+ _Prototype_: `void omp_init_lock(omp_lock_t *lock);'
_Fortran_:
- _Interface_: 'subroutine omp_init_lock(svar)'
- 'integer(omp_lock_kind), intent(out) :: svar'
+ _Interface_: `subroutine omp_init_lock(svar)'
+ `integer(omp_lock_kind), intent(out) :: svar'
_See also_:
*note omp_destroy_lock::
@@ -882,21 +884,21 @@ _Reference_:

File: libgomp.info, Node: omp_set_lock, Next: omp_test_lock, Prev: omp_init_lock, Up: Runtime Library Routines
-2.31 'omp_set_lock' - Wait for and set simple lock
+2.31 `omp_set_lock' - Wait for and set simple lock
==================================================
_Description_:
- Before setting a simple lock, the lock variable must be initialized
- by 'omp_init_lock'. The calling thread is blocked until the lock
- is available. If the lock is already held by the current thread, a
- deadlock occurs.
+ Before setting a simple lock, the lock variable must be
+ initialized by `omp_init_lock'. The calling thread is blocked
+ until the lock is available. If the lock is already held by the
+ current thread, a deadlock occurs.
_C/C++_:
- _Prototype_: 'void omp_set_lock(omp_lock_t *lock);'
+ _Prototype_: `void omp_set_lock(omp_lock_t *lock);'
_Fortran_:
- _Interface_: 'subroutine omp_set_lock(svar)'
- 'integer(omp_lock_kind), intent(inout) :: svar'
+ _Interface_: `subroutine omp_set_lock(svar)'
+ `integer(omp_lock_kind), intent(inout) :: svar'
_See also_:
*note omp_init_lock::, *note omp_test_lock::, *note
@@ -908,22 +910,22 @@ _Reference_:

File: libgomp.info, Node: omp_test_lock, Next: omp_unset_lock, Prev: omp_set_lock, Up: Runtime Library Routines
-2.32 'omp_test_lock' - Test and set simple lock if available
+2.32 `omp_test_lock' - Test and set simple lock if available
============================================================
_Description_:
- Before setting a simple lock, the lock variable must be initialized
- by 'omp_init_lock'. Contrary to 'omp_set_lock', 'omp_test_lock'
- does not block if the lock is not available. This function returns
- 'true' upon success, 'false' otherwise. Here, 'true' and 'false'
- represent their language-specific counterparts.
+ Before setting a simple lock, the lock variable must be
+ initialized by `omp_init_lock'. Contrary to `omp_set_lock',
+ `omp_test_lock' does not block if the lock is not available. This
+ function returns `true' upon success, `false' otherwise. Here,
+ `true' and `false' represent their language-specific counterparts.
_C/C++_:
- _Prototype_: 'int omp_test_lock(omp_lock_t *lock);'
+ _Prototype_: `int omp_test_lock(omp_lock_t *lock);'
_Fortran_:
- _Interface_: 'logical function omp_test_lock(svar)'
- 'integer(omp_lock_kind), intent(inout) :: svar'
+ _Interface_: `logical function omp_test_lock(svar)'
+ `integer(omp_lock_kind), intent(inout) :: svar'
_See also_:
*note omp_init_lock::, *note omp_set_lock::, *note omp_set_lock::
@@ -934,23 +936,23 @@ _Reference_:

File: libgomp.info, Node: omp_unset_lock, Next: omp_destroy_lock, Prev: omp_test_lock, Up: Runtime Library Routines
-2.33 'omp_unset_lock' - Unset simple lock
+2.33 `omp_unset_lock' - Unset simple lock
=========================================
_Description_:
A simple lock about to be unset must have been locked by
- 'omp_set_lock' or 'omp_test_lock' before. In addition, the lock
- must be held by the thread calling 'omp_unset_lock'. Then, the
- lock becomes unlocked. If one or more threads attempted to set the
- lock before, one of them is chosen to, again, set the lock to
+ `omp_set_lock' or `omp_test_lock' before. In addition, the lock
+ must be held by the thread calling `omp_unset_lock'. Then, the
+ lock becomes unlocked. If one or more threads attempted to set
+ the lock before, one of them is chosen to, again, set the lock to
itself.
_C/C++_:
- _Prototype_: 'void omp_unset_lock(omp_lock_t *lock);'
+ _Prototype_: `void omp_unset_lock(omp_lock_t *lock);'
_Fortran_:
- _Interface_: 'subroutine omp_unset_lock(svar)'
- 'integer(omp_lock_kind), intent(inout) :: svar'
+ _Interface_: `subroutine omp_unset_lock(svar)'
+ `integer(omp_lock_kind), intent(inout) :: svar'
_See also_:
*note omp_set_lock::, *note omp_test_lock::
@@ -961,7 +963,7 @@ _Reference_:

File: libgomp.info, Node: omp_destroy_lock, Next: omp_init_nest_lock, Prev: omp_unset_lock, Up: Runtime Library Routines
-2.34 'omp_destroy_lock' - Destroy simple lock
+2.34 `omp_destroy_lock' - Destroy simple lock
=============================================
_Description_:
@@ -969,11 +971,11 @@ _Description_:
must be in the unlocked state.
_C/C++_:
- _Prototype_: 'void omp_destroy_lock(omp_lock_t *lock);'
+ _Prototype_: `void omp_destroy_lock(omp_lock_t *lock);'
_Fortran_:
- _Interface_: 'subroutine omp_destroy_lock(svar)'
- 'integer(omp_lock_kind), intent(inout) :: svar'
+ _Interface_: `subroutine omp_destroy_lock(svar)'
+ `integer(omp_lock_kind), intent(inout) :: svar'
_See also_:
*note omp_init_lock::
@@ -984,7 +986,7 @@ _Reference_:

File: libgomp.info, Node: omp_init_nest_lock, Next: omp_set_nest_lock, Prev: omp_destroy_lock, Up: Runtime Library Routines
-2.35 'omp_init_nest_lock' - Initialize nested lock
+2.35 `omp_init_nest_lock' - Initialize nested lock
==================================================
_Description_:
@@ -992,11 +994,11 @@ _Description_:
unlocked state and the nesting count is set to zero.
_C/C++_:
- _Prototype_: 'void omp_init_nest_lock(omp_nest_lock_t *lock);'
+ _Prototype_: `void omp_init_nest_lock(omp_nest_lock_t *lock);'
_Fortran_:
- _Interface_: 'subroutine omp_init_nest_lock(nvar)'
- 'integer(omp_nest_lock_kind), intent(out) :: nvar'
+ _Interface_: `subroutine omp_init_nest_lock(nvar)'
+ `integer(omp_nest_lock_kind), intent(out) :: nvar'
_See also_:
*note omp_destroy_nest_lock::
@@ -1007,21 +1009,22 @@ _Reference_:

File: libgomp.info, Node: omp_set_nest_lock, Next: omp_test_nest_lock, Prev: omp_init_nest_lock, Up: Runtime Library Routines
-2.36 'omp_set_nest_lock' - Wait for and set nested lock
+2.36 `omp_set_nest_lock' - Wait for and set nested lock
=======================================================
_Description_:
- Before setting a nested lock, the lock variable must be initialized
- by 'omp_init_nest_lock'. The calling thread is blocked until the
- lock is available. If the lock is already held by the current
- thread, the nesting count for the lock is incremented.
+ Before setting a nested lock, the lock variable must be
+ initialized by `omp_init_nest_lock'. The calling thread is
+ blocked until the lock is available. If the lock is already held
+ by the current thread, the nesting count for the lock is
+ incremented.
_C/C++_:
- _Prototype_: 'void omp_set_nest_lock(omp_nest_lock_t *lock);'
+ _Prototype_: `void omp_set_nest_lock(omp_nest_lock_t *lock);'
_Fortran_:
- _Interface_: 'subroutine omp_set_nest_lock(nvar)'
- 'integer(omp_nest_lock_kind), intent(inout) :: nvar'
+ _Interface_: `subroutine omp_set_nest_lock(nvar)'
+ `integer(omp_nest_lock_kind), intent(inout) :: nvar'
_See also_:
*note omp_init_nest_lock::, *note omp_unset_nest_lock::
@@ -1032,22 +1035,23 @@ _Reference_:

File: libgomp.info, Node: omp_test_nest_lock, Next: omp_unset_nest_lock, Prev: omp_set_nest_lock, Up: Runtime Library Routines
-2.37 'omp_test_nest_lock' - Test and set nested lock if available
+2.37 `omp_test_nest_lock' - Test and set nested lock if available
=================================================================
_Description_:
- Before setting a nested lock, the lock variable must be initialized
- by 'omp_init_nest_lock'. Contrary to 'omp_set_nest_lock',
- 'omp_test_nest_lock' does not block if the lock is not available.
- If the lock is already held by the current thread, the new nesting
- count is returned. Otherwise, the return value equals zero.
+ Before setting a nested lock, the lock variable must be
+ initialized by `omp_init_nest_lock'. Contrary to
+ `omp_set_nest_lock', `omp_test_nest_lock' does not block if the
+ lock is not available. If the lock is already held by the current
+ thread, the new nesting count is returned. Otherwise, the return
+ value equals zero.
_C/C++_:
- _Prototype_: 'int omp_test_nest_lock(omp_nest_lock_t *lock);'
+ _Prototype_: `int omp_test_nest_lock(omp_nest_lock_t *lock);'
_Fortran_:
- _Interface_: 'logical function omp_test_nest_lock(nvar)'
- 'integer(omp_nest_lock_kind), intent(inout) :: nvar'
+ _Interface_: `logical function omp_test_nest_lock(nvar)'
+ `integer(omp_nest_lock_kind), intent(inout) :: nvar'
_See also_:
*note omp_init_lock::, *note omp_set_lock::, *note omp_set_lock::
@@ -1058,24 +1062,24 @@ _Reference_:

File: libgomp.info, Node: omp_unset_nest_lock, Next: omp_destroy_nest_lock, Prev: omp_test_nest_lock, Up: Runtime Library Routines
-2.38 'omp_unset_nest_lock' - Unset nested lock
+2.38 `omp_unset_nest_lock' - Unset nested lock
==============================================
_Description_:
A nested lock about to be unset must have been locked by
- 'omp_set_nested_lock' or 'omp_test_nested_lock' before. In
+ `omp_set_nested_lock' or `omp_test_nested_lock' before. In
addition, the lock must be held by the thread calling
- 'omp_unset_nested_lock'. If the nesting count drops to zero, the
+ `omp_unset_nested_lock'. If the nesting count drops to zero, the
lock becomes unlocked. If one ore more threads attempted to set
the lock before, one of them is chosen to, again, set the lock to
itself.
_C/C++_:
- _Prototype_: 'void omp_unset_nest_lock(omp_nest_lock_t *lock);'
+ _Prototype_: `void omp_unset_nest_lock(omp_nest_lock_t *lock);'
_Fortran_:
- _Interface_: 'subroutine omp_unset_nest_lock(nvar)'
- 'integer(omp_nest_lock_kind), intent(inout) :: nvar'
+ _Interface_: `subroutine omp_unset_nest_lock(nvar)'
+ `integer(omp_nest_lock_kind), intent(inout) :: nvar'
_See also_:
*note omp_set_nest_lock::
@@ -1086,7 +1090,7 @@ _Reference_:

File: libgomp.info, Node: omp_destroy_nest_lock, Next: omp_get_wtick, Prev: omp_unset_nest_lock, Up: Runtime Library Routines
-2.39 'omp_destroy_nest_lock' - Destroy nested lock
+2.39 `omp_destroy_nest_lock' - Destroy nested lock
==================================================
_Description_:
@@ -1095,11 +1099,11 @@ _Description_:
zero.
_C/C++_:
- _Prototype_: 'void omp_destroy_nest_lock(omp_nest_lock_t *);'
+ _Prototype_: `void omp_destroy_nest_lock(omp_nest_lock_t *);'
_Fortran_:
- _Interface_: 'subroutine omp_destroy_nest_lock(nvar)'
- 'integer(omp_nest_lock_kind), intent(inout) :: nvar'
+ _Interface_: `subroutine omp_destroy_nest_lock(nvar)'
+ `integer(omp_nest_lock_kind), intent(inout) :: nvar'
_See also_:
*note omp_init_lock::
@@ -1110,7 +1114,7 @@ _Reference_:

File: libgomp.info, Node: omp_get_wtick, Next: omp_get_wtime, Prev: omp_destroy_nest_lock, Up: Runtime Library Routines
-2.40 'omp_get_wtick' - Get timer precision
+2.40 `omp_get_wtick' - Get timer precision
==========================================
_Description_:
@@ -1118,10 +1122,10 @@ _Description_:
successive clock ticks.
_C/C++_:
- _Prototype_: 'double omp_get_wtick(void);'
+ _Prototype_: `double omp_get_wtick(void);'
_Fortran_:
- _Interface_: 'double precision function omp_get_wtick()'
+ _Interface_: `double precision function omp_get_wtick()'
_See also_:
*note omp_get_wtime::
@@ -1132,7 +1136,7 @@ _Reference_:

File: libgomp.info, Node: omp_get_wtime, Prev: omp_get_wtick, Up: Runtime Library Routines
-2.41 'omp_get_wtime' - Elapsed wall clock time
+2.41 `omp_get_wtime' - Elapsed wall clock time
==============================================
_Description_:
@@ -1143,10 +1147,10 @@ _Description_:
execution of the program.
_C/C++_:
- _Prototype_: 'double omp_get_wtime(void);'
+ _Prototype_: `double omp_get_wtime(void);'
_Fortran_:
- _Interface_: 'double precision function omp_get_wtime()'
+ _Interface_: `double precision function omp_get_wtime()'
_See also_:
*note omp_get_wtick::
@@ -1160,9 +1164,9 @@ File: libgomp.info, Node: Environment Variables, Next: Enabling OpenACC, Prev
3 Environment Variables
***********************
-The environment variables which beginning with 'OMP_' are defined by
+The environment variables which beginning with `OMP_' are defined by
section 4 of the OpenMP specification in version 4.5, while those
-beginning with 'GOMP_' are GNU extensions.
+beginning with `GOMP_' are GNU extensions.
* Menu:
@@ -1189,13 +1193,13 @@ beginning with 'GOMP_' are GNU extensions.

File: libgomp.info, Node: OMP_CANCELLATION, Next: OMP_DISPLAY_ENV, Up: Environment Variables
-3.1 'OMP_CANCELLATION' - Set whether cancellation is activated
+3.1 `OMP_CANCELLATION' - Set whether cancellation is activated
==============================================================
_Description_:
- If set to 'TRUE', the cancellation is activated. If set to 'FALSE'
- or if unset, cancellation is disabled and the 'cancel' construct is
- ignored.
+ If set to `TRUE', the cancellation is activated. If set to
+ `FALSE' or if unset, cancellation is disabled and the `cancel'
+ construct is ignored.
_See also_:
*note omp_get_cancellation::
@@ -1206,15 +1210,15 @@ _Reference_:

File: libgomp.info, Node: OMP_DISPLAY_ENV, Next: OMP_DEFAULT_DEVICE, Prev: OMP_CANCELLATION, Up: Environment Variables
-3.2 'OMP_DISPLAY_ENV' - Show OpenMP version and environment variables
+3.2 `OMP_DISPLAY_ENV' - Show OpenMP version and environment variables
=====================================================================
_Description_:
- If set to 'TRUE', the OpenMP version number and the values
+ If set to `TRUE', the OpenMP version number and the values
associated with the OpenMP environment variables are printed to
- 'stderr'. If set to 'VERBOSE', it additionally shows the value of
+ `stderr'. If set to `VERBOSE', it additionally shows the value of
the environment variables which are GNU extensions. If undefined
- or set to 'FALSE', this information will not be shown.
+ or set to `FALSE', this information will not be shown.
_Reference_:
OpenMP specification v4.5 (http://www.openmp.org/), Section 4.12
@@ -1222,15 +1226,15 @@ _Reference_:

File: libgomp.info, Node: OMP_DEFAULT_DEVICE, Next: OMP_DYNAMIC, Prev: OMP_DISPLAY_ENV, Up: Environment Variables
-3.3 'OMP_DEFAULT_DEVICE' - Set the device used in target regions
+3.3 `OMP_DEFAULT_DEVICE' - Set the device used in target regions
================================================================
_Description_:
- Set to choose the device which is used in a 'target' region, unless
- the value is overridden by 'omp_set_default_device' or by a
- 'device' clause. The value shall be the nonnegative device number.
- If no device with the given device number exists, the code is
- executed on the host. If unset, device number 0 will be used.
+ Set to choose the device which is used in a `target' region,
+ unless the value is overridden by `omp_set_default_device' or by a
+ `device' clause. The value shall be the nonnegative device
+ number. If no device with the given device number exists, the code
+ is executed on the host. If unset, device number 0 will be used.
_See also_:
*note omp_get_default_device::, *note omp_set_default_device::,
@@ -1241,14 +1245,14 @@ _Reference_:

File: libgomp.info, Node: OMP_DYNAMIC, Next: OMP_MAX_ACTIVE_LEVELS, Prev: OMP_DEFAULT_DEVICE, Up: Environment Variables
-3.4 'OMP_DYNAMIC' - Dynamic adjustment of threads
+3.4 `OMP_DYNAMIC' - Dynamic adjustment of threads
=================================================
_Description_:
Enable or disable the dynamic adjustment of the number of threads
within a team. The value of this environment variable shall be
- 'TRUE' or 'FALSE'. If undefined, dynamic adjustment is disabled by
- default.
+ `TRUE' or `FALSE'. If undefined, dynamic adjustment is disabled
+ by default.
_See also_:
*note omp_set_dynamic::
@@ -1259,7 +1263,7 @@ _Reference_:

File: libgomp.info, Node: OMP_MAX_ACTIVE_LEVELS, Next: OMP_MAX_TASK_PRIORITY, Prev: OMP_DYNAMIC, Up: Environment Variables
-3.5 'OMP_MAX_ACTIVE_LEVELS' - Set the maximum number of nested parallel regions
+3.5 `OMP_MAX_ACTIVE_LEVELS' - Set the maximum number of nested parallel regions
===============================================================================
_Description_:
@@ -1276,13 +1280,13 @@ _Reference_:

File: libgomp.info, Node: OMP_MAX_TASK_PRIORITY, Next: OMP_NESTED, Prev: OMP_MAX_ACTIVE_LEVELS, Up: Environment Variables
-3.6 'OMP_MAX_TASK_PRIORITY' - Set the maximum priority
+3.6 `OMP_MAX_TASK_PRIORITY' - Set the maximum priority
======================================================
-number that can be set for a task.
+number that can be set for a task.
_Description_:
- Specifies the initial value for the maximum priority value that can
- be set for a task. The value of this variable shall be a
+ Specifies the initial value for the maximum priority value that
+ can be set for a task. The value of this variable shall be a
non-negative integer, and zero is allowed. If undefined, the
default priority is 0.
@@ -1295,13 +1299,13 @@ _Reference_:

File: libgomp.info, Node: OMP_NESTED, Next: OMP_NUM_THREADS, Prev: OMP_MAX_TASK_PRIORITY, Up: Environment Variables
-3.7 'OMP_NESTED' - Nested parallel regions
+3.7 `OMP_NESTED' - Nested parallel regions
==========================================
_Description_:
Enable or disable nested parallel regions, i.e., whether team
members are allowed to create new teams. The value of this
- environment variable shall be 'TRUE' or 'FALSE'. If undefined,
+ environment variable shall be `TRUE' or `FALSE'. If undefined,
nested parallel regions are disabled by default.
_See also_:
@@ -1313,15 +1317,15 @@ _Reference_:

File: libgomp.info, Node: OMP_NUM_THREADS, Next: OMP_PROC_BIND, Prev: OMP_NESTED, Up: Environment Variables
-3.8 'OMP_NUM_THREADS' - Specifies the number of threads to use
+3.8 `OMP_NUM_THREADS' - Specifies the number of threads to use
==============================================================
_Description_:
- Specifies the default number of threads to use in parallel regions.
- The value of this variable shall be a comma-separated list of
- positive integers; the value specified the number of threads to use
- for the corresponding nested level. If undefined one thread per
- CPU is used.
+ Specifies the default number of threads to use in parallel
+ regions. The value of this variable shall be a comma-separated
+ list of positive integers; the value specified the number of
+ threads to use for the corresponding nested level. If undefined
+ one thread per CPU is used.
_See also_:
*note omp_set_num_threads::
@@ -1332,22 +1336,22 @@ _Reference_:

File: libgomp.info, Node: OMP_PROC_BIND, Next: OMP_PLACES, Prev: OMP_NUM_THREADS, Up: Environment Variables
-3.9 'OMP_PROC_BIND' - Whether theads may be moved between CPUs
+3.9 `OMP_PROC_BIND' - Whether theads may be moved between CPUs
==============================================================
_Description_:
Specifies whether threads may be moved between processors. If set
- to 'TRUE', OpenMP theads should not be moved; if set to 'FALSE'
+ to `TRUE', OpenMP theads should not be moved; if set to `FALSE'
they may be moved. Alternatively, a comma separated list with the
- values 'MASTER', 'CLOSE' and 'SPREAD' can be used to specify the
+ values `MASTER', `CLOSE' and `SPREAD' can be used to specify the
thread affinity policy for the corresponding nesting level. With
- 'MASTER' the worker threads are in the same place partition as the
- master thread. With 'CLOSE' those are kept close to the master
- thread in contiguous place partitions. And with 'SPREAD' a sparse
+ `MASTER' the worker threads are in the same place partition as the
+ master thread. With `CLOSE' those are kept close to the master
+ thread in contiguous place partitions. And with `SPREAD' a sparse
distribution across the place partitions is used.
- When undefined, 'OMP_PROC_BIND' defaults to 'TRUE' when
- 'OMP_PLACES' or 'GOMP_CPU_AFFINITY' is set and 'FALSE' otherwise.
+ When undefined, `OMP_PROC_BIND' defaults to `TRUE' when
+ `OMP_PLACES' or `GOMP_CPU_AFFINITY' is set and `FALSE' otherwise.
_See also_:
*note OMP_PLACES::, *note GOMP_CPU_AFFINITY::, *note
@@ -1359,19 +1363,19 @@ _Reference_:

File: libgomp.info, Node: OMP_PLACES, Next: OMP_STACKSIZE, Prev: OMP_PROC_BIND, Up: Environment Variables
-3.10 'OMP_PLACES' - Specifies on which CPUs the theads should be placed
+3.10 `OMP_PLACES' - Specifies on which CPUs the theads should be placed
=======================================================================
_Description_:
- The thread placement can be either specified using an abstract name
- or by an explicit list of the places. The abstract names
- 'threads', 'cores' and 'sockets' can be optionally followed by a
+ The thread placement can be either specified using an abstract
+ name or by an explicit list of the places. The abstract names
+ `threads', `cores' and `sockets' can be optionally followed by a
positive number in parentheses, which denotes the how many places
- shall be created. With 'threads' each place corresponds to a
- single hardware thread; 'cores' to a single core with the
- corresponding number of hardware threads; and with 'sockets' the
+ shall be created. With `threads' each place corresponds to a
+ single hardware thread; `cores' to a single core with the
+ corresponding number of hardware threads; and with `sockets' the
place corresponds to a single socket. The resulting placement can
- be shown by setting the 'OMP_DISPLAY_ENV' environment variable.
+ be shown by setting the `OMP_DISPLAY_ENV' environment variable.
Alternatively, the placement can be specified explicitly as
comma-separated list of places. A place is specified by set of
@@ -1384,11 +1388,11 @@ _Description_:
after after the hardware thread number or the place. Optionally,
the length can be followed by a colon and the stride number -
otherwise a unit stride is assumed. For instance, the following
- specifies the same places list: '"{0,1,2}, {3,4,6}, {7,8,9},
- {10,11,12}"'; '"{0:3}, {3:3}, {7:3}, {10:3}"'; and '"{0:2}:4:3"'.
+ specifies the same places list: `"{0,1,2}, {3,4,6}, {7,8,9},
+ {10,11,12}"'; `"{0:3}, {3:3}, {7:3}, {10:3}"'; and `"{0:2}:4:3"'.
- If 'OMP_PLACES' and 'GOMP_CPU_AFFINITY' are unset and
- 'OMP_PROC_BIND' is either unset or 'false', threads may be moved
+ If `OMP_PLACES' and `GOMP_CPU_AFFINITY' are unset and
+ `OMP_PROC_BIND' is either unset or `false', threads may be moved
between CPUs following no placement policy.
_See also_:
@@ -1401,18 +1405,18 @@ _Reference_:

File: libgomp.info, Node: OMP_STACKSIZE, Next: OMP_SCHEDULE, Prev: OMP_PLACES, Up: Environment Variables
-3.11 'OMP_STACKSIZE' - Set default thread stack size
+3.11 `OMP_STACKSIZE' - Set default thread stack size
====================================================
_Description_:
Set the default thread stack size in kilobytes, unless the number
- is suffixed by 'B', 'K', 'M' or 'G', in which case the size is,
- respectively, in bytes, kilobytes, megabytes or gigabytes. This is
- different from 'pthread_attr_setstacksize' which gets the number of
- bytes as an argument. If the stack size cannot be set due to
- system constraints, an error is reported and the initial stack size
- is left unchanged. If undefined, the stack size is system
- dependent.
+ is suffixed by `B', `K', `M' or `G', in which case the size is,
+ respectively, in bytes, kilobytes, megabytes or gigabytes. This
+ is different from `pthread_attr_setstacksize' which gets the
+ number of bytes as an argument. If the stack size cannot be set
+ due to system constraints, an error is reported and the initial
+ stack size is left unchanged. If undefined, the stack size is
+ system dependent.
_Reference_:
OpenMP specification v4.5 (http://www.openmp.org/), Section 4.7
@@ -1420,15 +1424,15 @@ _Reference_:

File: libgomp.info, Node: OMP_SCHEDULE, Next: OMP_THREAD_LIMIT, Prev: OMP_STACKSIZE, Up: Environment Variables
-3.12 'OMP_SCHEDULE' - How threads are scheduled
+3.12 `OMP_SCHEDULE' - How threads are scheduled
===============================================
_Description_:
- Allows to specify 'schedule type' and 'chunk size'. The value of
- the variable shall have the form: 'type[,chunk]' where 'type' is
- one of 'static', 'dynamic', 'guided' or 'auto' The optional 'chunk'
- size shall be a positive integer. If undefined, dynamic scheduling
- and a chunk size of 1 is used.
+ Allows to specify `schedule type' and `chunk size'. The value of
+ the variable shall have the form: `type[,chunk]' where `type' is
+ one of `static', `dynamic', `guided' or `auto' The optional
+ `chunk' size shall be a positive integer. If undefined, dynamic
+ scheduling and a chunk size of 1 is used.
_See also_:
*note omp_set_schedule::
@@ -1440,7 +1444,7 @@ _Reference_:

File: libgomp.info, Node: OMP_THREAD_LIMIT, Next: OMP_WAIT_POLICY, Prev: OMP_SCHEDULE, Up: Environment Variables
-3.13 'OMP_THREAD_LIMIT' - Set the maximum number of threads
+3.13 `OMP_THREAD_LIMIT' - Set the maximum number of threads
===========================================================
_Description_:
@@ -1457,13 +1461,13 @@ _Reference_:

File: libgomp.info, Node: OMP_WAIT_POLICY, Next: GOMP_CPU_AFFINITY, Prev: OMP_THREAD_LIMIT, Up: Environment Variables
-3.14 'OMP_WAIT_POLICY' - How waiting threads are handled
+3.14 `OMP_WAIT_POLICY' - How waiting threads are handled
========================================================
_Description_:
Specifies whether waiting threads should be active or passive. If
- the value is 'PASSIVE', waiting threads should not consume CPU
- power while waiting; while the value is 'ACTIVE' specifies that
+ the value is `PASSIVE', waiting threads should not consume CPU
+ power while waiting; while the value is `ACTIVE' specifies that
they should. If undefined, threads wait actively for a short time
before waiting passively.
@@ -1476,7 +1480,7 @@ _Reference_:

File: libgomp.info, Node: GOMP_CPU_AFFINITY, Next: GOMP_DEBUG, Prev: OMP_WAIT_POLICY, Up: Environment Variables
-3.15 'GOMP_CPU_AFFINITY' - Bind threads to specific CPUs
+3.15 `GOMP_CPU_AFFINITY' - Bind threads to specific CPUs
========================================================
_Description_:
@@ -1484,26 +1488,26 @@ _Description_:
space-separated or comma-separated list of CPUs. This list may
contain different kinds of entries: either single CPU numbers in
any order, a range of CPUs (M-N) or a range with some stride
- (M-N:S). CPU numbers are zero based. For example,
- 'GOMP_CPU_AFFINITY="0 3 1-2 4-15:2"' will bind the initial thread
+ (M-N:S). CPU numbers are zero based. For example,
+ `GOMP_CPU_AFFINITY="0 3 1-2 4-15:2"' will bind the initial thread
to CPU 0, the second to CPU 3, the third to CPU 1, the fourth to
CPU 2, the fifth to CPU 4, the sixth through tenth to CPUs 6, 8,
10, 12, and 14 respectively and then start assigning back from the
- beginning of the list. 'GOMP_CPU_AFFINITY=0' binds all threads to
+ beginning of the list. `GOMP_CPU_AFFINITY=0' binds all threads to
CPU 0.
There is no libgomp library routine to determine whether a CPU
affinity specification is in effect. As a workaround,
- language-specific library functions, e.g., 'getenv' in C or
- 'GET_ENVIRONMENT_VARIABLE' in Fortran, may be used to query the
- setting of the 'GOMP_CPU_AFFINITY' environment variable. A defined
- CPU affinity on startup cannot be changed or disabled during the
- runtime of the application.
-
- If both 'GOMP_CPU_AFFINITY' and 'OMP_PROC_BIND' are set,
- 'OMP_PROC_BIND' has a higher precedence. If neither has been set
- and 'OMP_PROC_BIND' is unset, or when 'OMP_PROC_BIND' is set to
- 'FALSE', the host system will handle the assignment of threads to
+ language-specific library functions, e.g., `getenv' in C or
+ `GET_ENVIRONMENT_VARIABLE' in Fortran, may be used to query the
+ setting of the `GOMP_CPU_AFFINITY' environment variable. A
+ defined CPU affinity on startup cannot be changed or disabled
+ during the runtime of the application.
+
+ If both `GOMP_CPU_AFFINITY' and `OMP_PROC_BIND' are set,
+ `OMP_PROC_BIND' has a higher precedence. If neither has been set
+ and `OMP_PROC_BIND' is unset, or when `OMP_PROC_BIND' is set to
+ `FALSE', the host system will handle the assignment of threads to
CPUs.
_See also_:
@@ -1512,12 +1516,12 @@ _See also_:

File: libgomp.info, Node: GOMP_DEBUG, Next: GOMP_STACKSIZE, Prev: GOMP_CPU_AFFINITY, Up: Environment Variables
-3.16 'GOMP_DEBUG' - Enable debugging output
+3.16 `GOMP_DEBUG' - Enable debugging output
===========================================
_Description_:
- Enable debugging output. The variable should be set to '0'
- (disabled, also the default if not set), or '1' (enabled).
+ Enable debugging output. The variable should be set to `0'
+ (disabled, also the default if not set), or `1' (enabled).
If enabled, some debugging output will be printed during execution.
This is currently not specified in more detail, and subject to
@@ -1526,12 +1530,12 @@ _Description_:

File: libgomp.info, Node: GOMP_STACKSIZE, Next: GOMP_SPINCOUNT, Prev: GOMP_DEBUG, Up: Environment Variables
-3.17 'GOMP_STACKSIZE' - Set default thread stack size
+3.17 `GOMP_STACKSIZE' - Set default thread stack size
=====================================================
_Description_:
Set the default thread stack size in kilobytes. This is different
- from 'pthread_attr_setstacksize' which gets the number of bytes as
+ from `pthread_attr_setstacksize' which gets the number of bytes as
an argument. If the stack size cannot be set due to system
constraints, an error is reported and the initial stack size is
left unchanged. If undefined, the stack size is system dependent.
@@ -1548,23 +1552,24 @@ _Reference_:

File: libgomp.info, Node: GOMP_SPINCOUNT, Next: GOMP_RTEMS_THREAD_POOLS, Prev: GOMP_STACKSIZE, Up: Environment Variables
-3.18 'GOMP_SPINCOUNT' - Set the busy-wait spin count
+3.18 `GOMP_SPINCOUNT' - Set the busy-wait spin count
====================================================
_Description_:
Determines how long a threads waits actively with consuming CPU
power before waiting passively without consuming CPU power. The
- value may be either 'INFINITE', 'INFINITY' to always wait actively
+ value may be either `INFINITE', `INFINITY' to always wait actively
or an integer which gives the number of spins of the busy-wait
loop. The integer may optionally be followed by the following
- suffixes acting as multiplication factors: 'k' (kilo, thousand),
- 'M' (mega, million), 'G' (giga, billion), or 'T' (tera, trillion).
- If undefined, 0 is used when 'OMP_WAIT_POLICY' is 'PASSIVE',
- 300,000 is used when 'OMP_WAIT_POLICY' is undefined and 30 billion
- is used when 'OMP_WAIT_POLICY' is 'ACTIVE'. If there are more
- OpenMP threads than available CPUs, 1000 and 100 spins are used for
- 'OMP_WAIT_POLICY' being 'ACTIVE' or undefined, respectively; unless
- the 'GOMP_SPINCOUNT' is lower or 'OMP_WAIT_POLICY' is 'PASSIVE'.
+ suffixes acting as multiplication factors: `k' (kilo, thousand),
+ `M' (mega, million), `G' (giga, billion), or `T' (tera, trillion).
+ If undefined, 0 is used when `OMP_WAIT_POLICY' is `PASSIVE',
+ 300,000 is used when `OMP_WAIT_POLICY' is undefined and 30 billion
+ is used when `OMP_WAIT_POLICY' is `ACTIVE'. If there are more
+ OpenMP threads than available CPUs, 1000 and 100 spins are used
+ for `OMP_WAIT_POLICY' being `ACTIVE' or undefined, respectively;
+ unless the `GOMP_SPINCOUNT' is lower or `OMP_WAIT_POLICY' is
+ `PASSIVE'.
_See also_:
*note OMP_WAIT_POLICY::
@@ -1572,41 +1577,44 @@ _See also_:

File: libgomp.info, Node: GOMP_RTEMS_THREAD_POOLS, Prev: GOMP_SPINCOUNT, Up: Environment Variables
-3.19 'GOMP_RTEMS_THREAD_POOLS' - Set the RTEMS specific thread pools
+3.19 `GOMP_RTEMS_THREAD_POOLS' - Set the RTEMS specific thread pools
====================================================================
_Description_:
This environment variable is only used on the RTEMS real-time
operating system. It determines the scheduler instance specific
- thread pools. The format for 'GOMP_RTEMS_THREAD_POOLS' is a list
- of optional '<thread-pool-count>[$<priority>]@<scheduler-name>'
- configurations separated by ':' where:
- * '<thread-pool-count>' is the thread pool count for this
+ thread pools. The format for `GOMP_RTEMS_THREAD_POOLS' is a list
+ of optional `<thread-pool-count>[$<priority>]@<scheduler-name>'
+ configurations separated by `:' where:
+ * `<thread-pool-count>' is the thread pool count for this
scheduler instance.
- * '$<priority>' is an optional priority for the worker threads
- of a thread pool according to 'pthread_setschedparam'. In
+
+ * `$<priority>' is an optional priority for the worker threads
+ of a thread pool according to `pthread_setschedparam'. In
case a priority value is omitted, then a worker thread will
inherit the priority of the OpenMP master thread that created
it. The priority of the worker thread is not changed after
creation, even if a new OpenMP master thread using the worker
has a different priority.
- * '@<scheduler-name>' is the scheduler instance name according
+
+ * `@<scheduler-name>' is the scheduler instance name according
to the RTEMS application configuration.
In case no thread pool configuration is specified for a scheduler
- instance, then each OpenMP master thread of this scheduler instance
- will use its own dynamically allocated thread pool. To limit the
- worker thread count of the thread pools, each OpenMP master thread
- must call 'omp_set_num_threads'.
+ instance, then each OpenMP master thread of this scheduler
+ instance will use its own dynamically allocated thread pool. To
+ limit the worker thread count of the thread pools, each OpenMP
+ master thread must call `omp_set_num_threads'.
+
_Example_:
- Lets suppose we have three scheduler instances 'IO', 'WRK0', and
- 'WRK1' with 'GOMP_RTEMS_THREAD_POOLS' set to '"1@WRK0:3$4@WRK1"'.
+ Lets suppose we have three scheduler instances `IO', `WRK0', and
+ `WRK1' with `GOMP_RTEMS_THREAD_POOLS' set to `"1@WRK0:3$4@WRK1"'.
Then there are no thread pool restrictions for scheduler instance
- 'IO'. In the scheduler instance 'WRK0' there is one thread pool
+ `IO'. In the scheduler instance `WRK0' there is one thread pool
available. Since no priority is specified for this scheduler
instance, the worker thread inherits the priority of the OpenMP
- master thread that created it. In the scheduler instance 'WRK1'
- there are three thread pools available and their worker threads run
- at priority four.
+ master thread that created it. In the scheduler instance `WRK1'
+ there are three thread pools available and their worker threads
+ run at priority four.

File: libgomp.info, Node: Enabling OpenACC, Next: OpenACC Runtime Library Routines, Prev: Environment Variables, Up: Top
@@ -1615,10 +1623,10 @@ File: libgomp.info, Node: Enabling OpenACC, Next: OpenACC Runtime Library Rout
******************
To activate the OpenACC extensions for C/C++ and Fortran, the
-compile-time flag '-fopenacc' must be specified. This enables the
-OpenACC directive '#pragma acc' in C/C++ and '!$accp' directives in free
-form, 'c$acc', '*$acc' and '!$acc' directives in fixed form, '!$'
-conditional compilation sentinels in free form and 'c$', '*$' and '!$'
+compile-time flag `-fopenacc' must be specified. This enables the
+OpenACC directive `#pragma acc' in C/C++ and `!$accp' directives in
+free form, `c$acc', `*$acc' and `!$acc' directives in fixed form, `!$'
+conditional compilation sentinels in free form and `c$', `*$' and `!$'
sentinels in fixed form, for Fortran. The flag also arranges for
automatic linking of the OpenACC runtime library (*note OpenACC Runtime
Library Routines::).
@@ -1628,8 +1636,8 @@ found in the OpenACC (http://www.openacc.org/) Application Programming
Interface manual, version 2.0.
Note that this is an experimental feature and subject to change in
-future versions of GCC. See <https://gcc.gnu.org/wiki/OpenACC> for more
-information.
+future versions of GCC. See `https://gcc.gnu.org/wiki/OpenACC' for
+more information.

File: libgomp.info, Node: OpenACC Runtime Library Routines, Next: OpenACC Environment Variables, Prev: Enabling OpenACC, Up: Top
@@ -1639,9 +1647,9 @@ File: libgomp.info, Node: OpenACC Runtime Library Routines, Next: OpenACC Envi
The runtime routines described here are defined by section 3 of the
OpenACC specifications in version 2.0. They have C linkage, and do not
-throw exceptions. Generally, they are available only for the host, with
-the exception of 'acc_on_device', which is available for both the host
-and the acceleration device.
+throw exceptions. Generally, they are available only for the host,
+with the exception of `acc_on_device', which is available for both the
+host and the acceleration device.
* Menu:
@@ -1704,7 +1712,7 @@ API routines for target platforms.

File: libgomp.info, Node: acc_get_num_devices, Next: acc_set_device_type, Up: OpenACC Runtime Library Routines
-5.1 'acc_get_num_devices' - Get number of devices for given device type
+5.1 `acc_get_num_devices' - Get number of devices for given device type
=======================================================================
_Description_
@@ -1712,11 +1720,11 @@ _Description_
available for the device type specified in DEVICETYPE.
_C/C++_:
- _Prototype_: 'int acc_get_num_devices(acc_device_t devicetype);'
+ _Prototype_: `int acc_get_num_devices(acc_device_t devicetype);'
_Fortran_:
- _Interface_: 'integer function acc_get_num_devices(devicetype)'
- 'integer(kind=acc_device_kind) devicetype'
+ _Interface_: `integer function acc_get_num_devices(devicetype)'
+ `integer(kind=acc_device_kind) devicetype'
_Reference_:
OpenACC specification v2.0 (http://www.openacc.org/), section
@@ -1725,7 +1733,7 @@ _Reference_:

File: libgomp.info, Node: acc_set_device_type, Next: acc_get_device_type, Prev: acc_get_num_devices, Up: OpenACC Runtime Library Routines
-5.2 'acc_set_device_type' - Set type of device accelerator to use.
+5.2 `acc_set_device_type' - Set type of device accelerator to use.
==================================================================
_Description_
@@ -1734,11 +1742,11 @@ _Description_
kernels region.
_C/C++_:
- _Prototype_: 'acc_set_device_type(acc_device_t devicetype);'
+ _Prototype_: `acc_set_device_type(acc_device_t devicetype);'
_Fortran_:
- _Interface_: 'subroutine acc_set_device_type(devicetype)'
- 'integer(kind=acc_device_kind) devicetype'
+ _Interface_: `subroutine acc_set_device_type(devicetype)'
+ `integer(kind=acc_device_kind) devicetype'
_Reference_:
OpenACC specification v2.0 (http://www.openacc.org/), section
@@ -1747,7 +1755,7 @@ _Reference_:

File: libgomp.info, Node: acc_get_device_type, Next: acc_set_device_num, Prev: acc_set_device_type, Up: OpenACC Runtime Library Routines
-5.3 'acc_get_device_type' - Get type of device accelerator to be used.
+5.3 `acc_get_device_type' - Get type of device accelerator to be used.
======================================================================
_Description_
@@ -1755,11 +1763,11 @@ _Description_
a parallel or kernels region.
_C/C++_:
- _Prototype_: 'acc_device_t acc_get_device_type(void);'
+ _Prototype_: `acc_device_t acc_get_device_type(void);'
_Fortran_:
- _Interface_: 'function acc_get_device_type(void)'
- 'integer(kind=acc_device_kind) acc_get_device_type'
+ _Interface_: `function acc_get_device_type(void)'
+ `integer(kind=acc_device_kind) acc_get_device_type'
_Reference_:
OpenACC specification v2.0 (http://www.openacc.org/), section
@@ -1768,7 +1776,7 @@ _Reference_:

File: libgomp.info, Node: acc_set_device_num, Next: acc_get_device_num, Prev: acc_get_device_type, Up: OpenACC Runtime Library Routines
-5.4 'acc_set_device_num' - Set device number to use.
+5.4 `acc_set_device_num' - Set device number to use.
====================================================
_Description_
@@ -1777,12 +1785,13 @@ _Description_
DEVICETYPE.
_C/C++_:
- _Prototype_: 'acc_set_device_num(int num, acc_device_t devicetype);'
+ _Prototype_: `acc_set_device_num(int num, acc_device_t
+ devicetype);'
_Fortran_:
- _Interface_: 'subroutine acc_set_device_num(devicenum, devicetype)'
- 'integer devicenum'
- 'integer(kind=acc_device_kind) devicetype'
+ _Interface_: `subroutine acc_set_device_num(devicenum, devicetype)'
+ `integer devicenum'
+ `integer(kind=acc_device_kind) devicetype'
_Reference_:
OpenACC specification v2.0 (http://www.openacc.org/), section
@@ -1791,7 +1800,7 @@ _Reference_:

File: libgomp.info, Node: acc_get_device_num, Next: acc_async_test, Prev: acc_set_device_num, Up: OpenACC Runtime Library Routines
-5.5 'acc_get_device_num' - Get device number to be used.
+5.5 `acc_get_device_num' - Get device number to be used.
========================================================
_Description_
@@ -1800,12 +1809,12 @@ _Description_
parallel or kernels region.
_C/C++_:
- _Prototype_: 'int acc_get_device_num(acc_device_t devicetype);'
+ _Prototype_: `int acc_get_device_num(acc_device_t devicetype);'
_Fortran_:
- _Interface_: 'function acc_get_device_num(devicetype)'
- 'integer(kind=acc_device_kind) devicetype'
- 'integer acc_get_device_num'
+ _Interface_: `function acc_get_device_num(devicetype)'
+ `integer(kind=acc_device_kind) devicetype'
+ `integer acc_get_device_num'
_Reference_:
OpenACC specification v2.0 (http://www.openacc.org/), section
@@ -1814,23 +1823,23 @@ _Reference_:

File: libgomp.info, Node: acc_async_test, Next: acc_async_test_all, Prev: acc_get_device_num, Up: OpenACC Runtime Library Routines
-5.6 'acc_async_test' - Test for completion of a specific asynchronous operation.
+5.6 `acc_async_test' - Test for completion of a specific asynchronous operation.
================================================================================
_Description_
This function tests for completion of the asynchrounous operation
- specified in ARG. In C/C++, a non-zero value will be returned to
- indicate the specified asynchronous operation has completed. While
- Fortran will return a 'true'. If the asynchrounous operation has
- not completed, C/C++ returns a zero and Fortran returns a 'false'.
+ specified in ARG. In C/C++, a non-zero value will be returned to
+ indicate the specified asynchronous operation has completed. While
+ Fortran will return a `true'. If the asynchrounous operation has
+ not completed, C/C++ returns a zero and Fortran returns a `false'.
_C/C++_:
- _Prototype_: 'int acc_async_test(int arg);'
+ _Prototype_: `int acc_async_test(int arg);'
_Fortran_:
- _Interface_: 'function acc_async_test(arg)'
- 'integer(kind=acc_handle_kind) arg'
- 'logical acc_async_test'
+ _Interface_: `function acc_async_test(arg)'
+ `integer(kind=acc_handle_kind) arg'
+ `logical acc_async_test'
_Reference_:
OpenACC specification v2.0 (http://www.openacc.org/), section
@@ -1839,22 +1848,22 @@ _Reference_:

File: libgomp.info, Node: acc_async_test_all, Next: acc_wait, Prev: acc_async_test, Up: OpenACC Runtime Library Routines
-5.7 'acc_async_test_all' - Tests for completion of all asynchronous operations.
+5.7 `acc_async_test_all' - Tests for completion of all asynchronous operations.
===============================================================================
_Description_
This function tests for completion of all asynchrounous operations.
In C/C++, a non-zero value will be returned to indicate all
- asynchronous operations have completed. While Fortran will return
- a 'true'. If any asynchronous operation has not completed, C/C++
- returns a zero and Fortran returns a 'false'.
+ asynchronous operations have completed. While Fortran will return
+ a `true'. If any asynchronous operation has not completed, C/C++
+ returns a zero and Fortran returns a `false'.
_C/C++_:
- _Prototype_: 'int acc_async_test_all(void);'
+ _Prototype_: `int acc_async_test_all(void);'
_Fortran_:
- _Interface_: 'function acc_async_test()'
- 'logical acc_get_device_num'
+ _Interface_: `function acc_async_test()'
+ `logical acc_get_device_num'
_Reference_:
OpenACC specification v2.0 (http://www.openacc.org/), section
@@ -1863,7 +1872,7 @@ _Reference_:

File: libgomp.info, Node: acc_wait, Next: acc_wait_all, Prev: acc_async_test_all, Up: OpenACC Runtime Library Routines
-5.8 'acc_wait' - Wait for completion of a specific asynchronous operation.
+5.8 `acc_wait' - Wait for completion of a specific asynchronous operation.
==========================================================================
_Description_
@@ -1871,11 +1880,11 @@ _Description_
specified in ARG.
_C/C++_:
- _Prototype_: 'acc_wait(arg);'
+ _Prototype_: `acc_wait(arg);'
_Fortran_:
- _Interface_: 'subroutine acc_wait(arg)'
- 'integer(acc_handle_kind) arg'
+ _Interface_: `subroutine acc_wait(arg)'
+ `integer(acc_handle_kind) arg'
_Reference_:
OpenACC specification v2.0 (http://www.openacc.org/), section
@@ -1884,7 +1893,7 @@ _Reference_:

File: libgomp.info, Node: acc_wait_all, Next: acc_wait_all_async, Prev: acc_wait, Up: OpenACC Runtime Library Routines
-5.9 'acc_wait_all' - Waits for completion of all asynchronous operations.
+5.9 `acc_wait_all' - Waits for completion of all asynchronous operations.
=========================================================================
_Description_
@@ -1892,10 +1901,10 @@ _Description_
operations.
_C/C++_:
- _Prototype_: 'acc_wait_all(void);'
+ _Prototype_: `acc_wait_all(void);'
_Fortran_:
- _Interface_: 'subroutine acc_wait_async()'
+ _Interface_: `subroutine acc_wait_async()'
_Reference_:
OpenACC specification v2.0 (http://www.openacc.org/), section
@@ -1904,7 +1913,7 @@ _Reference_:

File: libgomp.info, Node: acc_wait_all_async, Next: acc_wait_async, Prev: acc_wait_all, Up: OpenACC Runtime Library Routines
-5.10 'acc_wait_all_async' - Wait for completion of all asynchronous operations.
+5.10 `acc_wait_all_async' - Wait for completion of all asynchronous operations.
===============================================================================
_Description_
@@ -1913,11 +1922,11 @@ _Description_
on any queue.
_C/C++_:
- _Prototype_: 'acc_wait_all_async(int async);'
+ _Prototype_: `acc_wait_all_async(int async);'
_Fortran_:
- _Interface_: 'subroutine acc_wait_all_async(async)'
- 'integer(acc_handle_kind) async'
+ _Interface_: `subroutine acc_wait_all_async(async)'
+ `integer(acc_handle_kind) async'
_Reference_:
OpenACC specification v2.0 (http://www.openacc.org/), section
@@ -1926,7 +1935,7 @@ _Reference_:

File: libgomp.info, Node: acc_wait_async, Next: acc_init, Prev: acc_wait_all_async, Up: OpenACC Runtime Library Routines
-5.11 'acc_wait_async' - Wait for completion of asynchronous operations.
+5.11 `acc_wait_async' - Wait for completion of asynchronous operations.
=======================================================================
_Description_
@@ -1934,11 +1943,11 @@ _Description_
all asynchronous operations enqueued on queue ARG.
_C/C++_:
- _Prototype_: 'acc_wait_async(int arg, int async);'
+ _Prototype_: `acc_wait_async(int arg, int async);'
_Fortran_:
- _Interface_: 'subroutine acc_wait_async(arg, async)'
- 'integer(acc_handle_kind) arg, async'
+ _Interface_: `subroutine acc_wait_async(arg, async)'
+ `integer(acc_handle_kind) arg, async'
_Reference_:
OpenACC specification v2.0 (http://www.openacc.org/), section
@@ -1947,19 +1956,19 @@ _Reference_:

File: libgomp.info, Node: acc_init, Next: acc_shutdown, Prev: acc_wait_async, Up: OpenACC Runtime Library Routines
-5.12 'acc_init' - Initialize runtime for a specific device type.
+5.12 `acc_init' - Initialize runtime for a specific device type.
================================================================
_Description_
- This function initializes the runtime for the device type specified
- in DEVICETYPE.
+ This function initializes the runtime for the device type
+ specified in DEVICETYPE.
_C/C++_:
- _Prototype_: 'acc_init(acc_device_t devicetype);'
+ _Prototype_: `acc_init(acc_device_t devicetype);'
_Fortran_:
- _Interface_: 'subroutine acc_init(devicetype)'
- 'integer(acc_device_kind) devicetype'
+ _Interface_: `subroutine acc_init(devicetype)'
+ `integer(acc_device_kind) devicetype'
_Reference_:
OpenACC specification v2.0 (http://www.openacc.org/), section
@@ -1968,7 +1977,7 @@ _Reference_:

File: libgomp.info, Node: acc_shutdown, Next: acc_on_device, Prev: acc_init, Up: OpenACC Runtime Library Routines
-5.13 'acc_shutdown' - Shuts down the runtime for a specific device type.
+5.13 `acc_shutdown' - Shuts down the runtime for a specific device type.
========================================================================
_Description_
@@ -1976,11 +1985,11 @@ _Description_
in DEVICETYPE.
_C/C++_:
- _Prototype_: 'acc_shutdown(acc_device_t devicetype);'
+ _Prototype_: `acc_shutdown(acc_device_t devicetype);'
_Fortran_:
- _Interface_: 'subroutine acc_shutdown(devicetype)'
- 'integer(acc_device_kind) devicetype'
+ _Interface_: `subroutine acc_shutdown(devicetype)'
+ `integer(acc_device_kind) devicetype'
_Reference_:
OpenACC specification v2.0 (http://www.openacc.org/), section
@@ -1989,24 +1998,24 @@ _Reference_:

File: libgomp.info, Node: acc_on_device, Next: acc_malloc, Prev: acc_shutdown, Up: OpenACC Runtime Library Routines
-5.14 'acc_on_device' - Whether executing on a particular device
+5.14 `acc_on_device' - Whether executing on a particular device
===============================================================
_Description_:
This function returns whether the program is executing on a
- particular device specified in DEVICETYPE. In C/C++ a non-zero
+ particular device specified in DEVICETYPE. In C/C++ a non-zero
value is returned to indicate the device is execiting on the
- specified device type. In Fortran, 'true' will be returned. If
+ specified device type. In Fortran, `true' will be returned. If
the program is not executing on the specified device type C/C++
- will return a zero, while Fortran will return 'false'.
+ will return a zero, while Fortran will return `false'.
_C/C++_:
- _Prototype_: 'acc_on_device(acc_device_t devicetype);'
+ _Prototype_: `acc_on_device(acc_device_t devicetype);'
_Fortran_:
- _Interface_: 'function acc_on_device(devicetype)'
- 'integer(acc_device_kind) devicetype'
- 'logical acc_on_device'
+ _Interface_: `function acc_on_device(devicetype)'
+ `integer(acc_device_kind) devicetype'
+ `logical acc_on_device'
_Reference_:
OpenACC specification v2.0 (http://www.openacc.org/), section
@@ -2015,15 +2024,15 @@ _Reference_:

File: libgomp.info, Node: acc_malloc, Next: acc_free, Prev: acc_on_device, Up: OpenACC Runtime Library Routines
-5.15 'acc_malloc' - Allocate device memory.
+5.15 `acc_malloc' - Allocate device memory.
===========================================
_Description_
- This function allocates LEN bytes of device memory. It returns the
+ This function allocates LEN bytes of device memory. It returns the
device address of the allocated memory.
_C/C++_:
- _Prototype_: 'd_void* acc_malloc(size_t len);'
+ _Prototype_: `d_void* acc_malloc(size_t len);'
_Reference_:
OpenACC specification v2.0 (http://www.openacc.org/), section
@@ -2032,14 +2041,14 @@ _Reference_:

File: libgomp.info, Node: acc_free, Next: acc_copyin, Prev: acc_malloc, Up: OpenACC Runtime Library Routines
-5.16 'acc_free' - Free device memory.
+5.16 `acc_free' - Free device memory.
=====================================
_Description_
- Free previously allocated device memory at the device address 'a'.
+ Free previously allocated device memory at the device address `a'.
_C/C++_:
- _Prototype_: 'acc_free(d_void *a);'
+ _Prototype_: `acc_free(d_void *a);'
_Reference_:
OpenACC specification v2.0 (http://www.openacc.org/), section
@@ -2048,27 +2057,27 @@ _Reference_:

File: libgomp.info, Node: acc_copyin, Next: acc_present_or_copyin, Prev: acc_free, Up: OpenACC Runtime Library Routines
-5.17 'acc_copyin' - Allocate device memory and copy host memory to it.
+5.17 `acc_copyin' - Allocate device memory and copy host memory to it.
======================================================================
_Description_
In C/C++, this function allocates LEN bytes of device memory and
- maps it to the specified host address in A. The device address of
+ maps it to the specified host address in A. The device address of
the newly allocated device memory is returned.
- In Fortran, two (2) forms are supported. In the first form, A
- specifies a contiguous array section. The second form A specifies
- a variable or array element and LEN specifies the length in bytes.
+ In Fortran, two (2) forms are supported. In the first form, A
+ specifies a contiguous array section. The second form A specifies a
+ variable or array element and LEN specifies the length in bytes.
_C/C++_:
- _Prototype_: 'void *acc_copyin(h_void *a, size_t len);'
+ _Prototype_: `void *acc_copyin(h_void *a, size_t len);'
_Fortran_:
- _Interface_: 'subroutine acc_copyin(a)'
- 'type, dimension(:[,:]...) :: a'
- _Interface_: 'subroutine acc_copyin(a, len)'
- 'type, dimension(:[,:]...) :: a'
- 'integer len'
+ _Interface_: `subroutine acc_copyin(a)'
+ `type, dimension(:[,:]...) :: a'
+ _Interface_: `subroutine acc_copyin(a, len)'
+ `type, dimension(:[,:]...) :: a'
+ `integer len'
_Reference_:
OpenACC specification v2.0 (http://www.openacc.org/), section
@@ -2077,34 +2086,34 @@ _Reference_:

File: libgomp.info, Node: acc_present_or_copyin, Next: acc_create, Prev: acc_copyin, Up: OpenACC Runtime Library Routines
-5.18 'acc_present_or_copyin' - If the data is not present on the device, allocate device memory and copy from host memory.
+5.18 `acc_present_or_copyin' - If the data is not present on the device, allocate device memory and copy from host memory.
==========================================================================================================================
_Description_
This function tests if the host data specifed by A and of length
- LEN is present or not. If it is not present, then device memory
- will be allocated and the host memory copied. The device address
- of the newly allocated device memory is returned.
+ LEN is present or not. If it is not present, then device memory
+ will be allocated and the host memory copied. The device address of
+ the newly allocated device memory is returned.
- In Fortran, two (2) forms are supported. In the first form, A
- specifies a contiguous array section. The second form A specifies
+ In Fortran, two (2) forms are supported. In the first form, A
+ specifies a contiguous array section. The second form A specifies
a variable or array element and LEN specifies the length in bytes.
_C/C++_:
- _Prototype_: 'void *acc_present_or_copyin(h_void *a, size_t len);'
- _Prototype_: 'void *acc_pcopyin(h_void *a, size_t len);'
+ _Prototype_: `void *acc_present_or_copyin(h_void *a, size_t len);'
+ _Prototype_: `void *acc_pcopyin(h_void *a, size_t len);'
_Fortran_:
- _Interface_: 'subroutine acc_present_or_copyin(a)'
- 'type, dimension(:[,:]...) :: a'
- _Interface_: 'subroutine acc_present_or_copyin(a, len)'
- 'type, dimension(:[,:]...) :: a'
- 'integer len'
- _Interface_: 'subroutine acc_pcopyin(a)'
- 'type, dimension(:[,:]...) :: a'
- _Interface_: 'subroutine acc_pcopyin(a, len)'
- 'type, dimension(:[,:]...) :: a'
- 'integer len'
+ _Interface_: `subroutine acc_present_or_copyin(a)'
+ `type, dimension(:[,:]...) :: a'
+ _Interface_: `subroutine acc_present_or_copyin(a, len)'
+ `type, dimension(:[,:]...) :: a'
+ `integer len'
+ _Interface_: `subroutine acc_pcopyin(a)'
+ `type, dimension(:[,:]...) :: a'
+ _Interface_: `subroutine acc_pcopyin(a, len)'
+ `type, dimension(:[,:]...) :: a'
+ `integer len'
_Reference_:
OpenACC specification v2.0 (http://www.openacc.org/), section
@@ -2113,28 +2122,28 @@ _Reference_:

File: libgomp.info, Node: acc_create, Next: acc_present_or_create, Prev: acc_present_or_copyin, Up: OpenACC Runtime Library Routines
-5.19 'acc_create' - Allocate device memory and map it to host memory.
+5.19 `acc_create' - Allocate device memory and map it to host memory.
=====================================================================
_Description_
This function allocates device memory and maps it to host memory
- specified by the host address A with a length of LEN bytes. In
+ specified by the host address A with a length of LEN bytes. In
C/C++, the function returns the device address of the allocated
device memory.
- In Fortran, two (2) forms are supported. In the first form, A
- specifies a contiguous array section. The second form A specifies
+ In Fortran, two (2) forms are supported. In the first form, A
+ specifies a contiguous array section. The second form A specifies
a variable or array element and LEN specifies the length in bytes.
_C/C++_:
- _Prototype_: 'void *acc_create(h_void *a, size_t len);'
+ _Prototype_: `void *acc_create(h_void *a, size_t len);'
_Fortran_:
- _Interface_: 'subroutine acc_create(a)'
- 'type, dimension(:[,:]...) :: a'
- _Interface_: 'subroutine acc_create(a, len)'
- 'type, dimension(:[,:]...) :: a'
- 'integer len'
+ _Interface_: `subroutine acc_create(a)'
+ `type, dimension(:[,:]...) :: a'
+ _Interface_: `subroutine acc_create(a, len)'
+ `type, dimension(:[,:]...) :: a'
+ `integer len'
_Reference_:
OpenACC specification v2.0 (http://www.openacc.org/), section
@@ -2143,34 +2152,34 @@ _Reference_:

File: libgomp.info, Node: acc_present_or_create, Next: acc_copyout, Prev: acc_create, Up: OpenACC Runtime Library Routines
-5.20 'acc_present_or_create' - If the data is not present on the device, allocate device memory and map it to host memory.
+5.20 `acc_present_or_create' - If the data is not present on the device, allocate device memory and map it to host memory.
==========================================================================================================================
_Description_
This function tests if the host data specifed by A and of length
- LEN is present or not. If it is not present, then device memory
- will be allocated and mapped to host memory. In C/C++, the device
+ LEN is present or not. If it is not present, then device memory
+ will be allocated and mapped to host memory. In C/C++, the device
address of the newly allocated device memory is returned.
- In Fortran, two (2) forms are supported. In the first form, A
- specifies a contiguous array section. The second form A specifies
+ In Fortran, two (2) forms are supported. In the first form, A
+ specifies a contiguous array section. The second form A specifies
a variable or array element and LEN specifies the length in bytes.
_C/C++_:
- _Prototype_: 'void *acc_present_or_create(h_void *a, size_t len)'
- _Prototype_: 'void *acc_pcreate(h_void *a, size_t len)'
+ _Prototype_: `void *acc_present_or_create(h_void *a, size_t len)'
+ _Prototype_: `void *acc_pcreate(h_void *a, size_t len)'
_Fortran_:
- _Interface_: 'subroutine acc_present_or_create(a)'
- 'type, dimension(:[,:]...) :: a'
- _Interface_: 'subroutine acc_present_or_create(a, len)'
- 'type, dimension(:[,:]...) :: a'
- 'integer len'
- _Interface_: 'subroutine acc_pcreate(a)'
- 'type, dimension(:[,:]...) :: a'
- _Interface_: 'subroutine acc_pcreate(a, len)'
- 'type, dimension(:[,:]...) :: a'
- 'integer len'
+ _Interface_: `subroutine acc_present_or_create(a)'
+ `type, dimension(:[,:]...) :: a'
+ _Interface_: `subroutine acc_present_or_create(a, len)'
+ `type, dimension(:[,:]...) :: a'
+ `integer len'
+ _Interface_: `subroutine acc_pcreate(a)'
+ `type, dimension(:[,:]...) :: a'
+ _Interface_: `subroutine acc_pcreate(a, len)'
+ `type, dimension(:[,:]...) :: a'
+ `integer len'
_Reference_:
OpenACC specification v2.0 (http://www.openacc.org/), section
@@ -2179,26 +2188,26 @@ _Reference_:

File: libgomp.info, Node: acc_copyout, Next: acc_delete, Prev: acc_present_or_create, Up: OpenACC Runtime Library Routines
-5.21 'acc_copyout' - Copy device memory to host memory.
+5.21 `acc_copyout' - Copy device memory to host memory.
=======================================================
_Description_
This function copies mapped device memory to host memory which is
specified by host address A for a length LEN bytes in C/C++.
- In Fortran, two (2) forms are supported. In the first form, A
- specifies a contiguous array section. The second form A specifies
+ In Fortran, two (2) forms are supported. In the first form, A
+ specifies a contiguous array section. The second form A specifies
a variable or array element and LEN specifies the length in bytes.
_C/C++_:
- _Prototype_: 'acc_copyout(h_void *a, size_t len);'
+ _Prototype_: `acc_copyout(h_void *a, size_t len);'
_Fortran_:
- _Interface_: 'subroutine acc_copyout(a)'
- 'type, dimension(:[,:]...) :: a'
- _Interface_: 'subroutine acc_copyout(a, len)'
- 'type, dimension(:[,:]...) :: a'
- 'integer len'
+ _Interface_: `subroutine acc_copyout(a)'
+ `type, dimension(:[,:]...) :: a'
+ _Interface_: `subroutine acc_copyout(a, len)'
+ `type, dimension(:[,:]...) :: a'
+ `integer len'
_Reference_:
OpenACC specification v2.0 (http://www.openacc.org/), section
@@ -2207,26 +2216,26 @@ _Reference_:

File: libgomp.info, Node: acc_delete, Next: acc_update_device, Prev: acc_copyout, Up: OpenACC Runtime Library Routines
-5.22 'acc_delete' - Free device memory.
+5.22 `acc_delete' - Free device memory.
=======================================
_Description_
This function frees previously allocated device memory specified by
the device address A and the length of LEN bytes.
- In Fortran, two (2) forms are supported. In the first form, A
- specifies a contiguous array section. The second form A specifies
+ In Fortran, two (2) forms are supported. In the first form, A
+ specifies a contiguous array section. The second form A specifies
a variable or array element and LEN specifies the length in bytes.
_C/C++_:
- _Prototype_: 'acc_delete(h_void *a, size_t len);'
+ _Prototype_: `acc_delete(h_void *a, size_t len);'
_Fortran_:
- _Interface_: 'subroutine acc_delete(a)'
- 'type, dimension(:[,:]...) :: a'
- _Interface_: 'subroutine acc_delete(a, len)'
- 'type, dimension(:[,:]...) :: a'
- 'integer len'
+ _Interface_: `subroutine acc_delete(a)'
+ `type, dimension(:[,:]...) :: a'
+ _Interface_: `subroutine acc_delete(a, len)'
+ `type, dimension(:[,:]...) :: a'
+ `integer len'
_Reference_:
OpenACC specification v2.0 (http://www.openacc.org/), section
@@ -2235,7 +2244,7 @@ _Reference_:

File: libgomp.info, Node: acc_update_device, Next: acc_update_self, Prev: acc_delete, Up: OpenACC Runtime Library Routines
-5.23 'acc_update_device' - Update device memory from mapped host memory.
+5.23 `acc_update_device' - Update device memory from mapped host memory.
========================================================================
_Description_
@@ -2243,19 +2252,19 @@ _Description_
host memory. The host memory is specified with the host address A
and a length of LEN bytes.
- In Fortran, two (2) forms are supported. In the first form, A
- specifies a contiguous array section. The second form A specifies
+ In Fortran, two (2) forms are supported. In the first form, A
+ specifies a contiguous array section. The second form A specifies
a variable or array element and LEN specifies the length in bytes.
_C/C++_:
- _Prototype_: 'acc_update_device(h_void *a, size_t len);'
+ _Prototype_: `acc_update_device(h_void *a, size_t len);'
_Fortran_:
- _Interface_: 'subroutine acc_update_device(a)'
- 'type, dimension(:[,:]...) :: a'
- _Interface_: 'subroutine acc_update_device(a, len)'
- 'type, dimension(:[,:]...) :: a'
- 'integer len'
+ _Interface_: `subroutine acc_update_device(a)'
+ `type, dimension(:[,:]...) :: a'
+ _Interface_: `subroutine acc_update_device(a, len)'
+ `type, dimension(:[,:]...) :: a'
+ `integer len'
_Reference_:
OpenACC specification v2.0 (http://www.openacc.org/), section
@@ -2264,7 +2273,7 @@ _Reference_:

File: libgomp.info, Node: acc_update_self, Next: acc_map_data, Prev: acc_update_device, Up: OpenACC Runtime Library Routines
-5.24 'acc_update_self' - Update host memory from mapped device memory.
+5.24 `acc_update_self' - Update host memory from mapped device memory.
======================================================================
_Description_
@@ -2272,19 +2281,19 @@ _Description_
device memory. The host memory is specified with the host address
A and a length of LEN bytes.
- In Fortran, two (2) forms are supported. In the first form, A
- specifies a contiguous array section. The second form A specifies
+ In Fortran, two (2) forms are supported. In the first form, A
+ specifies a contiguous array section. The second form A specifies
a variable or array element and LEN specifies the length in bytes.
_C/C++_:
- _Prototype_: 'acc_update_self(h_void *a, size_t len);'
+ _Prototype_: `acc_update_self(h_void *a, size_t len);'
_Fortran_:
- _Interface_: 'subroutine acc_update_self(a)'
- 'type, dimension(:[,:]...) :: a'
- _Interface_: 'subroutine acc_update_self(a, len)'
- 'type, dimension(:[,:]...) :: a'
- 'integer len'
+ _Interface_: `subroutine acc_update_self(a)'
+ `type, dimension(:[,:]...) :: a'
+ _Interface_: `subroutine acc_update_self(a, len)'
+ `type, dimension(:[,:]...) :: a'
+ `integer len'
_Reference_:
OpenACC specification v2.0 (http://www.openacc.org/), section
@@ -2293,16 +2302,16 @@ _Reference_:

File: libgomp.info, Node: acc_map_data, Next: acc_unmap_data, Prev: acc_update_self, Up: OpenACC Runtime Library Routines
-5.25 'acc_map_data' - Map previously allocated device memory to host memory.
+5.25 `acc_map_data' - Map previously allocated device memory to host memory.
============================================================================
_Description_
This function maps previously allocated device and host memory.
- The device memory is specified with the device address D. The host
+ The device memory is specified with the device address D. The host
memory is specified with the host address H and a length of LEN.
_C/C++_:
- _Prototype_: 'acc_map_data(h_void *h, d_void *d, size_t len);'
+ _Prototype_: `acc_map_data(h_void *h, d_void *d, size_t len);'
_Reference_:
OpenACC specification v2.0 (http://www.openacc.org/), section
@@ -2311,15 +2320,15 @@ _Reference_:

File: libgomp.info, Node: acc_unmap_data, Next: acc_deviceptr, Prev: acc_map_data, Up: OpenACC Runtime Library Routines
-5.26 'acc_unmap_data' - Unmap device memory from host memory.
+5.26 `acc_unmap_data' - Unmap device memory from host memory.
=============================================================
_Description_
- This function unmaps previously mapped device and host memory. The
+ This function unmaps previously mapped device and host memory. The
latter specified by H.
_C/C++_:
- _Prototype_: 'acc_unmap_data(h_void *h);'
+ _Prototype_: `acc_unmap_data(h_void *h);'
_Reference_:
OpenACC specification v2.0 (http://www.openacc.org/), section
@@ -2328,7 +2337,7 @@ _Reference_:

File: libgomp.info, Node: acc_deviceptr, Next: acc_hostptr, Prev: acc_unmap_data, Up: OpenACC Runtime Library Routines
-5.27 'acc_deviceptr' - Get device pointer associated with specific host address.
+5.27 `acc_deviceptr' - Get device pointer associated with specific host address.
================================================================================
_Description_
@@ -2336,7 +2345,7 @@ _Description_
the host address specified by H.
_C/C++_:
- _Prototype_: 'void *acc_deviceptr(h_void *h);'
+ _Prototype_: `void *acc_deviceptr(h_void *h);'
_Reference_:
OpenACC specification v2.0 (http://www.openacc.org/), section
@@ -2345,7 +2354,7 @@ _Reference_:

File: libgomp.info, Node: acc_hostptr, Next: acc_is_present, Prev: acc_deviceptr, Up: OpenACC Runtime Library Routines
-5.28 'acc_hostptr' - Get host pointer associated with specific device address.
+5.28 `acc_hostptr' - Get host pointer associated with specific device address.
==============================================================================
_Description_
@@ -2353,7 +2362,7 @@ _Description_
device address specified by D.
_C/C++_:
- _Prototype_: 'void *acc_hostptr(d_void *d);'
+ _Prototype_: `void *acc_hostptr(d_void *d);'
_Reference_:
OpenACC specification v2.0 (http://www.openacc.org/), section
@@ -2362,34 +2371,34 @@ _Reference_:

File: libgomp.info, Node: acc_is_present, Next: acc_memcpy_to_device, Prev: acc_hostptr, Up: OpenACC Runtime Library Routines
-5.29 'acc_is_present' - Indicate whether host variable / array is present on device.
+5.29 `acc_is_present' - Indicate whether host variable / array is present on device.
====================================================================================
_Description_
- This function indicates whether the specified host address in A and
- a length of LEN bytes is present on the device. In C/C++, a
+ This function indicates whether the specified host address in A
+ and a length of LEN bytes is present on the device. In C/C++, a
non-zero value is returned to indicate the presence of the mapped
- memory on the device. A zero is returned to indicate the memory is
+ memory on the device. A zero is returned to indicate the memory is
not mapped on the device.
- In Fortran, two (2) forms are supported. In the first form, A
- specifies a contiguous array section. The second form A specifies
+ In Fortran, two (2) forms are supported. In the first form, A
+ specifies a contiguous array section. The second form A specifies
a variable or array element and LEN specifies the length in bytes.
- If the host memory is mapped to device memory, then a 'true' is
- returned. Otherwise, a 'false' is return to indicate the mapped
+ If the host memory is mapped to device memory, then a `true' is
+ returned. Otherwise, a `false' is return to indicate the mapped
memory is not present.
_C/C++_:
- _Prototype_: 'int acc_is_present(h_void *a, size_t len);'
+ _Prototype_: `int acc_is_present(h_void *a, size_t len);'
_Fortran_:
- _Interface_: 'function acc_is_present(a)'
- 'type, dimension(:[,:]...) :: a'
- 'logical acc_is_present'
- _Interface_: 'function acc_is_present(a, len)'
- 'type, dimension(:[,:]...) :: a'
- 'integer len'
- 'logical acc_is_present'
+ _Interface_: `function acc_is_present(a)'
+ `type, dimension(:[,:]...) :: a'
+ `logical acc_is_present'
+ _Interface_: `function acc_is_present(a, len)'
+ `type, dimension(:[,:]...) :: a'
+ `integer len'
+ `logical acc_is_present'
_Reference_:
OpenACC specification v2.0 (http://www.openacc.org/), section
@@ -2398,7 +2407,7 @@ _Reference_:

File: libgomp.info, Node: acc_memcpy_to_device, Next: acc_memcpy_from_device, Prev: acc_is_present, Up: OpenACC Runtime Library Routines
-5.30 'acc_memcpy_to_device' - Copy host memory to device memory.
+5.30 `acc_memcpy_to_device' - Copy host memory to device memory.
================================================================
_Description_
@@ -2407,8 +2416,8 @@ _Description_
of BYTES bytes.
_C/C++_:
- _Prototype_: 'acc_memcpy_to_device(d_void *dest, h_void *src, size_t
- bytes);'
+ _Prototype_: `acc_memcpy_to_device(d_void *dest, h_void *src,
+ size_t bytes);'
_Reference_:
OpenACC specification v2.0 (http://www.openacc.org/), section
@@ -2417,7 +2426,7 @@ _Reference_:

File: libgomp.info, Node: acc_memcpy_from_device, Next: acc_get_current_cuda_device, Prev: acc_memcpy_to_device, Up: OpenACC Runtime Library Routines
-5.31 'acc_memcpy_from_device' - Copy device memory to host memory.
+5.31 `acc_memcpy_from_device' - Copy device memory to host memory.
==================================================================
_Description_
@@ -2426,8 +2435,8 @@ _Description_
length of BYTES bytes.
_C/C++_:
- _Prototype_: 'acc_memcpy_from_device(d_void *dest, h_void *src,
- size_t bytes);'
+ _Prototype_: `acc_memcpy_from_device(d_void *dest, h_void *src,
+ size_t bytes);'
_Reference_:
OpenACC specification v2.0 (http://www.openacc.org/), section
@@ -2436,15 +2445,15 @@ _Reference_:

File: libgomp.info, Node: acc_get_current_cuda_device, Next: acc_get_current_cuda_context, Prev: acc_memcpy_from_device, Up: OpenACC Runtime Library Routines
-5.32 'acc_get_current_cuda_device' - Get CUDA device handle.
+5.32 `acc_get_current_cuda_device' - Get CUDA device handle.
============================================================
_Description_
- This function returns the CUDA device handle. This handle is the
+ This function returns the CUDA device handle. This handle is the
same as used by the CUDA Runtime or Driver API's.
_C/C++_:
- _Prototype_: 'void *acc_get_current_cuda_device(void);'
+ _Prototype_: `void *acc_get_current_cuda_device(void);'
_Reference_:
OpenACC specification v2.0 (http://www.openacc.org/), section
@@ -2453,15 +2462,15 @@ _Reference_:

File: libgomp.info, Node: acc_get_current_cuda_context, Next: acc_get_cuda_stream, Prev: acc_get_current_cuda_device, Up: OpenACC Runtime Library Routines
-5.33 'acc_get_current_cuda_context' - Get CUDA context handle.
+5.33 `acc_get_current_cuda_context' - Get CUDA context handle.
==============================================================
_Description_
- This function returns the CUDA context handle. This handle is the
+ This function returns the CUDA context handle. This handle is the
same as used by the CUDA Runtime or Driver API's.
_C/C++_:
- _Prototype_: 'acc_get_current_cuda_context(void);'
+ _Prototype_: `acc_get_current_cuda_context(void);'
_Reference_:
OpenACC specification v2.0 (http://www.openacc.org/), section
@@ -2470,15 +2479,15 @@ _Reference_:

File: libgomp.info, Node: acc_get_cuda_stream, Next: acc_set_cuda_stream, Prev: acc_get_current_cuda_context, Up: OpenACC Runtime Library Routines
-5.34 'acc_get_cuda_stream' - Get CUDA stream handle.
+5.34 `acc_get_cuda_stream' - Get CUDA stream handle.
====================================================
_Description_
- This function returns the CUDA stream handle. This handle is the
+ This function returns the CUDA stream handle. This handle is the
same as used by the CUDA Runtime or Driver API's.
_C/C++_:
- _Prototype_: 'acc_get_cuda_stream(void);'
+ _Prototype_: `acc_get_cuda_stream(void);'
_Reference_:
OpenACC specification v2.0 (http://www.openacc.org/), section
@@ -2487,7 +2496,7 @@ _Reference_:

File: libgomp.info, Node: acc_set_cuda_stream, Prev: acc_get_cuda_stream, Up: OpenACC Runtime Library Routines
-5.35 'acc_set_cuda_stream' - Set CUDA stream handle.
+5.35 `acc_set_cuda_stream' - Set CUDA stream handle.
====================================================
_Description_
@@ -2495,7 +2504,7 @@ _Description_
the asynchronous value specified by ASYNC.
_C/C++_:
- _Prototype_: 'acc_set_cuda_stream(int async void *stream);'
+ _Prototype_: `acc_set_cuda_stream(int async void *stream);'
_Reference_:
OpenACC specification v2.0 (http://www.openacc.org/), section
@@ -2507,9 +2516,9 @@ File: libgomp.info, Node: OpenACC Environment Variables, Next: CUDA Streams Us
6 OpenACC Environment Variables
*******************************
-The variables 'ACC_DEVICE_TYPE' and 'ACC_DEVICE_NUM' are defined by
+The variables `ACC_DEVICE_TYPE' and `ACC_DEVICE_NUM' are defined by
section 4 of the OpenACC specification in version 2.0. The variable
-'GCC_ACC_NOTIFY' is used for diagnostic purposes.
+`GCC_ACC_NOTIFY' is used for diagnostic purposes.
* Menu:
@@ -2520,7 +2529,7 @@ section 4 of the OpenACC specification in version 2.0. The variable

File: libgomp.info, Node: ACC_DEVICE_TYPE, Next: ACC_DEVICE_NUM, Up: OpenACC Environment Variables
-6.1 'ACC_DEVICE_TYPE'
+6.1 `ACC_DEVICE_TYPE'
=====================
_Reference_:
@@ -2529,7 +2538,7 @@ _Reference_:

File: libgomp.info, Node: ACC_DEVICE_NUM, Next: GCC_ACC_NOTIFY, Prev: ACC_DEVICE_TYPE, Up: OpenACC Environment Variables
-6.2 'ACC_DEVICE_NUM'
+6.2 `ACC_DEVICE_NUM'
====================
_Reference_:
@@ -2538,7 +2547,7 @@ _Reference_:

File: libgomp.info, Node: GCC_ACC_NOTIFY, Prev: ACC_DEVICE_NUM, Up: OpenACC Environment Variables
-6.3 'GCC_ACC_NOTIFY'
+6.3 `GCC_ACC_NOTIFY'
====================
_Description_:
@@ -2550,7 +2559,7 @@ File: libgomp.info, Node: CUDA Streams Usage, Next: OpenACC Library Interopera
7 CUDA Streams Usage
********************
-This applies to the 'nvptx' plugin only.
+This applies to the `nvptx' plugin only.
The library provides elements that perform asynchronous movement of
data and asynchronous operation of computing constructs. This
@@ -2559,28 +2568,28 @@ streams(1).
The primary means by that the asychronous functionality is accessed
is through the use of those OpenACC directives which make use of the
-'async' and 'wait' clauses. When the 'async' clause is first used with
-a directive, it creates a CUDA stream. If an 'async-argument' is used
-with the 'async' clause, then the stream is associated with the
-specified 'async-argument'.
+`async' and `wait' clauses. When the `async' clause is first used with
+a directive, it creates a CUDA stream. If an `async-argument' is used
+with the `async' clause, then the stream is associated with the
+specified `async-argument'.
Following the creation of an association between a CUDA stream and
-the 'async-argument' of an 'async' clause, both the 'wait' clause and
-the 'wait' directive can be used. When either the clause or directive
+the `async-argument' of an `async' clause, both the `wait' clause and
+the `wait' directive can be used. When either the clause or directive
is used after stream creation, it creates a rendezvous point whereby
execution waits until all operations associated with the
-'async-argument', that is, stream, have completed.
+`async-argument', that is, stream, have completed.
Normally, the management of the streams that are created as a result
-of using the 'async' clause, is done without any intervention by the
-caller. This implies the association between the 'async-argument' and
+of using the `async' clause, is done without any intervention by the
+caller. This implies the association between the `async-argument' and
the CUDA stream will be maintained for the lifetime of the program.
However, this association can be changed through the use of the library
-function 'acc_set_cuda_stream'. When the function 'acc_set_cuda_stream'
-is called, the CUDA stream that was originally associated with the
-'async' clause will be destroyed. Caution should be taken when changing
-the association as subsequent references to the 'async-argument' refer
-to a different CUDA stream.
+function `acc_set_cuda_stream'. When the function
+`acc_set_cuda_stream' is called, the CUDA stream that was originally
+associated with the `async' clause will be destroyed. Caution should
+be taken when changing the association as subsequent references to the
+`async-argument' refer to a different CUDA stream.
---------- Footnotes ----------
@@ -2597,38 +2606,38 @@ File: libgomp.info, Node: OpenACC Library Interoperability, Next: The libgomp
================
The OpenACC library uses the CUDA Driver API, and may interact with
-programs that use the Runtime library directly, or another library based
-on the Runtime library, e.g., CUBLAS(1). This chapter describes the use
-cases and what changes are required in order to use both the OpenACC
-library and the CUBLAS and Runtime libraries within a program.
+programs that use the Runtime library directly, or another library
+based on the Runtime library, e.g., CUBLAS(1). This chapter describes
+the use cases and what changes are required in order to use both the
+OpenACC library and the CUBLAS and Runtime libraries within a program.
8.2 First invocation: NVIDIA CUBLAS library API
===============================================
In this first use case (see below), a function in the CUBLAS library is
-called prior to any of the functions in the OpenACC library. More
-specifically, the function 'cublasCreate()'.
+called prior to any of the functions in the OpenACC library. More
+specifically, the function `cublasCreate()'.
When invoked, the function initializes the library and allocates the
hardware resources on the host and the device on behalf of the caller.
Once the initialization and allocation has completed, a handle is
-returned to the caller. The OpenACC library also requires
-initialization and allocation of hardware resources. Since the CUBLAS
-library has already allocated the hardware resources for the device, all
-that is left to do is to initialize the OpenACC library and acquire the
-hardware resources on the host.
+returned to the caller. The OpenACC library also requires
+initialization and allocation of hardware resources. Since the CUBLAS
+library has already allocated the hardware resources for the device,
+all that is left to do is to initialize the OpenACC library and acquire
+the hardware resources on the host.
Prior to calling the OpenACC function that initializes the library
-and allocate the host hardware resources, you need to acquire the device
-number that was allocated during the call to 'cublasCreate()'. The
-invoking of the runtime library function 'cudaGetDevice()' accomplishes
-this. Once acquired, the device number is passed along with the device
-type as parameters to the OpenACC library function
-'acc_set_device_num()'.
-
- Once the call to 'acc_set_device_num()' has completed, the OpenACC
-library uses the context that was created during the call to
-'cublasCreate()'. In other words, both libraries will be sharing the
+and allocate the host hardware resources, you need to acquire the
+device number that was allocated during the call to `cublasCreate()'.
+The invoking of the runtime library function `cudaGetDevice()'
+accomplishes this. Once acquired, the device number is passed along
+with the device type as parameters to the OpenACC library function
+`acc_set_device_num()'.
+
+ Once the call to `acc_set_device_num()' has completed, the OpenACC
+library uses the context that was created during the call to
+`cublasCreate()'. In other words, both libraries will be sharing the
same context.
/* Create the handle */
@@ -2649,35 +2658,34 @@ same context.
/* Initialize OpenACC library and use device 'dev' */
acc_set_device_num(dev, acc_device_nvidia);
-
- Use Case 1
+ Use Case 1
8.3 First invocation: OpenACC library API
=========================================
In this second use case (see below), a function in the OpenACC library
-is called prior to any of the functions in the CUBLAS library. More
-specificially, the function 'acc_set_device_num()'.
+is called prior to any of the functions in the CUBLAS library. More
+specificially, the function `acc_set_device_num()'.
- In the use case presented here, the function 'acc_set_device_num()'
+ In the use case presented here, the function `acc_set_device_num()'
is used to both initialize the OpenACC library and allocate the hardware
-resources on the host and the device. In the call to the function, the
-call parameters specify which device to use and what device type to use,
-i.e., 'acc_device_nvidia'. It should be noted that this is but one
+resources on the host and the device. In the call to the function, the
+call parameters specify which device to use and what device type to
+use, i.e., `acc_device_nvidia'. It should be noted that this is but one
method to initialize the OpenACC library and allocate the appropriate
-hardware resources. Other methods are available through the use of
+hardware resources. Other methods are available through the use of
environment variables and these will be discussed in the next section.
- Once the call to 'acc_set_device_num()' has completed, other OpenACC
+ Once the call to `acc_set_device_num()' has completed, other OpenACC
functions can be called as seen with multiple calls being made to
-'acc_copyin()'. In addition, calls can be made to functions in the
-CUBLAS library. In the use case a call to 'cublasCreate()' is made
-subsequent to the calls to 'acc_copyin()'. As seen in the previous use
-case, a call to 'cublasCreate()' initializes the CUBLAS library and
+`acc_copyin()'. In addition, calls can be made to functions in the
+CUBLAS library. In the use case a call to `cublasCreate()' is made
+subsequent to the calls to `acc_copyin()'. As seen in the previous use
+case, a call to `cublasCreate()' initializes the CUBLAS library and
allocates the hardware resources on the host and the device. However,
-since the device has already been allocated, 'cublasCreate()' will only
+since the device has already been allocated, `cublasCreate()' will only
initialize the CUBLAS library and allocate the appropriate hardware
-resources on the host. The context that was created as part of the
+resources on the host. The context that was created as part of the
OpenACC initialization is shared with the CUBLAS library, similarly to
the first use case.
@@ -2719,35 +2727,34 @@ the first use case.
/* Copy the results from the device */
acc_memcpy_from_device(&h_Y1[0], d_Y, N * sizeof (float));
-
- Use Case 2
+ Use Case 2
8.4 OpenACC library and environment variables
=============================================
There are two environment variables associated with the OpenACC library
that may be used to control the device type and device number:
-'ACC_DEVICE_TYPE' and 'ACC_DEVICE_NUM', respecively. These two
+`ACC_DEVICE_TYPE' and `ACC_DEVICE_NUM', respecively. These two
environement variables can be used as an alternative to calling
-'acc_set_device_num()'. As seen in the second use case, the device type
-and device number were specified using 'acc_set_device_num()'. If
+`acc_set_device_num()'. As seen in the second use case, the device type
+and device number were specified using `acc_set_device_num()'. If
however, the aforementioned environment variables were set, then the
-call to 'acc_set_device_num()' would not be required.
+call to `acc_set_device_num()' would not be required.
- The use of the environment variables is only relevant when an OpenACC
-function is called prior to a call to 'cudaCreate()'. If 'cudaCreate()'
-is called prior to a call to an OpenACC function, then you must call
-'acc_set_device_num()'(2)
+ The use of the environment variables is only relevant when an
+OpenACC function is called prior to a call to `cudaCreate()'. If
+`cudaCreate()' is called prior to a call to an OpenACC function, then
+you must call `acc_set_device_num()'(2)
---------- Footnotes ----------
(1) See section 2.26, "Interactions with the CUDA Driver API" in
"CUDA Runtime API", Version 5.5, and section 2.27, "VDPAU
-Interoperability", in "CUDA Driver API", TRM-06703-001, Version 5.5, for
-additional information on library interoperability.
+Interoperability", in "CUDA Driver API", TRM-06703-001, Version 5.5,
+for additional information on library interoperability.
- (2) More complete information about 'ACC_DEVICE_TYPE' and
-'ACC_DEVICE_NUM' can be found in sections 4.1 and 4.2 of the OpenACC
+ (2) More complete information about `ACC_DEVICE_TYPE' and
+`ACC_DEVICE_NUM' can be found in sections 4.1 and 4.2 of the OpenACC
(http://www.openacc.org/) Application Programming Interface”, Version
2.0.
@@ -2757,8 +2764,8 @@ File: libgomp.info, Node: The libgomp ABI, Next: Reporting Bugs, Prev: OpenAC
9 The libgomp ABI
*****************
-The following sections present notes on the external ABI as presented by
-libgomp. Only maintainers should need them.
+The following sections present notes on the external ABI as presented
+by libgomp. Only maintainers should need them.
* Menu:
@@ -2819,7 +2826,7 @@ File: libgomp.info, Node: Implementing ATOMIC construct, Next: Implementing FL
9.3 Implementing ATOMIC construct
=================================
-The target should implement the '__sync' builtins.
+The target should implement the `__sync' builtins.
Failing that we could add
@@ -2835,7 +2842,7 @@ File: libgomp.info, Node: Implementing FLUSH construct, Next: Implementing BAR
9.4 Implementing FLUSH construct
================================
-Expands to the '__sync_synchronize' builtin.
+Expands to the `__sync_synchronize' builtin.

File: libgomp.info, Node: Implementing BARRIER construct, Next: Implementing THREADPRIVATE construct, Prev: Implementing FLUSH construct, Up: The libgomp ABI
@@ -2851,10 +2858,10 @@ File: libgomp.info, Node: Implementing THREADPRIVATE construct, Next: Implemen
9.6 Implementing THREADPRIVATE construct
========================================
-In _most_ cases we can map this directly to '__thread'. Except that OMP
-allows constructors for C++ objects. We can either refuse to support
-this (how often is it used?) or we can implement something akin to
-.ctors.
+In _most_ cases we can map this directly to `__thread'. Except that
+OMP allows constructors for C++ objects. We can either refuse to
+support this (how often is it used?) or we can implement something akin
+to .ctors.
Even more ideally, this ctor feature is handled by extensions to the
main pthreads library. Failing that, we can have a set of entry points
@@ -2886,8 +2893,8 @@ copy in values for scalar and "small" structs; copy in addresses for
others TREE_ADDRESSABLE types. In the subfunction, copy the value into
the local variable.
- It is not clear what to do with bare FOR or SECTION blocks. The only
-thing I can figure is that we do something like:
+ It is not clear what to do with bare FOR or SECTION blocks. The
+only thing I can figure is that we do something like:
#pragma omp for firstprivate(x) lastprivate(y)
for (int i = 0; i < n; ++i)
@@ -2905,8 +2912,8 @@ thing I can figure is that we do something like:
}
where the "x=x" and "y=y" assignments actually have different uids
-for the two variables, i.e. not something you could write directly in
-C. Presumably this only makes sense if the "outer" x and y are global
+for the two variables, i.e. not something you could write directly in
+C. Presumably this only makes sense if the "outer" x and y are global
variables.
COPYPRIVATE would work the same way, except the structure broadcast
@@ -2919,10 +2926,10 @@ File: libgomp.info, Node: Implementing REDUCTION clause, Next: Implementing PA
=================================
The private struct mentioned in the previous section should have a
-pointer to an array of the type of the variable, indexed by the thread's
-TEAM_ID. The thread stores its final value into the array, and after
-the barrier, the master thread iterates over the array to collect the
-values.
+pointer to an array of the type of the variable, indexed by the
+thread's TEAM_ID. The thread stores its final value into the array,
+and after the barrier, the master thread iterates over the array to
+collect the values.

File: libgomp.info, Node: Implementing PARALLEL construct, Next: Implementing FOR construct, Prev: Implementing REDUCTION clause, Up: The libgomp ABI
@@ -2959,14 +2966,14 @@ FIRSTPRIVATE et al.
The NUM_THREADS argument is 1 if an IF clause is present and false,
or the value of the NUM_THREADS clause, if present, or 0.
- The function needs to create the appropriate number of threads and/or
-launch them from the dock. It needs to create the team structure and
-assign team ids.
+ The function needs to create the appropriate number of threads
+and/or launch them from the dock. It needs to create the team
+structure and assign team ids.
void GOMP_parallel_end (void)
Tears down the team and returns us to the previous
-'omp_in_parallel()' state.
+`omp_in_parallel()' state.

File: libgomp.info, Node: Implementing FOR construct, Next: Implementing ORDERED construct, Prev: Implementing PARALLEL construct, Up: The libgomp ABI
@@ -3018,14 +3025,14 @@ non-constant STEP, there isn't really. We're explicitly allowed to
evaluate it as many times as we want, and any variables involved should
automatically be handled as PRIVATE or SHARED like any other variables.
So the expression should remain evaluable in the subfunction. We can
-also pull it into a local variable if we like, but since its supposed to
-remain unchanged, we can also not if we like.
+also pull it into a local variable if we like, but since its supposed
+to remain unchanged, we can also not if we like.
- If we have SCHEDULE(STATIC), and no ORDERED, then we ought to be able
-to get away with no work-sharing context at all, since we can simply
-perform the arithmetic directly in each thread to divide up the
-iterations. Which would mean that we wouldn't need to call any of these
-routines.
+ If we have SCHEDULE(STATIC), and no ORDERED, then we ought to be
+able to get away with no work-sharing context at all, since we can
+simply perform the arithmetic directly in each thread to divide up the
+iterations. Which would mean that we wouldn't need to call any of
+these routines.
There are separate routines for handling loops with an ORDERED
clause. Bookkeeping for that is non-trivial...
@@ -3127,8 +3134,8 @@ File: libgomp.info, Node: Reporting Bugs, Next: Copying, Prev: The libgomp AB
Bugs in the GNU Offloading and Multi Processing Runtime Library should
be reported via Bugzilla (http://gcc.gnu.org/bugzilla/). Please add
-"openacc", or "openmp", or both to the keywords field in the bug report,
-as appropriate.
+"openacc", or "openmp", or both to the keywords field in the bug
+report, as appropriate.

File: libgomp.info, Node: Copying, Next: GNU Free Documentation License, Prev: Reporting Bugs, Up: Top
@@ -3138,7 +3145,7 @@ GNU General Public License
Version 3, 29 June 2007
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
+ Copyright (C) 2007 Free Software Foundation, Inc. `http://fsf.org/'
Everyone is permitted to copy and distribute verbatim copies of this
license document, but changing it is not allowed.
@@ -3166,9 +3173,9 @@ want it, that you can change the software or use pieces of it in new
free programs, and that you know you can do these things.
To protect your rights, we need to prevent others from denying you
-these rights or asking you to surrender the rights. Therefore, you have
-certain responsibilities if you distribute copies of the software, or if
-you modify it: responsibilities to respect the freedom of others.
+these rights or asking you to surrender the rights. Therefore, you
+have certain responsibilities if you distribute copies of the software,
+or if you modify it: responsibilities to respect the freedom of others.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must pass on to the recipients the same
@@ -3187,15 +3194,16 @@ changed, so that their problems will not be attributed erroneously to
authors of previous versions.
Some devices are designed to deny users access to install or run
-modified versions of the software inside them, although the manufacturer
-can do so. This is fundamentally incompatible with the aim of
-protecting users' freedom to change the software. The systematic
-pattern of such abuse occurs in the area of products for individuals to
-use, which is precisely where it is most unacceptable. Therefore, we
-have designed this version of the GPL to prohibit the practice for those
-products. If such problems arise substantially in other domains, we
-stand ready to extend this provision to those domains in future versions
-of the GPL, as needed to protect the freedom of users.
+modified versions of the software inside them, although the
+manufacturer can do so. This is fundamentally incompatible with the
+aim of protecting users' freedom to change the software. The
+systematic pattern of such abuse occurs in the area of products for
+individuals to use, which is precisely where it is most unacceptable.
+Therefore, we have designed this version of the GPL to prohibit the
+practice for those products. If such problems arise substantially in
+other domains, we stand ready to extend this provision to those domains
+in future versions of the GPL, as needed to protect the freedom of
+users.
Finally, every program is threatened constantly by software patents.
States should not allow patents to restrict development and use of
@@ -3232,8 +3240,8 @@ TERMS AND CONDITIONS
To "propagate" a work means to do anything with it that, without
permission, would make you directly or secondarily liable for
- infringement under applicable copyright law, except executing it on
- a computer or modifying a private copy. Propagation includes
+ infringement under applicable copyright law, except executing it
+ on a computer or modifying a private copy. Propagation includes
copying, distribution (with or without modification), making
available to the public, and in some countries other activities as
well.
@@ -3247,8 +3255,8 @@ TERMS AND CONDITIONS
to the extent that it includes a convenient and prominently visible
feature that (1) displays an appropriate copyright notice, and (2)
tells the user that there is no warranty for the work (except to
- the extent that warranties are provided), that licensees may convey
- the work under this License, and how to view a copy of this
+ the extent that warranties are provided), that licensees may
+ convey the work under this License, and how to view a copy of this
License. If the interface presents a list of user commands or
options, such as a menu, a prominent item in the list meets this
criterion.
@@ -3256,8 +3264,8 @@ TERMS AND CONDITIONS
1. Source Code.
The "source code" for a work means the preferred form of the work
- for making modifications to it. "Object code" means any non-source
- form of a work.
+ for making modifications to it. "Object code" means any
+ non-source form of a work.
A "Standard Interface" means an interface that either is an
official standard defined by a recognized standards body, or, in
@@ -3268,10 +3276,10 @@ TERMS AND CONDITIONS
The "System Libraries" of an executable work include anything,
other than the work as a whole, that (a) is included in the normal
form of packaging a Major Component, but which is not part of that
- Major Component, and (b) serves only to enable use of the work with
- that Major Component, or to implement a Standard Interface for
- which an implementation is available to the public in source code
- form. A "Major Component", in this context, means a major
+ Major Component, and (b) serves only to enable use of the work
+ with that Major Component, or to implement a Standard Interface
+ for which an implementation is available to the public in source
+ code form. A "Major Component", in this context, means a major
essential component (kernel, window system, and so on) of the
specific operating system (if any) on which the executable work
runs, or a compiler used to produce the work, or an object code
@@ -3279,15 +3287,15 @@ TERMS AND CONDITIONS
The "Corresponding Source" for a work in object code form means all
the source code needed to generate, install, and (for an executable
- work) run the object code and to modify the work, including scripts
- to control those activities. However, it does not include the
- work's System Libraries, or general-purpose tools or generally
+ work) run the object code and to modify the work, including
+ scripts to control those activities. However, it does not include
+ the work's System Libraries, or general-purpose tools or generally
available free programs which are used unmodified in performing
those activities but which are not part of the work. For example,
- Corresponding Source includes interface definition files associated
- with source files for the work, and the source code for shared
- libraries and dynamically linked subprograms that the work is
- specifically designed to require, such as by intimate data
+ Corresponding Source includes interface definition files
+ associated with source files for the work, and the source code for
+ shared libraries and dynamically linked subprograms that the work
+ is specifically designed to require, such as by intimate data
communication or control flow between those subprograms and other
parts of the work.
@@ -3304,22 +3312,22 @@ TERMS AND CONDITIONS
copyright on the Program, and are irrevocable provided the stated
conditions are met. This License explicitly affirms your unlimited
permission to run the unmodified Program. The output from running
- a covered work is covered by this License only if the output, given
- its content, constitutes a covered work. This License acknowledges
- your rights of fair use or other equivalent, as provided by
- copyright law.
+ a covered work is covered by this License only if the output,
+ given its content, constitutes a covered work. This License
+ acknowledges your rights of fair use or other equivalent, as
+ provided by copyright law.
You may make, run and propagate covered works that you do not
convey, without conditions so long as your license otherwise
remains in force. You may convey covered works to others for the
- sole purpose of having them make modifications exclusively for you,
- or provide you with facilities for running those works, provided
- that you comply with the terms of this License in conveying all
- material for which you do not control copyright. Those thus making
- or running the covered works for you must do so exclusively on your
- behalf, under your direction and control, on terms that prohibit
- them from making any copies of your copyrighted material outside
- their relationship with you.
+ sole purpose of having them make modifications exclusively for
+ you, or provide you with facilities for running those works,
+ provided that you comply with the terms of this License in
+ conveying all material for which you do not control copyright.
+ Those thus making or running the covered works for you must do so
+ exclusively on your behalf, under your direction and control, on
+ terms that prohibit them from making any copies of your
+ copyrighted material outside their relationship with you.
Conveying under any other circumstances is permitted solely under
the conditions stated below. Sublicensing is not allowed; section
@@ -3336,8 +3344,8 @@ TERMS AND CONDITIONS
When you convey a covered work, you waive any legal power to forbid
circumvention of technological measures to the extent such
circumvention is effected by exercising rights under this License
- with respect to the covered work, and you disclaim any intention to
- limit operation or modification of the work as a means of
+ with respect to the covered work, and you disclaim any intention
+ to limit operation or modification of the work as a means of
enforcing, against the work's users, your or third parties' legal
rights to forbid circumvention of technological measures.
@@ -3407,8 +3415,8 @@ TERMS AND CONDITIONS
b. Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by a
- written offer, valid for at least three years and valid for as
- long as you offer spare parts or customer support for that
+ written offer, valid for at least three years and valid for
+ as long as you offer spare parts or customer support for that
product model, to give anyone who possesses the object code
either (1) a copy of the Corresponding Source for all the
software in the product that is covered by this License, on a
@@ -3418,31 +3426,32 @@ TERMS AND CONDITIONS
to copy the Corresponding Source from a network server at no
charge.
- c. Convey individual copies of the object code with a copy of the
- written offer to provide the Corresponding Source. This
+ c. Convey individual copies of the object code with a copy of
+ the written offer to provide the Corresponding Source. This
alternative is allowed only occasionally and noncommercially,
and only if you received the object code with such an offer,
in accord with subsection 6b.
d. Convey the object code by offering access from a designated
- place (gratis or for a charge), and offer equivalent access to
- the Corresponding Source in the same way through the same
+ place (gratis or for a charge), and offer equivalent access
+ to the Corresponding Source in the same way through the same
place at no further charge. You need not require recipients
to copy the Corresponding Source along with the object code.
If the place to copy the object code is a network server, the
- Corresponding Source may be on a different server (operated by
- you or a third party) that supports equivalent copying
- facilities, provided you maintain clear directions next to the
- object code saying where to find the Corresponding Source.
+ Corresponding Source may be on a different server (operated
+ by you or a third party) that supports equivalent copying
+ facilities, provided you maintain clear directions next to
+ the object code saying where to find the Corresponding Source.
Regardless of what server hosts the Corresponding Source, you
- remain obligated to ensure that it is available for as long as
- needed to satisfy these requirements.
+ remain obligated to ensure that it is available for as long
+ as needed to satisfy these requirements.
e. Convey the object code using peer-to-peer transmission,
provided you inform other peers where the object code and
Corresponding Source of the work are being offered to the
general public at no charge under subsection 6d.
+
A separable portion of the object code, whose source code is
excluded from the Corresponding Source as a System Library, need
not be included in conveying the object code work.
@@ -3450,8 +3459,8 @@ TERMS AND CONDITIONS
A "User Product" is either (1) a "consumer product", which means
any tangible personal property which is normally used for personal,
family, or household purposes, or (2) anything designed or sold for
- incorporation into a dwelling. In determining whether a product is
- a consumer product, doubtful cases shall be resolved in favor of
+ incorporation into a dwelling. In determining whether a product
+ is a consumer product, doubtful cases shall be resolved in favor of
coverage. For a particular product received by a particular user,
"normally used" refers to a typical or common use of that class of
product, regardless of the status of the particular user or of the
@@ -3482,11 +3491,11 @@ TERMS AND CONDITIONS
The requirement to provide Installation Information does not
include a requirement to continue to provide support service,
- warranty, or updates for a work that has been modified or installed
- by the recipient, or for the User Product in which it has been
- modified or installed. Access to a network may be denied when the
- modification itself materially and adversely affects the operation
- of the network or violates the rules and protocols for
+ warranty, or updates for a work that has been modified or
+ installed by the recipient, or for the User Product in which it
+ has been modified or installed. Access to a network may be denied
+ when the modification itself materially and adversely affects the
+ operation of the network or violates the rules and protocols for
communication across the network.
Corresponding Source conveyed, and Installation Information
@@ -3516,8 +3525,8 @@ TERMS AND CONDITIONS
Notwithstanding any other provision of this License, for material
you add to a covered work, you may (if authorized by the copyright
- holders of that material) supplement the terms of this License with
- terms:
+ holders of that material) supplement the terms of this License
+ with terms:
a. Disclaiming warranty or limiting liability differently from
the terms of sections 15 and 16 of this License; or
@@ -3527,8 +3536,9 @@ TERMS AND CONDITIONS
Legal Notices displayed by works containing it; or
c. Prohibiting misrepresentation of the origin of that material,
- or requiring that modified versions of such material be marked
- in reasonable ways as different from the original version; or
+ or requiring that modified versions of such material be
+ marked in reasonable ways as different from the original
+ version; or
d. Limiting the use for publicity purposes of names of licensors
or authors of the material; or
@@ -3547,10 +3557,11 @@ TERMS AND CONDITIONS
you received it, or any part of it, contains a notice stating that
it is governed by this License along with a term that is a further
restriction, you may remove that term. If a license document
- contains a further restriction but permits relicensing or conveying
- under this License, you may add to a covered work material governed
- by the terms of that license document, provided that the further
- restriction does not survive such relicensing or conveying.
+ contains a further restriction but permits relicensing or
+ conveying under this License, you may add to a covered work
+ material governed by the terms of that license document, provided
+ that the further restriction does not survive such relicensing or
+ conveying.
If you add terms to a covered work in accord with this section, you
must place, in the relevant source files, a statement of the
@@ -3566,13 +3577,13 @@ TERMS AND CONDITIONS
You may not propagate or modify a covered work except as expressly
provided under this License. Any attempt otherwise to propagate or
modify it is void, and will automatically terminate your rights
- under this License (including any patent licenses granted under the
- third paragraph of section 11).
+ under this License (including any patent licenses granted under
+ the third paragraph of section 11).
However, if you cease all violation of this License, then your
license from a particular copyright holder is reinstated (a)
- provisionally, unless and until the copyright holder explicitly and
- finally terminates your license, and (b) permanently, if the
+ provisionally, unless and until the copyright holder explicitly
+ and finally terminates your license, and (b) permanently, if the
copyright holder fails to notify you of the violation by some
reasonable means prior to 60 days after the cessation.
@@ -3584,10 +3595,10 @@ TERMS AND CONDITIONS
after your receipt of the notice.
Termination of your rights under this section does not terminate
- the licenses of parties who have received copies or rights from you
- under this License. If your rights have been terminated and not
- permanently reinstated, you do not qualify to receive new licenses
- for the same material under section 10.
+ the licenses of parties who have received copies or rights from
+ you under this License. If your rights have been terminated and
+ not permanently reinstated, you do not qualify to receive new
+ licenses for the same material under section 10.
9. Acceptance Not Required for Having Copies.
@@ -3601,7 +3612,7 @@ TERMS AND CONDITIONS
by modifying or propagating a covered work, you indicate your
acceptance of this License to do so.
- 10. Automatic Licensing of Downstream Recipients.
+ 10. Automatic Licensing of Downstream Recipients.
Each time you convey a covered work, the recipient automatically
receives a license from the original licensors, to run, modify and
@@ -3615,21 +3626,21 @@ TERMS AND CONDITIONS
covered work results from an entity transaction, each party to that
transaction who receives a copy of the work also receives whatever
licenses to the work the party's predecessor in interest had or
- could give under the previous paragraph, plus a right to possession
- of the Corresponding Source of the work from the predecessor in
- interest, if the predecessor has it or can get it with reasonable
- efforts.
+ could give under the previous paragraph, plus a right to
+ possession of the Corresponding Source of the work from the
+ predecessor in interest, if the predecessor has it or can get it
+ with reasonable efforts.
You may not impose any further restrictions on the exercise of the
rights granted or affirmed under this License. For example, you
- may not impose a license fee, royalty, or other charge for exercise
- of rights granted under this License, and you may not initiate
- litigation (including a cross-claim or counterclaim in a lawsuit)
- alleging that any patent claim is infringed by making, using,
- selling, offering for sale, or importing the Program or any portion
- of it.
+ may not impose a license fee, royalty, or other charge for
+ exercise of rights granted under this License, and you may not
+ initiate litigation (including a cross-claim or counterclaim in a
+ lawsuit) alleging that any patent claim is infringed by making,
+ using, selling, offering for sale, or importing the Program or any
+ portion of it.
- 11. Patents.
+ 11. Patents.
A "contributor" is a copyright holder who authorizes use under this
License of the Program or a work on which the Program is based.
@@ -3649,15 +3660,15 @@ TERMS AND CONDITIONS
Each contributor grants you a non-exclusive, worldwide,
royalty-free patent license under the contributor's essential
patent claims, to make, use, sell, offer for sale, import and
- otherwise run, modify and propagate the contents of its contributor
- version.
+ otherwise run, modify and propagate the contents of its
+ contributor version.
In the following three paragraphs, a "patent license" is any
express agreement or commitment, however denominated, not to
enforce a patent (such as an express permission to practice a
- patent or covenant not to sue for patent infringement). To "grant"
- such a patent license to a party means to make such an agreement or
- commitment not to enforce a patent against the party.
+ patent or covenant not to sue for patent infringement). To
+ "grant" such a patent license to a party means to make such an
+ agreement or commitment not to enforce a patent against the party.
If you convey a covered work, knowingly relying on a patent
license, and the Corresponding Source of the work is not available
@@ -3687,35 +3698,36 @@ TERMS AND CONDITIONS
conditioned on the non-exercise of one or more of the rights that
are specifically granted under this License. You may not convey a
covered work if you are a party to an arrangement with a third
- party that is in the business of distributing software, under which
- you make payment to the third party based on the extent of your
- activity of conveying the work, and under which the third party
- grants, to any of the parties who would receive the covered work
- from you, a discriminatory patent license (a) in connection with
- copies of the covered work conveyed by you (or copies made from
- those copies), or (b) primarily for and in connection with specific
- products or compilations that contain the covered work, unless you
- entered into that arrangement, or that patent license was granted,
- prior to 28 March 2007.
+ party that is in the business of distributing software, under
+ which you make payment to the third party based on the extent of
+ your activity of conveying the work, and under which the third
+ party grants, to any of the parties who would receive the covered
+ work from you, a discriminatory patent license (a) in connection
+ with copies of the covered work conveyed by you (or copies made
+ from those copies), or (b) primarily for and in connection with
+ specific products or compilations that contain the covered work,
+ unless you entered into that arrangement, or that patent license
+ was granted, prior to 28 March 2007.
Nothing in this License shall be construed as excluding or limiting
any implied license or other defenses to infringement that may
otherwise be available to you under applicable patent law.
- 12. No Surrender of Others' Freedom.
+ 12. No Surrender of Others' Freedom.
- If conditions are imposed on you (whether by court order, agreement
- or otherwise) that contradict the conditions of this License, they
- do not excuse you from the conditions of this License. If you
- cannot convey a covered work so as to satisfy simultaneously your
- obligations under this License and any other pertinent obligations,
- then as a consequence you may not convey it at all. For example,
- if you agree to terms that obligate you to collect a royalty for
- further conveying from those to whom you convey the Program, the
- only way you could satisfy both those terms and this License would
- be to refrain entirely from conveying the Program.
+ If conditions are imposed on you (whether by court order,
+ agreement or otherwise) that contradict the conditions of this
+ License, they do not excuse you from the conditions of this
+ License. If you cannot convey a covered work so as to satisfy
+ simultaneously your obligations under this License and any other
+ pertinent obligations, then as a consequence you may not convey it
+ at all. For example, if you agree to terms that obligate you to
+ collect a royalty for further conveying from those to whom you
+ convey the Program, the only way you could satisfy both those
+ terms and this License would be to refrain entirely from conveying
+ the Program.
- 13. Use with the GNU Affero General Public License.
+ 13. Use with the GNU Affero General Public License.
Notwithstanding any other provision of this License, you have
permission to link or combine any covered work with a work licensed
@@ -3726,21 +3738,22 @@ TERMS AND CONDITIONS
General Public License, section 13, concerning interaction through
a network will apply to the combination as such.
- 14. Revised Versions of this License.
+ 14. Revised Versions of this License.
The Free Software Foundation may publish revised and/or new
- versions of the GNU General Public License from time to time. Such
- new versions will be similar in spirit to the present version, but
- may differ in detail to address new problems or concerns.
+ versions of the GNU General Public License from time to time.
+ Such new versions will be similar in spirit to the present
+ version, but may differ in detail to address new problems or
+ concerns.
Each version is given a distinguishing version number. If the
Program specifies that a certain numbered version of the GNU
General Public License "or any later version" applies to it, you
have the option of following the terms and conditions either of
- that numbered version or of any later version published by the Free
- Software Foundation. If the Program does not specify a version
- number of the GNU General Public License, you may choose any
- version ever published by the Free Software Foundation.
+ that numbered version or of any later version published by the
+ Free Software Foundation. If the Program does not specify a
+ version number of the GNU General Public License, you may choose
+ any version ever published by the Free Software Foundation.
If the Program specifies that a proxy can decide which future
versions of the GNU General Public License can be used, that
@@ -3752,24 +3765,24 @@ TERMS AND CONDITIONS
author or copyright holder as a result of your choosing to follow a
later version.
- 15. Disclaimer of Warranty.
+ 15. Disclaimer of Warranty.
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
- APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE
+ APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE
COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS"
WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED,
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE
+ MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE
RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.
SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL
NECESSARY SERVICING, REPAIR OR CORRECTION.
- 16. Limitation of Liability.
+ 16. Limitation of Liability.
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES
- AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR
- DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+ AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU
+ FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE
THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA
BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
@@ -3777,7 +3790,7 @@ TERMS AND CONDITIONS
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF
THE POSSIBILITY OF SUCH DAMAGES.
- 17. Interpretation of Sections 15 and 16.
+ 17. Interpretation of Sections 15 and 16.
If the disclaimer of warranty and limitation of liability provided
above cannot be given local legal effect according to their terms,
@@ -3786,6 +3799,7 @@ TERMS AND CONDITIONS
connection with the Program, unless a warranty or assumption of
liability accompanies a copy of the Program in return for a fee.
+
END OF TERMS AND CONDITIONS
===========================
@@ -3816,7 +3830,7 @@ state the exclusion of warranty; and each file should have at least the
General Public License for more details.
You should have received a copy of the GNU General Public License
- along with this program. If not, see <http://www.gnu.org/licenses/>.
+ along with this program. If not, see `http://www.gnu.org/licenses/'.
Also add information on how to contact you by electronic and paper
mail.
@@ -3825,11 +3839,11 @@ mail.
notice like this when it starts in an interactive mode:
PROGRAM Copyright (C) YEAR NAME OF AUTHOR
- This program comes with ABSOLUTELY NO WARRANTY; for details type 'show w'.
+ This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
- under certain conditions; type 'show c' for details.
+ under certain conditions; type `show c' for details.
- The hypothetical commands 'show w' and 'show c' should show the
+ The hypothetical commands `show w' and `show c' should show the
appropriate parts of the General Public License. Of course, your
program's commands might be different; for a GUI interface, you would
use an "about box".
@@ -3837,14 +3851,14 @@ use an "about box".
You should also get your employer (if you work as a programmer) or
school, if any, to sign a "copyright disclaimer" for the program, if
necessary. For more information on this, and how to apply and follow
-the GNU GPL, see <http://www.gnu.org/licenses/>.
+the GNU GPL, see `http://www.gnu.org/licenses/'.
The GNU General Public License does not permit incorporating your
program into proprietary programs. If your program is a subroutine
library, you may consider it more useful to permit linking proprietary
applications with the library. If this is what you want to do, use the
GNU Lesser General Public License instead of this License. But first,
-please read <http://www.gnu.org/philosophy/why-not-lgpl.html>.
+please read `http://www.gnu.org/philosophy/why-not-lgpl.html'.

File: libgomp.info, Node: GNU Free Documentation License, Next: Funding, Prev: Copying, Up: Top
@@ -3855,7 +3869,7 @@ GNU Free Documentation License
Version 1.3, 3 November 2008
Copyright (C) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc.
- <http://fsf.org/>
+ `http://fsf.org/'
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
@@ -3880,21 +3894,21 @@ GNU Free Documentation License
free program should come with manuals providing the same freedoms
that the software does. But this License is not limited to
software manuals; it can be used for any textual work, regardless
- of subject matter or whether it is published as a printed book. We
- recommend this License principally for works whose purpose is
+ of subject matter or whether it is published as a printed book.
+ We recommend this License principally for works whose purpose is
instruction or reference.
1. APPLICABILITY AND DEFINITIONS
This License applies to any manual or other work, in any medium,
- that contains a notice placed by the copyright holder saying it can
- be distributed under the terms of this License. Such a notice
+ that contains a notice placed by the copyright holder saying it
+ can be distributed under the terms of this License. Such a notice
grants a world-wide, royalty-free license, unlimited in duration,
to use that work under the conditions stated herein. The
"Document", below, refers to any such manual or work. Any member
- of the public is a licensee, and is addressed as "you". You accept
- the license if you copy, modify or distribute the work in a way
- requiring permission under copyright law.
+ of the public is a licensee, and is addressed as "you". You
+ accept the license if you copy, modify or distribute the work in a
+ way requiring permission under copyright law.
A "Modified Version" of the Document means any work containing the
Document or a portion of it, either copied verbatim, or with
@@ -3912,12 +3926,12 @@ GNU Free Documentation License
regarding them.
The "Invariant Sections" are certain Secondary Sections whose
- titles are designated, as being those of Invariant Sections, in the
- notice that says that the Document is released under this License.
- If a section does not fit the above definition of Secondary then it
- is not allowed to be designated as Invariant. The Document may
- contain zero Invariant Sections. If the Document does not identify
- any Invariant Sections then there are none.
+ titles are designated, as being those of Invariant Sections, in
+ the notice that says that the Document is released under this
+ License. If a section does not fit the above definition of
+ Secondary then it is not allowed to be designated as Invariant.
+ The Document may contain zero Invariant Sections. If the Document
+ does not identify any Invariant Sections then there are none.
The "Cover Texts" are certain short passages of text that are
listed, as Front-Cover Texts or Back-Cover Texts, in the notice
@@ -3928,27 +3942,27 @@ GNU Free Documentation License
A "Transparent" copy of the Document means a machine-readable copy,
represented in a format whose specification is available to the
general public, that is suitable for revising the document
- straightforwardly with generic text editors or (for images composed
- of pixels) generic paint programs or (for drawings) some widely
- available drawing editor, and that is suitable for input to text
- formatters or for automatic translation to a variety of formats
- suitable for input to text formatters. A copy made in an otherwise
- Transparent file format whose markup, or absence of markup, has
- been arranged to thwart or discourage subsequent modification by
- readers is not Transparent. An image format is not Transparent if
- used for any substantial amount of text. A copy that is not
- "Transparent" is called "Opaque".
+ straightforwardly with generic text editors or (for images
+ composed of pixels) generic paint programs or (for drawings) some
+ widely available drawing editor, and that is suitable for input to
+ text formatters or for automatic translation to a variety of
+ formats suitable for input to text formatters. A copy made in an
+ otherwise Transparent file format whose markup, or absence of
+ markup, has been arranged to thwart or discourage subsequent
+ modification by readers is not Transparent. An image format is
+ not Transparent if used for any substantial amount of text. A
+ copy that is not "Transparent" is called "Opaque".
Examples of suitable formats for Transparent copies include plain
ASCII without markup, Texinfo input format, LaTeX input format,
- SGML or XML using a publicly available DTD, and standard-conforming
- simple HTML, PostScript or PDF designed for human modification.
- Examples of transparent image formats include PNG, XCF and JPG.
- Opaque formats include proprietary formats that can be read and
- edited only by proprietary word processors, SGML or XML for which
- the DTD and/or processing tools are not generally available, and
- the machine-generated HTML, PostScript or PDF produced by some word
- processors for output purposes only.
+ SGML or XML using a publicly available DTD, and
+ standard-conforming simple HTML, PostScript or PDF designed for
+ human modification. Examples of transparent image formats include
+ PNG, XCF and JPG. Opaque formats include proprietary formats that
+ can be read and edited only by proprietary word processors, SGML or
+ XML for which the DTD and/or processing tools are not generally
+ available, and the machine-generated HTML, PostScript or PDF
+ produced by some word processors for output purposes only.
The "Title Page" means, for a printed book, the title page itself,
plus such following pages as are needed to hold, legibly, the
@@ -3986,8 +4000,8 @@ GNU Free Documentation License
may not use technical measures to obstruct or control the reading
or further copying of the copies you make or distribute. However,
you may accept compensation in exchange for copies. If you
- distribute a large enough number of copies you must also follow the
- conditions in section 3.
+ distribute a large enough number of copies you must also follow
+ the conditions in section 3.
You may also lend copies, under the same conditions stated above,
and you may publicly display copies.
@@ -4001,11 +4015,12 @@ GNU Free Documentation License
these Cover Texts: Front-Cover Texts on the front cover, and
Back-Cover Texts on the back cover. Both covers must also clearly
and legibly identify you as the publisher of these copies. The
- front cover must present the full title with all words of the title
- equally prominent and visible. You may add other material on the
- covers in addition. Copying with changes limited to the covers, as
- long as they preserve the title of the Document and satisfy these
- conditions, can be treated as verbatim copying in other respects.
+ front cover must present the full title with all words of the
+ title equally prominent and visible. You may add other material
+ on the covers in addition. Copying with changes limited to the
+ covers, as long as they preserve the title of the Document and
+ satisfy these conditions, can be treated as verbatim copying in
+ other respects.
If the required texts for either cover are too voluminous to fit
legibly, you should put the first ones listed (as many as fit
@@ -4013,39 +4028,40 @@ GNU Free Documentation License
adjacent pages.
If you publish or distribute Opaque copies of the Document
- numbering more than 100, you must either include a machine-readable
- Transparent copy along with each Opaque copy, or state in or with
- each Opaque copy a computer-network location from which the general
- network-using public has access to download using public-standard
- network protocols a complete Transparent copy of the Document, free
- of added material. If you use the latter option, you must take
- reasonably prudent steps, when you begin distribution of Opaque
- copies in quantity, to ensure that this Transparent copy will
- remain thus accessible at the stated location until at least one
- year after the last time you distribute an Opaque copy (directly or
- through your agents or retailers) of that edition to the public.
+ numbering more than 100, you must either include a
+ machine-readable Transparent copy along with each Opaque copy, or
+ state in or with each Opaque copy a computer-network location from
+ which the general network-using public has access to download
+ using public-standard network protocols a complete Transparent
+ copy of the Document, free of added material. If you use the
+ latter option, you must take reasonably prudent steps, when you
+ begin distribution of Opaque copies in quantity, to ensure that
+ this Transparent copy will remain thus accessible at the stated
+ location until at least one year after the last time you
+ distribute an Opaque copy (directly or through your agents or
+ retailers) of that edition to the public.
It is requested, but not required, that you contact the authors of
- the Document well before redistributing any large number of copies,
- to give them a chance to provide you with an updated version of the
- Document.
+ the Document well before redistributing any large number of
+ copies, to give them a chance to provide you with an updated
+ version of the Document.
4. MODIFICATIONS
You may copy and distribute a Modified Version of the Document
under the conditions of sections 2 and 3 above, provided that you
- release the Modified Version under precisely this License, with the
- Modified Version filling the role of the Document, thus licensing
- distribution and modification of the Modified Version to whoever
- possesses a copy of it. In addition, you must do these things in
- the Modified Version:
+ release the Modified Version under precisely this License, with
+ the Modified Version filling the role of the Document, thus
+ licensing distribution and modification of the Modified Version to
+ whoever possesses a copy of it. In addition, you must do these
+ things in the Modified Version:
A. Use in the Title Page (and on the covers, if any) a title
- distinct from that of the Document, and from those of previous
- versions (which should, if there were any, be listed in the
- History section of the Document). You may use the same title
- as a previous version if the original publisher of that
- version gives permission.
+ distinct from that of the Document, and from those of
+ previous versions (which should, if there were any, be listed
+ in the History section of the Document). You may use the
+ same title as a previous version if the original publisher of
+ that version gives permission.
B. List on the Title Page, as authors, one or more persons or
entities responsible for authorship of the modifications in
@@ -4075,30 +4091,31 @@ GNU Free Documentation License
I. Preserve the section Entitled "History", Preserve its Title,
and add to it an item stating at least the title, year, new
- authors, and publisher of the Modified Version as given on the
- Title Page. If there is no section Entitled "History" in the
- Document, create one stating the title, year, authors, and
- publisher of the Document as given on its Title Page, then add
- an item describing the Modified Version as stated in the
- previous sentence.
+ authors, and publisher of the Modified Version as given on
+ the Title Page. If there is no section Entitled "History" in
+ the Document, create one stating the title, year, authors,
+ and publisher of the Document as given on its Title Page,
+ then add an item describing the Modified Version as stated in
+ the previous sentence.
J. Preserve the network location, if any, given in the Document
for public access to a Transparent copy of the Document, and
likewise the network locations given in the Document for
- previous versions it was based on. These may be placed in the
- "History" section. You may omit a network location for a work
- that was published at least four years before the Document
- itself, or if the original publisher of the version it refers
- to gives permission.
+ previous versions it was based on. These may be placed in
+ the "History" section. You may omit a network location for a
+ work that was published at least four years before the
+ Document itself, or if the original publisher of the version
+ it refers to gives permission.
K. For any section Entitled "Acknowledgements" or "Dedications",
- Preserve the Title of the section, and preserve in the section
- all the substance and tone of each of the contributor
+ Preserve the Title of the section, and preserve in the
+ section all the substance and tone of each of the contributor
acknowledgements and/or dedications given therein.
- L. Preserve all the Invariant Sections of the Document, unaltered
- in their text and in their titles. Section numbers or the
- equivalent are not considered part of the section titles.
+ L. Preserve all the Invariant Sections of the Document,
+ unaltered in their text and in their titles. Section numbers
+ or the equivalent are not considered part of the section
+ titles.
M. Delete any section Entitled "Endorsements". Such a section
may not be included in the Modified Version.
@@ -4111,11 +4128,11 @@ GNU Free Documentation License
If the Modified Version includes new front-matter sections or
appendices that qualify as Secondary Sections and contain no
- material copied from the Document, you may at your option designate
- some or all of these sections as invariant. To do this, add their
- titles to the list of Invariant Sections in the Modified Version's
- license notice. These titles must be distinct from any other
- section titles.
+ material copied from the Document, you may at your option
+ designate some or all of these sections as invariant. To do this,
+ add their titles to the list of Invariant Sections in the Modified
+ Version's license notice. These titles must be distinct from any
+ other section titles.
You may add a section Entitled "Endorsements", provided it contains
nothing but endorsements of your Modified Version by various
@@ -4124,15 +4141,15 @@ GNU Free Documentation License
definition of a standard.
You may add a passage of up to five words as a Front-Cover Text,
- and a passage of up to 25 words as a Back-Cover Text, to the end of
- the list of Cover Texts in the Modified Version. Only one passage
- of Front-Cover Text and one of Back-Cover Text may be added by (or
- through arrangements made by) any one entity. If the Document
- already includes a cover text for the same cover, previously added
- by you or by arrangement made by the same entity you are acting on
- behalf of, you may not add another; but you may replace the old
- one, on explicit permission from the previous publisher that added
- the old one.
+ and a passage of up to 25 words as a Back-Cover Text, to the end
+ of the list of Cover Texts in the Modified Version. Only one
+ passage of Front-Cover Text and one of Back-Cover Text may be
+ added by (or through arrangements made by) any one entity. If the
+ Document already includes a cover text for the same cover,
+ previously added by you or by arrangement made by the same entity
+ you are acting on behalf of, you may not add another; but you may
+ replace the old one, on explicit permission from the previous
+ publisher that added the old one.
The author(s) and publisher(s) of the Document do not by this
License give permission to use their names for publicity for or to
@@ -4142,8 +4159,8 @@ GNU Free Documentation License
You may combine the Document with other documents released under
this License, under the terms defined in section 4 above for
- modified versions, provided that you include in the combination all
- of the Invariant Sections of all of the original documents,
+ modified versions, provided that you include in the combination
+ all of the Invariant Sections of all of the original documents,
unmodified, and list them all as Invariant Sections of your
combined work in its license notice, and that you preserve all
their Warranty Disclaimers.
@@ -4170,20 +4187,20 @@ GNU Free Documentation License
documents released under this License, and replace the individual
copies of this License in the various documents with a single copy
that is included in the collection, provided that you follow the
- rules of this License for verbatim copying of each of the documents
- in all other respects.
+ rules of this License for verbatim copying of each of the
+ documents in all other respects.
You may extract a single document from such a collection, and
distribute it individually under this License, provided you insert
- a copy of this License into the extracted document, and follow this
- License in all other respects regarding verbatim copying of that
- document.
+ a copy of this License into the extracted document, and follow
+ this License in all other respects regarding verbatim copying of
+ that document.
7. AGGREGATION WITH INDEPENDENT WORKS
A compilation of the Document or its derivatives with other
- separate and independent documents or works, in or on a volume of a
- storage or distribution medium, is called an "aggregate" if the
+ separate and independent documents or works, in or on a volume of
+ a storage or distribution medium, is called an "aggregate" if the
copyright resulting from the compilation is not used to limit the
legal rights of the compilation's users beyond what the individual
works permit. When the Document is included in an aggregate, this
@@ -4228,8 +4245,8 @@ GNU Free Documentation License
However, if you cease all violation of this License, then your
license from a particular copyright holder is reinstated (a)
- provisionally, unless and until the copyright holder explicitly and
- finally terminates your license, and (b) permanently, if the
+ provisionally, unless and until the copyright holder explicitly
+ and finally terminates your license, and (b) permanently, if the
copyright holder fails to notify you of the violation by some
reasonable means prior to 60 days after the cessation.
@@ -4241,33 +4258,33 @@ GNU Free Documentation License
after your receipt of the notice.
Termination of your rights under this section does not terminate
- the licenses of parties who have received copies or rights from you
- under this License. If your rights have been terminated and not
- permanently reinstated, receipt of a copy of some or all of the
- same material does not give you any rights to use it.
+ the licenses of parties who have received copies or rights from
+ you under this License. If your rights have been terminated and
+ not permanently reinstated, receipt of a copy of some or all of
+ the same material does not give you any rights to use it.
- 10. FUTURE REVISIONS OF THIS LICENSE
+ 10. FUTURE REVISIONS OF THIS LICENSE
The Free Software Foundation may publish new, revised versions of
the GNU Free Documentation License from time to time. Such new
versions will be similar in spirit to the present version, but may
differ in detail to address new problems or concerns. See
- <http://www.gnu.org/copyleft/>.
+ `http://www.gnu.org/copyleft/'.
Each version of the License is given a distinguishing version
number. If the Document specifies that a particular numbered
version of this License "or any later version" applies to it, you
have the option of following the terms and conditions either of
that specified version or of any later version that has been
- published (not as a draft) by the Free Software Foundation. If the
- Document does not specify a version number of this License, you may
- choose any version ever published (not as a draft) by the Free
- Software Foundation. If the Document specifies that a proxy can
- decide which future versions of this License can be used, that
+ published (not as a draft) by the Free Software Foundation. If
+ the Document does not specify a version number of this License,
+ you may choose any version ever published (not as a draft) by the
+ Free Software Foundation. If the Document specifies that a proxy
+ can decide which future versions of this License can be used, that
proxy's public statement of acceptance of a version permanently
authorizes you to choose that version for the Document.
- 11. RELICENSING
+ 11. RELICENSING
"Massive Multiauthor Collaboration Site" (or "MMC Site") means any
World Wide Web server that publishes copyrightable works and also
@@ -4297,6 +4314,7 @@ GNU Free Documentation License
site under CC-BY-SA on the same site at any time before August 1,
2009, provided the MMC is eligible for relicensing.
+
ADDENDUM: How to use this License for your documents
====================================================
@@ -4313,7 +4331,7 @@ notices just after the title page:
Free Documentation License''.
If you have Invariant Sections, Front-Cover Texts and Back-Cover
-Texts, replace the "with...Texts." line with this:
+Texts, replace the "with...Texts." line with this:
with the Invariant Sections being LIST THEIR TITLES, with
the Front-Cover Texts being LIST, and with the Back-Cover Texts
@@ -4324,9 +4342,9 @@ combination of the three, merge those two alternatives to suit the
situation.
If your document contains nontrivial examples of program code, we
-recommend releasing these examples in parallel under your choice of free
-software license, such as the GNU General Public License, to permit
-their use in free software.
+recommend releasing these examples in parallel under your choice of
+free software license, such as the GNU General Public License, to
+permit their use in free software.

File: libgomp.info, Node: Funding, Next: Library Index, Prev: GNU Free Documentation License, Up: Top
@@ -4356,8 +4374,8 @@ for comparison.
Even a precise fraction "of the profits from this disk" is not very
meaningful, since creative accounting and unrelated business decisions
-can greatly alter what fraction of the sales price counts as profit. If
-the price you pay is $50, ten percent of the profit is probably less
+can greatly alter what fraction of the sales price counts as profit.
+If the price you pay is $50, ten percent of the profit is probably less
than a dollar; it might be a few cents, or nothing at all.
Some redistributors do development work themselves. This is useful
@@ -4367,8 +4385,8 @@ difference than others. For example, maintaining a separate version of
a program contributes very little; maintaining the standard version of a
program for the whole community contributes much. Easy new ports
contribute little, since someone else would surely do them; difficult
-ports such as adding a new CPU to the GNU Compiler Collection contribute
-more; major new features or packages contribute the most.
+ports such as adding a new CPU to the GNU Compiler Collection
+contribute more; major new features or packages contribute the most.
By establishing the idea that supporting further development is "the
proper thing to do" when distributing free software for a fee, we can
@@ -4387,170 +4405,170 @@ Library Index
* Menu:
-* Environment Variable: OMP_CANCELLATION. (line 6)
-* Environment Variable <1>: OMP_DISPLAY_ENV. (line 6)
-* Environment Variable <2>: OMP_DEFAULT_DEVICE. (line 6)
-* Environment Variable <3>: OMP_DYNAMIC. (line 6)
-* Environment Variable <4>: OMP_MAX_ACTIVE_LEVELS. (line 6)
-* Environment Variable <5>: OMP_MAX_TASK_PRIORITY. (line 6)
-* Environment Variable <6>: OMP_NESTED. (line 6)
-* Environment Variable <7>: OMP_NUM_THREADS. (line 6)
-* Environment Variable <8>: OMP_PROC_BIND. (line 6)
-* Environment Variable <9>: OMP_PLACES. (line 6)
-* Environment Variable <10>: OMP_STACKSIZE. (line 6)
-* Environment Variable <11>: OMP_SCHEDULE. (line 6)
-* Environment Variable <12>: OMP_THREAD_LIMIT. (line 6)
-* Environment Variable <13>: OMP_WAIT_POLICY. (line 6)
-* Environment Variable <14>: GOMP_CPU_AFFINITY. (line 6)
-* Environment Variable <15>: GOMP_DEBUG. (line 6)
-* Environment Variable <16>: GOMP_STACKSIZE. (line 6)
-* Environment Variable <17>: GOMP_SPINCOUNT. (line 6)
-* Environment Variable <18>: GOMP_RTEMS_THREAD_POOLS.
+* Environment Variable <1>: GOMP_RTEMS_THREAD_POOLS.
(line 6)
+* Environment Variable <2>: GOMP_SPINCOUNT. (line 6)
+* Environment Variable <3>: GOMP_STACKSIZE. (line 6)
+* Environment Variable <4>: GOMP_DEBUG. (line 6)
+* Environment Variable <5>: GOMP_CPU_AFFINITY. (line 6)
+* Environment Variable <6>: OMP_WAIT_POLICY. (line 6)
+* Environment Variable <7>: OMP_THREAD_LIMIT. (line 6)
+* Environment Variable <8>: OMP_SCHEDULE. (line 6)
+* Environment Variable <9>: OMP_STACKSIZE. (line 6)
+* Environment Variable <10>: OMP_PLACES. (line 6)
+* Environment Variable <11>: OMP_PROC_BIND. (line 6)
+* Environment Variable <12>: OMP_NUM_THREADS. (line 6)
+* Environment Variable <13>: OMP_NESTED. (line 6)
+* Environment Variable <14>: OMP_MAX_TASK_PRIORITY. (line 6)
+* Environment Variable <15>: OMP_MAX_ACTIVE_LEVELS. (line 6)
+* Environment Variable <16>: OMP_DYNAMIC. (line 6)
+* Environment Variable <17>: OMP_DEFAULT_DEVICE. (line 6)
+* Environment Variable <18>: OMP_DISPLAY_ENV. (line 6)
+* Environment Variable: OMP_CANCELLATION. (line 6)
* FDL, GNU Free Documentation License: GNU Free Documentation License.
(line 6)
-* Implementation specific setting: OMP_NESTED. (line 6)
-* Implementation specific setting <1>: OMP_NUM_THREADS. (line 6)
-* Implementation specific setting <2>: OMP_SCHEDULE. (line 6)
-* Implementation specific setting <3>: GOMP_STACKSIZE. (line 6)
-* Implementation specific setting <4>: GOMP_SPINCOUNT. (line 6)
-* Implementation specific setting <5>: GOMP_RTEMS_THREAD_POOLS.
+* Implementation specific setting <1>: GOMP_RTEMS_THREAD_POOLS.
(line 6)
+* Implementation specific setting <2>: GOMP_SPINCOUNT. (line 6)
+* Implementation specific setting <3>: GOMP_STACKSIZE. (line 6)
+* Implementation specific setting <4>: OMP_SCHEDULE. (line 6)
+* Implementation specific setting <5>: OMP_NUM_THREADS. (line 6)
+* Implementation specific setting: OMP_NESTED. (line 6)
* Introduction: Top. (line 6)

Tag Table:
-Node: Top2083
-Node: Enabling OpenMP4489
-Node: Runtime Library Routines5276
-Node: omp_get_active_level8339
-Node: omp_get_ancestor_thread_num9039
-Node: omp_get_cancellation9969
-Node: omp_get_default_device10783
-Node: omp_get_dynamic11459
-Node: omp_get_level12334
-Node: omp_get_max_active_levels12954
-Node: omp_get_max_task_priority13659
-Node: omp_get_max_threads14279
-Node: omp_get_nested15036
-Node: omp_get_num_devices15950
-Node: omp_get_num_procs16471
-Node: omp_get_num_teams17010
-Node: omp_get_num_threads17526
-Node: omp_get_proc_bind18615
-Node: omp_get_schedule19536
-Node: omp_get_team_num20490
-Node: omp_get_team_size20989
-Node: omp_get_thread_limit21949
-Node: omp_get_thread_num22568
-Node: omp_in_parallel23439
-Node: omp_in_final24088
-Node: omp_is_initial_device24762
-Node: omp_set_default_device25455
-Node: omp_set_dynamic26246
-Node: omp_set_max_active_levels27132
-Node: omp_set_nested27909
-Node: omp_set_num_threads28801
-Node: omp_set_schedule29669
-Node: omp_init_lock30750
-Node: omp_set_lock31403
-Node: omp_test_lock32258
-Node: omp_unset_lock33234
-Node: omp_destroy_lock34165
-Node: omp_init_nest_lock34842
-Node: omp_set_nest_lock35577
-Node: omp_test_nest_lock36492
-Node: omp_unset_nest_lock37519
-Node: omp_destroy_nest_lock38534
-Node: omp_get_wtick39285
-Node: omp_get_wtime39877
-Node: Environment Variables40653
-Node: OMP_CANCELLATION42208
-Node: OMP_DISPLAY_ENV42741
-Node: OMP_DEFAULT_DEVICE43444
-Node: OMP_DYNAMIC44224
-Node: OMP_MAX_ACTIVE_LEVELS44820
-Node: OMP_MAX_TASK_PRIORITY45470
-Node: OMP_NESTED46128
-Node: OMP_NUM_THREADS46733
-Node: OMP_PROC_BIND47421
-Node: OMP_PLACES48613
-Node: OMP_STACKSIZE50790
-Node: OMP_SCHEDULE51614
-Node: OMP_THREAD_LIMIT52312
-Node: OMP_WAIT_POLICY52912
-Node: GOMP_CPU_AFFINITY53604
-Node: GOMP_DEBUG55334
-Node: GOMP_STACKSIZE55841
-Node: GOMP_SPINCOUNT56670
-Node: GOMP_RTEMS_THREAD_POOLS57874
-Node: Enabling OpenACC60052
-Node: OpenACC Runtime Library Routines61045
-Node: acc_get_num_devices64839
-Node: acc_set_device_type65565
-Node: acc_get_device_type66329
-Node: acc_set_device_num67044
-Node: acc_get_device_num67828
-Node: acc_async_test68625
-Node: acc_async_test_all69617
-Node: acc_wait70517
-Node: acc_wait_all71152
-Node: acc_wait_all_async71731
-Node: acc_wait_async72483
-Node: acc_init73190
-Node: acc_shutdown73836
-Node: acc_on_device74504
-Node: acc_malloc75508
-Node: acc_free76007
-Node: acc_copyin76434
-Node: acc_present_or_copyin77544
-Node: acc_create79170
-Node: acc_present_or_create80325
-Node: acc_copyout81959
-Node: acc_delete82982
-Node: acc_update_device83957
-Node: acc_update_self85069
-Node: acc_map_data86173
-Node: acc_unmap_data86858
-Node: acc_deviceptr87379
-Node: acc_hostptr87949
-Node: acc_is_present88513
-Node: acc_memcpy_to_device90040
-Node: acc_memcpy_from_device90703
-Node: acc_get_current_cuda_device91387
-Node: acc_get_current_cuda_context91984
-Node: acc_get_cuda_stream92578
-Node: acc_set_cuda_stream93134
-Node: OpenACC Environment Variables93666
-Node: ACC_DEVICE_TYPE94125
-Node: ACC_DEVICE_NUM94361
-Node: GCC_ACC_NOTIFY94618
-Node: CUDA Streams Usage94841
-Ref: CUDA Streams Usage-Footnote-196741
-Node: OpenACC Library Interoperability96850
-Ref: OpenACC Library Interoperability-Footnote-1103206
-Ref: OpenACC Library Interoperability-Footnote-2103458
-Node: The libgomp ABI103666
-Node: Implementing MASTER construct104522
-Node: Implementing CRITICAL construct104936
-Node: Implementing ATOMIC construct105675
-Node: Implementing FLUSH construct106156
-Node: Implementing BARRIER construct106427
-Node: Implementing THREADPRIVATE construct106696
-Node: Implementing PRIVATE clause107349
-Node: Implementing FIRSTPRIVATE LASTPRIVATE COPYIN and COPYPRIVATE clauses107930
-Node: Implementing REDUCTION clause109254
-Node: Implementing PARALLEL construct109811
-Node: Implementing FOR construct111068
-Node: Implementing ORDERED construct113066
-Node: Implementing SECTIONS construct113372
-Node: Implementing SINGLE construct114138
-Node: Implementing OpenACC's PARALLEL construct114850
-Node: Reporting Bugs115108
-Node: Copying115470
-Node: GNU Free Documentation License153017
-Node: Funding178140
-Node: Library Index180666
+Node: Top2130
+Node: Enabling OpenMP4536
+Node: Runtime Library Routines5323
+Node: omp_get_active_level8386
+Node: omp_get_ancestor_thread_num9084
+Node: omp_get_cancellation10011
+Node: omp_get_default_device10823
+Node: omp_get_dynamic11497
+Node: omp_get_level12370
+Node: omp_get_max_active_levels12988
+Node: omp_get_max_task_priority13691
+Node: omp_get_max_threads14309
+Node: omp_get_nested15064
+Node: omp_get_num_devices15976
+Node: omp_get_num_procs16495
+Node: omp_get_num_teams17032
+Node: omp_get_num_threads17546
+Node: omp_get_proc_bind18633
+Node: omp_get_schedule19551
+Node: omp_get_team_num20500
+Node: omp_get_team_size20997
+Node: omp_get_thread_limit21954
+Node: omp_get_thread_num22571
+Node: omp_in_parallel23440
+Node: omp_in_final24087
+Node: omp_is_initial_device24759
+Node: omp_set_default_device25450
+Node: omp_set_dynamic26238
+Node: omp_set_max_active_levels27121
+Node: omp_set_nested27895
+Node: omp_set_num_threads28784
+Node: omp_set_schedule29649
+Node: omp_init_lock30725
+Node: omp_set_lock31375
+Node: omp_test_lock32227
+Node: omp_unset_lock33200
+Node: omp_destroy_lock34128
+Node: omp_init_nest_lock34802
+Node: omp_set_nest_lock35534
+Node: omp_test_nest_lock36451
+Node: omp_unset_nest_lock37481
+Node: omp_destroy_nest_lock38493
+Node: omp_get_wtick39241
+Node: omp_get_wtime39831
+Node: Environment Variables40605
+Node: OMP_CANCELLATION42160
+Node: OMP_DISPLAY_ENV42693
+Node: OMP_DEFAULT_DEVICE43396
+Node: OMP_DYNAMIC44176
+Node: OMP_MAX_ACTIVE_LEVELS44772
+Node: OMP_MAX_TASK_PRIORITY45422
+Node: OMP_NESTED46082
+Node: OMP_NUM_THREADS46687
+Node: OMP_PROC_BIND47376
+Node: OMP_PLACES48568
+Node: OMP_STACKSIZE50745
+Node: OMP_SCHEDULE51569
+Node: OMP_THREAD_LIMIT52267
+Node: OMP_WAIT_POLICY52867
+Node: GOMP_CPU_AFFINITY53559
+Node: GOMP_DEBUG55290
+Node: GOMP_STACKSIZE55797
+Node: GOMP_SPINCOUNT56626
+Node: GOMP_RTEMS_THREAD_POOLS57835
+Node: Enabling OpenACC60016
+Node: OpenACC Runtime Library Routines61010
+Node: acc_get_num_devices64804
+Node: acc_set_device_type65527
+Node: acc_get_device_type66288
+Node: acc_set_device_num67000
+Node: acc_get_device_num67799
+Node: acc_async_test68592
+Node: acc_async_test_all69577
+Node: acc_wait70472
+Node: acc_wait_all71104
+Node: acc_wait_all_async71681
+Node: acc_wait_async72430
+Node: acc_init73134
+Node: acc_shutdown73777
+Node: acc_on_device74442
+Node: acc_malloc75440
+Node: acc_free75937
+Node: acc_copyin76363
+Node: acc_present_or_copyin77464
+Node: acc_create79074
+Node: acc_present_or_create80220
+Node: acc_copyout81838
+Node: acc_delete82853
+Node: acc_update_device83820
+Node: acc_update_self84924
+Node: acc_map_data86020
+Node: acc_unmap_data86703
+Node: acc_deviceptr87222
+Node: acc_hostptr87791
+Node: acc_is_present88354
+Node: acc_memcpy_to_device89868
+Node: acc_memcpy_from_device90529
+Node: acc_get_current_cuda_device91211
+Node: acc_get_current_cuda_context91806
+Node: acc_get_cuda_stream92398
+Node: acc_set_cuda_stream92952
+Node: OpenACC Environment Variables93483
+Node: ACC_DEVICE_TYPE93942
+Node: ACC_DEVICE_NUM94178
+Node: GCC_ACC_NOTIFY94435
+Node: CUDA Streams Usage94658
+Ref: CUDA Streams Usage-Footnote-196558
+Node: OpenACC Library Interoperability96667
+Ref: OpenACC Library Interoperability-Footnote-1103013
+Ref: OpenACC Library Interoperability-Footnote-2103265
+Node: The libgomp ABI103473
+Node: Implementing MASTER construct104329
+Node: Implementing CRITICAL construct104743
+Node: Implementing ATOMIC construct105482
+Node: Implementing FLUSH construct105963
+Node: Implementing BARRIER construct106234
+Node: Implementing THREADPRIVATE construct106503
+Node: Implementing PRIVATE clause107155
+Node: Implementing FIRSTPRIVATE LASTPRIVATE COPYIN and COPYPRIVATE clauses107736
+Node: Implementing REDUCTION clause109060
+Node: Implementing PARALLEL construct109617
+Node: Implementing FOR construct110874
+Node: Implementing ORDERED construct112872
+Node: Implementing SECTIONS construct113178
+Node: Implementing SINGLE construct113944
+Node: Implementing OpenACC's PARALLEL construct114656
+Node: Reporting Bugs114914
+Node: Copying115276
+Node: GNU Free Documentation License152841
+Node: Funding177983
+Node: Library Index180508

End Tag Table
diff --git a/libgomp/testsuite/libgomp.c++/target-20.C b/libgomp/testsuite/libgomp.c++/target-20.C
new file mode 100644
index 0000000000..a722ec00c5
--- /dev/null
+++ b/libgomp/testsuite/libgomp.c++/target-20.C
@@ -0,0 +1,80 @@
+extern "C" void abort ();
+struct S { int a, b, c, d; };
+
+void
+foo (S &s)
+{
+ int err;
+ #pragma omp target map (s.b, s.d) map (from: err)
+ {
+ err = s.b != 21 || s.d != 24;
+ s.b++; s.d++;
+ }
+ if (err || s.b != 22 || s.d != 25)
+ abort ();
+ #pragma omp target data map (s.b, s.d)
+ {
+ #pragma omp target map (alloc: s.b, s.d) map (from: err)
+ {
+ err = s.b != 22 || s.d != 25;
+ s.b++; s.d++;
+ }
+ }
+ if (err || s.b != 23 || s.d != 26)
+ abort ();
+ #pragma omp target data map (s)
+ {
+ #pragma omp target map (alloc: s.b, s.d) map (from: err)
+ {
+ err = s.b != 23 || s.d != 26;
+ s.b++; s.d++;
+ }
+ }
+ if (err || s.b != 24 || s.d != 27)
+ abort ();
+}
+
+template <typename T, typename U>
+void
+bar (S &s, T &t, U u)
+{
+ int err;
+ #pragma omp target map (s.b, s.d, t.b, t.d, u.b, u.d) map (from: err)
+ {
+ err = s.b != 21 || s.d != 24 || t.b != 73 || t.d != 82 || u.b != 31 || u.d != 37;
+ s.b++; s.d++; t.b++; t.d++; u.b++; u.d++;
+ }
+ if (err || s.b != 22 || s.d != 25 || t.b != 74 || t.d != 83 || u.b != 32 || u.d != 38)
+ abort ();
+ #pragma omp target data map (s.b, s.d, t.b, t.d, u.b, u.d)
+ {
+ #pragma omp target map (alloc: s.b, s.d, t.b, t.d, u.b, u.d) map (from: err)
+ {
+ err = s.b != 22 || s.d != 25 || t.b != 74 || t.d != 83 || u.b != 32 || u.d != 38;
+ s.b++; s.d++; t.b++; t.d++; u.b++; u.d++;
+ }
+ }
+ if (err || s.b != 23 || s.d != 26 || t.b != 75 || t.d != 84 || u.b != 33 || u.d != 39)
+ abort ();
+ #pragma omp target data map (s, t, u)
+ {
+ #pragma omp target map (alloc: s.b, s.d, t.b, t.d, u.b, u.d) map (from: err)
+ {
+ err = s.b != 23 || s.d != 26 || t.b != 75 || t.d != 84 || u.b != 33 || u.d != 39;
+ s.b++; s.d++; t.b++; t.d++; u.b++; u.d++;
+ }
+ }
+ if (err || s.b != 24 || s.d != 27 || t.b != 76 || t.d != 85 || u.b != 34 || u.d != 40)
+ abort ();
+}
+
+int
+main ()
+{
+ S s = { 1, 21, 2, 24 };
+ foo (s);
+ S s2 = { 3, 21, 4, 24 };
+ S t = { 5, 73, 6, 82 };
+ S u = { 7, 31, 8, 37 };
+ bar <S, S &> (s2, t, u);
+}
diff --git a/libgomp/testsuite/libgomp.c++/target-21.C b/libgomp/testsuite/libgomp.c++/target-21.C
new file mode 100644
index 0000000000..21a2f299bb
--- /dev/null
+++ b/libgomp/testsuite/libgomp.c++/target-21.C
@@ -0,0 +1,173 @@
+extern "C" void abort ();
+struct T { char t[270]; };
+struct S { int (&x)[10]; int *&y; T t; int &z; S (); ~S (); };
+
+template <int N>
+void
+foo (S s)
+{
+ int err;
+ #pragma omp target map (s.x[0:N], s.y[0:N]) map (s.t.t[16:3]) map (from: err)
+ {
+ err = s.x[2] != 28 || s.y[2] != 37 || s.t.t[17] != 81;
+ s.x[2]++;
+ s.y[2]++;
+ s.t.t[17]++;
+ }
+ if (err || s.x[2] != 29 || s.y[2] != 38 || s.t.t[17] != 82)
+ abort ();
+}
+
+template <int N>
+void
+bar (S s)
+{
+ int err;
+ #pragma omp target map (s.x, s.z)map(from:err)
+ {
+ err = s.x[2] != 29 || s.z != 6;
+ s.x[2]++;
+ s.z++;
+ }
+ if (err || s.x[2] != 30 || s.z != 7)
+ abort ();
+}
+
+template <int N>
+void
+foo2 (S &s)
+{
+ int err;
+ #pragma omp target map (s.x[N:10], s.y[N:10]) map (from: err) map (s.t.t[N+16:N+3])
+ {
+ err = s.x[2] != 30 || s.y[2] != 38 || s.t.t[17] != 81;
+ s.x[2]++;
+ s.y[2]++;
+ s.t.t[17]++;
+ }
+ if (err || s.x[2] != 31 || s.y[2] != 39 || s.t.t[17] != 82)
+ abort ();
+}
+
+template <int N>
+void
+bar2 (S &s)
+{
+ int err;
+ #pragma omp target map (s.x, s.z)map(from:err)
+ {
+ err = s.x[2] != 31 || s.z != 7;
+ s.x[2]++;
+ s.z++;
+ }
+ if (err || s.x[2] != 32 || s.z != 8)
+ abort ();
+}
+
+template <typename U>
+void
+foo3 (U s)
+{
+ int err;
+ #pragma omp target map (s.x[0:10], s.y[0:10]) map (from: err) map (s.t.t[16:3])
+ {
+ err = s.x[2] != 32 || s.y[2] != 39 || s.t.t[17] != 82;
+ s.x[2]++;
+ s.y[2]++;
+ s.t.t[17]++;
+ }
+ if (err || s.x[2] != 33 || s.y[2] != 40 || s.t.t[17] != 83)
+ abort ();
+}
+
+template <typename U>
+void
+bar3 (U s)
+{
+ int err;
+ #pragma omp target map (s.x, s.z)map(from:err)
+ {
+ err = s.x[2] != 33 || s.z != 8;
+ s.x[2]++;
+ s.z++;
+ }
+ if (err || s.x[2] != 34 || s.z != 9)
+ abort ();
+}
+
+template <typename U>
+void
+foo4 (U &s)
+{
+ int err;
+ #pragma omp target map (s.x[0:10], s.y[0:10]) map (from: err) map (s.t.t[16:3])
+ {
+ err = s.x[2] != 34 || s.y[2] != 40 || s.t.t[17] != 82;
+ s.x[2]++;
+ s.y[2]++;
+ s.t.t[17]++;
+ }
+ if (err || s.x[2] != 35 || s.y[2] != 41 || s.t.t[17] != 83)
+ abort ();
+}
+
+template <typename U>
+void
+bar4 (U &s)
+{
+ int err;
+ #pragma omp target map (s.x, s.z)map(from:err)
+ {
+ err = s.x[2] != 35 || s.z != 9;
+ s.x[2]++;
+ s.z++;
+ }
+ if (err || s.x[2] != 36 || s.z != 10)
+ abort ();
+}
+
+int xt[10] = { 1, 2, 28, 3, 4, 5, 6, 7, 8, 9 };
+int yt[10] = { 1, 2, 37, 3, 4, 5, 6, 7, 8, 9 };
+int *yp = yt;
+int zt = 6;
+
+S::S () : x (xt), y (yp), z (zt)
+{
+}
+
+S::~S ()
+{
+}
+
+int
+main ()
+{
+ S s;
+ s.t.t[16] = 5;
+ s.t.t[17] = 81;
+ s.t.t[18] = 9;
+ foo <10> (s);
+ if (s.t.t[17] != 81)
+ abort ();
+ bar <7> (s);
+ foo2 <0> (s);
+ if (s.t.t[17] != 82)
+ abort ();
+ bar2 <21> (s);
+ foo3 <S> (s);
+ if (s.t.t[17] != 82)
+ abort ();
+ bar3 <S> (s);
+ foo4 <S> (s);
+ if (s.t.t[17] != 83)
+ abort ();
+ bar4 <S> (s);
+ s.x[2] -= 4;
+ s.y[2] -= 2;
+ s.z -= 2;
+ s.t.t[17]--;
+ foo3 <S &> (s);
+ if (s.t.t[17] != 83)
+ abort ();
+ bar3 <S &> (s);
+}
diff --git a/libgomp/testsuite/libgomp.c/pr70680-1.c b/libgomp/testsuite/libgomp.c/pr70680-1.c
new file mode 100644
index 0000000000..389fdd3729
--- /dev/null
+++ b/libgomp/testsuite/libgomp.c/pr70680-1.c
@@ -0,0 +1,75 @@
+/* PR middle-end/70680 */
+
+int v;
+
+void
+f1 (void)
+{
+ int i = 0;
+#pragma omp task default(shared) if(0)
+ {
+#pragma omp simd
+ for (i = 0; i < 100; i++)
+ ;
+ v = i;
+ }
+ if (i != 100)
+ __builtin_abort ();
+}
+
+void
+f2 (void)
+{
+ int i = 0;
+#pragma omp task default(shared) if(0)
+ {
+#pragma omp simd
+ for (i = 0; i < 100; i++)
+ ;
+ }
+ if (i != 100)
+ __builtin_abort ();
+}
+
+void
+f3 (void)
+{
+ int i = 0;
+#pragma omp task default(shared) if(0)
+ {
+#pragma omp simd linear(i: 1)
+ for (i = 0; i < 100; i++)
+ ;
+ v = i;
+ }
+ if (i != 100)
+ __builtin_abort ();
+}
+
+void
+f4 (void)
+{
+ int i = 0;
+#pragma omp task default(shared) if(0)
+ {
+#pragma omp simd linear(i: 1)
+ for (i = 0; i < 100; i++)
+ ;
+ }
+ if (i != 100)
+ __builtin_abort ();
+}
+
+int
+main ()
+{
+ f1 ();
+ if (v++ != 100)
+ __builtin_abort ();
+ f2 ();
+ f3 ();
+ if (v++ != 100)
+ __builtin_abort ();
+ f4 ();
+ return 0;
+}
diff --git a/libgomp/testsuite/libgomp.c/pr70680-2.c b/libgomp/testsuite/libgomp.c/pr70680-2.c
new file mode 100644
index 0000000000..0aada78f0c
--- /dev/null
+++ b/libgomp/testsuite/libgomp.c/pr70680-2.c
@@ -0,0 +1,79 @@
+/* PR middle-end/70680 */
+
+int v;
+
+void
+f1 (void)
+{
+ int i = 0, j = 0;
+#pragma omp task default(shared) if(0)
+ {
+#pragma omp simd collapse(2)
+ for (i = 0; i < 10; i++)
+ for (j = 0; j < 10; j++)
+ ;
+ v = i + j;
+ }
+ if (i != 10 || j != 10)
+ __builtin_abort ();
+}
+
+void
+f2 (void)
+{
+ int i = 0, j = 0;
+#pragma omp task default(shared) if(0)
+ {
+#pragma omp simd collapse(2)
+ for (i = 0; i < 10; i++)
+ for (j = 0; j < 10; j++)
+ ;
+ }
+ if (i != 10 || j != 10)
+ __builtin_abort ();
+}
+
+void
+f3 (void)
+{
+ int i = 0, j = 0;
+#pragma omp task default(shared) if(0)
+ {
+#pragma omp simd collapse(2) lastprivate (i, j)
+ for (i = 0; i < 10; i++)
+ for (j = 0; j < 10; j++)
+ ;
+ v = i + j;
+ }
+ if (i != 10 || j != 10)
+ __builtin_abort ();
+}
+
+void
+f4 (void)
+{
+ int i = 0, j = 0;
+#pragma omp task default(shared) if(0)
+ {
+#pragma omp simd collapse(2) lastprivate (i, j)
+ for (i = 0; i < 10; i++)
+ for (j = 0; j < 10; j++)
+ ;
+ }
+ if (i != 10 || j != 10)
+ __builtin_abort ();
+}
+
+int
+main ()
+{
+ f1 ();
+ if (v++ != 20)
+ __builtin_abort ();
+ f2 ();
+ f3 ();
+ if (v++ != 20)
+ __builtin_abort ();
+ f4 ();
+ return 0;
+}
diff --git a/libgomp/testsuite/libgomp.fortran/associate3.f90 b/libgomp/testsuite/libgomp.fortran/associate3.f90
new file mode 100644
index 0000000000..ec3d8dc33b
--- /dev/null
+++ b/libgomp/testsuite/libgomp.fortran/associate3.f90
@@ -0,0 +1,20 @@
+! PR fortran/71717
+! { dg-do run }
+
+ type t
+ real, allocatable :: f(:)
+ end type
+ type (t) :: v
+ integer :: i, j
+ allocate (v%f(4))
+ v%f = 19.
+ i = 5
+ associate (u => v, k => i)
+ !$omp parallel do
+ do j = 1, 4
+ u%f(j) = 21.
+ if (j.eq.1) k = 7
+ end do
+ end associate
+ if (any (v%f(:).ne.21.) .or. i.ne.7) call abort
+end
diff --git a/libgomp/testsuite/libgomp.hsa.c/complex-align-2.c b/libgomp/testsuite/libgomp.hsa.c/complex-align-2.c
new file mode 100644
index 0000000000..b2d7acff44
--- /dev/null
+++ b/libgomp/testsuite/libgomp.hsa.c/complex-align-2.c
@@ -0,0 +1,27 @@
+#pragma omp declare target
+ _Complex int *g;
+#pragma omp end declare target
+
+
+
+_Complex float f(void);
+
+int
+main ()
+{
+ _Complex int y;
+#pragma omp target map(from:y)
+ {
+ _Complex int x;
+ g = &x;
+ __imag__ x = 1;
+ __real__ x = 2;
+ y = x;
+ }
+
+ if ((__imag__ y != 1)
+ || (__real__ y != 2))
+ __builtin_abort ();
+ return 0;
+}
+
diff --git a/libgomp/testsuite/libgomp.hsa.c/switch-sbr-2.c b/libgomp/testsuite/libgomp.hsa.c/switch-sbr-2.c
new file mode 100644
index 0000000000..06990d1c2c
--- /dev/null
+++ b/libgomp/testsuite/libgomp.hsa.c/switch-sbr-2.c
@@ -0,0 +1,59 @@
+/* { dg-additional-options "-fno-tree-switch-conversion" } */
+
+#pragma omp declare target
+int
+foo (unsigned a)
+{
+ switch (a)
+ {
+ case 1 ... 5:
+ return 1;
+ case 9 ... 11:
+ return a + 3;
+ case 12 ... 13:
+ return a + 3;
+ default:
+ return 44;
+ }
+}
+#pragma omp end declare target
+
+#define s 100
+
+void __attribute__((noinline, noclone))
+verify(int *a)
+{
+ if (a[0] != 44)
+ __builtin_abort ();
+
+ for (int i = 1; i <= 5; i++)
+ if (a[i] != 1)
+ __builtin_abort ();
+
+ for (int i = 6; i <= 8; i++)
+ if (a[i] != 44)
+ __builtin_abort ();
+
+ for (int i = 9; i <= 13; i++)
+ if (a[i] != i + 3)
+ __builtin_abort ();
+
+ for (int i = 14; i < s; i++)
+ if (a[i] != 44)
+ __builtin_abort ();
+}
+
+int main(int argc)
+{
+ int array[s];
+#pragma omp target
+ {
+ for (int i = 0; i < s; i++)
+ {
+ int v = foo (i);
+ array[i] = v;
+ }
+ }
+ verify (array);
+ return 0;
+}
diff --git a/libgomp/testsuite/libgomp.oacc-c++/template-reduction.C b/libgomp/testsuite/libgomp.oacc-c++/template-reduction.C
index fb5924c9b5..6c85fba7a9 100644
--- a/libgomp/testsuite/libgomp.oacc-c++/template-reduction.C
+++ b/libgomp/testsuite/libgomp.oacc-c++/template-reduction.C
@@ -7,7 +7,7 @@ sum (T array[])
{
T s = 0;
-#pragma acc parallel loop num_gangs (10) gang reduction (+:s) copy (s, array[0:n])
+#pragma acc parallel loop num_gangs (10) gang reduction (+:s) copy (array[0:n])
for (int i = 0; i < n; i++)
s += array[i];
@@ -25,7 +25,7 @@ sum ()
for (int i = 0; i < n; i++)
array[i] = i+1;
-#pragma acc parallel loop num_gangs (10) gang reduction (+:s) copy (s)
+#pragma acc parallel loop num_gangs (10) gang reduction (+:s)
for (int i = 0; i < n; i++)
s += array[i];
@@ -43,7 +43,7 @@ async_sum (T array[])
for (int i = 0; i < n; i++)
array[i] = i+1;
-#pragma acc parallel loop num_gangs (10) gang reduction (+:s) present (array[0:n]) copy (s) async wait (1)
+#pragma acc parallel loop num_gangs (10) gang reduction (+:s) present (array[0:n]) async wait (1)
for (int i = 0; i < n; i++)
s += array[i];
@@ -59,7 +59,7 @@ async_sum (int c)
{
T s = 0;
-#pragma acc parallel loop num_gangs (10) gang reduction (+:s) copy(s) firstprivate (c) async wait (1)
+#pragma acc parallel loop num_gangs (10) gang reduction (+:s) firstprivate (c) async wait (1)
for (int i = 0; i < n; i++)
s += i+c;
diff --git a/libgomp/testsuite/libgomp.oacc-c-c++-common/cache-1.c b/libgomp/testsuite/libgomp.oacc-c-c++-common/cache-1.c
index 3f1f0bb376..16aaed5df7 100644
--- a/libgomp/testsuite/libgomp.oacc-c-c++-common/cache-1.c
+++ b/libgomp/testsuite/libgomp.oacc-c-c++-common/cache-1.c
@@ -1,48 +1,3 @@
-int
-main (int argc, char **argv)
-{
-#define N 2
- int a[N], b[N];
- int i;
+/* OpenACC cache directive. */
- for (i = 0; i < N; i++)
- {
- a[i] = 3;
- b[i] = 0;
- }
-
-#pragma acc parallel copyin (a[0:N]) copyout (b[0:N])
-{
- int ii;
-
- for (ii = 0; ii < N; ii++)
- {
- const int idx = ii;
- int n = 1;
- const int len = n;
-
-#pragma acc cache (a[0:N])
-
-#pragma acc cache (a[0:N], b[0:N])
-
-#pragma acc cache (a[0])
-
-#pragma acc cache (a[0], a[1], b[0:N])
-
-#pragma acc cache (a[idx])
-
-#pragma acc cache (a[idx:len])
-
- b[ii] = a[ii];
- }
-}
-
-
- for (i = 0; i < N; i++)
- {
- if (a[i] != b[i])
- __builtin_abort ();
- }
-
- return 0;
-}
+#include "../../../gcc/testsuite/c-c++-common/goacc/cache-1.c"
diff --git a/libgomp/testsuite/libgomp.oacc-c-c++-common/collapse-2.c b/libgomp/testsuite/libgomp.oacc-c-c++-common/collapse-2.c
index 62bb5e0bbd..1ea0a6b846 100644
--- a/libgomp/testsuite/libgomp.oacc-c-c++-common/collapse-2.c
+++ b/libgomp/testsuite/libgomp.oacc-c-c++-common/collapse-2.c
@@ -8,7 +8,7 @@ main (void)
int i, j, k, l = 0, f = 0, x = 0;
int m1 = 4, m2 = -5, m3 = 17;
-#pragma acc parallel copy(l)
+#pragma acc parallel
#pragma acc loop seq collapse(3) reduction(+:l)
for (i = -2; i < m1; i++)
for (j = m2; j < -2; j++)
diff --git a/libgomp/testsuite/libgomp.oacc-c-c++-common/collapse-4.c b/libgomp/testsuite/libgomp.oacc-c-c++-common/collapse-4.c
index 52dd435324..ea652b69e2 100644
--- a/libgomp/testsuite/libgomp.oacc-c-c++-common/collapse-4.c
+++ b/libgomp/testsuite/libgomp.oacc-c-c++-common/collapse-4.c
@@ -11,7 +11,7 @@ main (void)
memset (b, '\0', sizeof (b));
-#pragma acc parallel copy(b[0:3][0:3]) copy(l)
+#pragma acc parallel copy(b[0:3][0:3])
{
#pragma acc loop collapse(2) reduction(+:l)
for (i = 0; i < 2; i++)
diff --git a/libgomp/testsuite/libgomp.oacc-c-c++-common/combined-reduction.c b/libgomp/testsuite/libgomp.oacc-c-c++-common/combined-reduction.c
new file mode 100644
index 0000000000..b5ce4ed7b3
--- /dev/null
+++ b/libgomp/testsuite/libgomp.oacc-c-c++-common/combined-reduction.c
@@ -0,0 +1,23 @@
+/* Test a combined acc parallel loop reduction. */
+
+/* { dg-do run } */
+
+#include <assert.h>
+
+int
+main ()
+{
+ int i, v1 = 0, v2 = 0, n = 100;
+
+#pragma acc parallel loop reduction(+:v1, v2)
+ for (i = 0; i < n; i++)
+ {
+ v1++;
+ v2++;
+ }
+
+ assert (v1 == n);
+ assert (v2 == n);
+
+ return 0;
+}
diff --git a/libgomp/testsuite/libgomp.oacc-c-c++-common/loop-red-g-1.c b/libgomp/testsuite/libgomp.oacc-c-c++-common/loop-red-g-1.c
index a8684f9587..d241d41362 100644
--- a/libgomp/testsuite/libgomp.oacc-c-c++-common/loop-red-g-1.c
+++ b/libgomp/testsuite/libgomp.oacc-c-c++-common/loop-red-g-1.c
@@ -11,7 +11,7 @@ int main ()
int ondev = 0;
int t = 0, h = 0;
-#pragma acc parallel num_gangs(32) vector_length(32) copy(t) copy(ondev)
+#pragma acc parallel num_gangs(32) vector_length(32) copy(ondev)
{
#pragma acc loop gang reduction (+:t)
for (unsigned ix = 0; ix < N; ix++)
diff --git a/libgomp/testsuite/libgomp.oacc-c-c++-common/loop-red-gwv-1.c b/libgomp/testsuite/libgomp.oacc-c-c++-common/loop-red-gwv-1.c
index 3b104cf2f4..4ae4b7c124 100644
--- a/libgomp/testsuite/libgomp.oacc-c-c++-common/loop-red-gwv-1.c
+++ b/libgomp/testsuite/libgomp.oacc-c-c++-common/loop-red-gwv-1.c
@@ -11,7 +11,7 @@ int main ()
int ondev = 0;
int t = 0, h = 0;
-#pragma acc parallel num_gangs(32) num_workers(32) vector_length(32) copy(t) copy(ondev)
+#pragma acc parallel num_gangs(32) num_workers(32) vector_length(32) copy(ondev)
{
#pragma acc loop gang worker vector reduction(+:t)
for (unsigned ix = 0; ix < N; ix++)
diff --git a/libgomp/testsuite/libgomp.oacc-c-c++-common/loop-red-v-1.c b/libgomp/testsuite/libgomp.oacc-c-c++-common/loop-red-v-1.c
index b77ae76e32..0556455d62 100644
--- a/libgomp/testsuite/libgomp.oacc-c-c++-common/loop-red-v-1.c
+++ b/libgomp/testsuite/libgomp.oacc-c-c++-common/loop-red-v-1.c
@@ -12,7 +12,7 @@ int main ()
int ondev = 0;
int t = 0, h = 0;
-#pragma acc parallel vector_length(32) copy(t) copy(ondev)
+#pragma acc parallel vector_length(32) copy(ondev)
{
#pragma acc loop vector reduction (+:t)
for (unsigned ix = 0; ix < N; ix++)
diff --git a/libgomp/testsuite/libgomp.oacc-c-c++-common/loop-red-w-1.c b/libgomp/testsuite/libgomp.oacc-c-c++-common/loop-red-w-1.c
index 9cc12b3add..19021d9d06 100644
--- a/libgomp/testsuite/libgomp.oacc-c-c++-common/loop-red-w-1.c
+++ b/libgomp/testsuite/libgomp.oacc-c-c++-common/loop-red-w-1.c
@@ -11,7 +11,7 @@ int main ()
int ondev = 0;
int t = 0, h = 0;
-#pragma acc parallel num_workers(32) vector_length(32) copy(t) copy(ondev)
+#pragma acc parallel num_workers(32) vector_length(32) copy(ondev)
{
#pragma acc loop worker reduction(+:t)
for (unsigned ix = 0; ix < N; ix++)
diff --git a/libgomp/testsuite/libgomp.oacc-c-c++-common/loop-red-wv-1.c b/libgomp/testsuite/libgomp.oacc-c-c++-common/loop-red-wv-1.c
index 398b7cc97e..0fec2dcfd9 100644
--- a/libgomp/testsuite/libgomp.oacc-c-c++-common/loop-red-wv-1.c
+++ b/libgomp/testsuite/libgomp.oacc-c-c++-common/loop-red-wv-1.c
@@ -10,7 +10,7 @@ int main ()
int ondev = 0;
int t = 0, h = 0;
-#pragma acc parallel num_workers(32) vector_length(32) copy(t) copy(ondev)
+#pragma acc parallel num_workers(32) vector_length(32) copy(ondev)
{
#pragma acc loop worker vector reduction (+:t)
for (unsigned ix = 0; ix < N; ix++)
diff --git a/libgomp/testsuite/libgomp.oacc-c-c++-common/reduction-7.c b/libgomp/testsuite/libgomp.oacc-c-c++-common/reduction-7.c
index 76c33e4470..cc3cd07301 100644
--- a/libgomp/testsuite/libgomp.oacc-c-c++-common/reduction-7.c
+++ b/libgomp/testsuite/libgomp.oacc-c-c++-common/reduction-7.c
@@ -13,8 +13,7 @@ void g_np_1()
for (i = 0; i < 1024; i++)
arr[i] = i;
- #pragma acc parallel num_gangs(32) num_workers(32) vector_length(32) \
- copy(res)
+ #pragma acc parallel num_gangs(32) num_workers(32) vector_length(32)
{
#pragma acc loop gang reduction(+:res)
for (i = 0; i < 1024; i++)
@@ -28,8 +27,7 @@ void g_np_1()
res = hres = 1;
- #pragma acc parallel num_gangs(32) num_workers(32) vector_length(32) \
- copy(res)
+ #pragma acc parallel num_gangs(32) num_workers(32) vector_length(32)
{
#pragma acc loop gang reduction(*:res)
for (i = 0; i < 12; i++)
@@ -53,8 +51,7 @@ void gv_np_1()
for (i = 0; i < 1024; i++)
arr[i] = i;
- #pragma acc parallel num_gangs(32) num_workers(32) vector_length(32) \
- copy(res)
+ #pragma acc parallel num_gangs(32) num_workers(32) vector_length(32)
{
#pragma acc loop gang vector reduction(+:res)
for (i = 0; i < 1024; i++)
@@ -78,8 +75,7 @@ void gw_np_1()
for (i = 0; i < 1024; i++)
arr[i] = i;
- #pragma acc parallel num_gangs(32) num_workers(32) vector_length(32) \
- copy(res)
+ #pragma acc parallel num_gangs(32) num_workers(32) vector_length(32)
{
#pragma acc loop gang worker reduction(+:res)
for (i = 0; i < 1024; i++)
@@ -103,8 +99,7 @@ void gwv_np_1()
for (i = 0; i < 1024; i++)
arr[i] = i;
- #pragma acc parallel num_gangs(32) num_workers(32) vector_length(32) \
- copy(res)
+ #pragma acc parallel num_gangs(32) num_workers(32) vector_length(32)
{
#pragma acc loop gang worker vector reduction(+:res)
for (i = 0; i < 1024; i++)
@@ -128,8 +123,7 @@ void gwv_np_2()
for (i = 0; i < 32768; i++)
arr[i] = i;
- #pragma acc parallel num_gangs(32) num_workers(32) vector_length(32) \
- copy(res)
+ #pragma acc parallel num_gangs(32) num_workers(32) vector_length(32)
{
#pragma acc loop gang reduction(+:res)
for (j = 0; j < 32; j++)
@@ -161,7 +155,7 @@ void gwv_np_3()
arr[i] = i;
#pragma acc parallel num_gangs(32) num_workers(32) vector_length(32) \
- copyin(arr) copy(res)
+ copyin(arr)
{
#pragma acc loop gang reduction(+:res)
for (j = 0; j < 32; j++)
@@ -191,8 +185,7 @@ void gwv_np_4()
for (i = 0; i < 32768; i++)
arr[i] = i;
- #pragma acc parallel num_gangs(32) num_workers(32) vector_length(32) \
- copy(res, mres)
+ #pragma acc parallel num_gangs(32) num_workers(32) vector_length(32)
{
#pragma acc loop gang reduction(+:res) reduction(max:mres)
for (j = 0; j < 32; j++)
diff --git a/libgomp/testsuite/libgomp.oacc-c-c++-common/reduction-cplx-dbl.c b/libgomp/testsuite/libgomp.oacc-c-c++-common/reduction-cplx-dbl.c
index 9c8e825df5..aa19d490d1 100644
--- a/libgomp/testsuite/libgomp.oacc-c-c++-common/reduction-cplx-dbl.c
+++ b/libgomp/testsuite/libgomp.oacc-c-c++-common/reduction-cplx-dbl.c
@@ -22,7 +22,7 @@ vector (Type ary[N], Type sum, Type prod)
{
Type tsum = 0, tprod = 1;
-#pragma acc parallel vector_length(32) copyin(ary[0:N]) copy (tsum, tprod)
+#pragma acc parallel vector_length(32) copyin(ary[0:N])
{
#pragma acc loop vector reduction(+:tsum) reduction (*:tprod)
for (int ix = 0; ix < N; ix++)
@@ -46,7 +46,7 @@ worker (Type ary[N], Type sum, Type prod)
{
Type tsum = 0, tprod = 1;
-#pragma acc parallel num_workers(32) copyin(ary[0:N]) copy (tsum, tprod)
+#pragma acc parallel num_workers(32) copyin(ary[0:N])
{
#pragma acc loop worker reduction(+:tsum) reduction (*:tprod)
for (int ix = 0; ix < N; ix++)
@@ -70,7 +70,7 @@ gang (Type ary[N], Type sum, Type prod)
{
Type tsum = 0, tprod = 1;
-#pragma acc parallel num_gangs (32) copyin(ary[0:N]) copy (tsum, tprod)
+#pragma acc parallel num_gangs (32) copyin(ary[0:N])
{
#pragma acc loop gang reduction(+:tsum) reduction (*:tprod)
for (int ix = 0; ix < N; ix++)
diff --git a/libgomp/testsuite/libgomp.oacc-c-c++-common/reduction-cplx-flt.c b/libgomp/testsuite/libgomp.oacc-c-c++-common/reduction-cplx-flt.c
index 46bb70f27e..5c533f2510 100644
--- a/libgomp/testsuite/libgomp.oacc-c-c++-common/reduction-cplx-flt.c
+++ b/libgomp/testsuite/libgomp.oacc-c-c++-common/reduction-cplx-flt.c
@@ -22,7 +22,7 @@ vector (Type ary[N], Type sum, Type prod)
{
Type tsum = 0, tprod = 1;
-#pragma acc parallel vector_length(32) copyin(ary[0:N]) copy (tsum, tprod)
+#pragma acc parallel vector_length(32) copyin(ary[0:N])
{
#pragma acc loop vector reduction(+:tsum) reduction (*:tprod)
for (int ix = 0; ix < N; ix++)
@@ -46,7 +46,7 @@ worker (Type ary[N], Type sum, Type prod)
{
Type tsum = 0, tprod = 1;
-#pragma acc parallel num_workers(32) copyin(ary[0:N]) copy (tsum, tprod)
+#pragma acc parallel num_workers(32) copyin(ary[0:N])
{
#pragma acc loop worker reduction(+:tsum) reduction (*:tprod)
for (int ix = 0; ix < N; ix++)
@@ -70,7 +70,7 @@ gang (Type ary[N], Type sum, Type prod)
{
Type tsum = 0, tprod = 1;
-#pragma acc parallel num_gangs (32) copyin(ary[0:N]) copy (tsum, tprod)
+#pragma acc parallel num_gangs (32) copyin(ary[0:N])
{
#pragma acc loop gang reduction(+:tsum) reduction (*:tprod)
for (int ix = 0; ix < N; ix++)
diff --git a/libgomp/testsuite/libgomp.oacc-c-c++-common/reduction-dbl.c b/libgomp/testsuite/libgomp.oacc-c-c++-common/reduction-dbl.c
index 430b199312..987c4ccba5 100644
--- a/libgomp/testsuite/libgomp.oacc-c-c++-common/reduction-dbl.c
+++ b/libgomp/testsuite/libgomp.oacc-c-c++-common/reduction-dbl.c
@@ -19,7 +19,7 @@ vector (Type ary[N], Type sum, Type prod)
{
Type tsum = 0, tprod = 1;
-#pragma acc parallel vector_length(32) copyin(ary[0:N]) copy (tsum, tprod)
+#pragma acc parallel vector_length(32) copyin(ary[0:N])
{
#pragma acc loop vector reduction(+:tsum) reduction (*:tprod)
for (int ix = 0; ix < N; ix++)
@@ -43,7 +43,7 @@ worker (Type ary[N], Type sum, Type prod)
{
Type tsum = 0, tprod = 1;
-#pragma acc parallel num_workers(32) copyin(ary[0:N]) copy (tsum, tprod)
+#pragma acc parallel num_workers(32) copyin(ary[0:N])
{
#pragma acc loop worker reduction(+:tsum) reduction (*:tprod)
for (int ix = 0; ix < N; ix++)
@@ -67,7 +67,7 @@ gang (Type ary[N], Type sum, Type prod)
{
Type tsum = 0, tprod = 1;
-#pragma acc parallel num_gangs (32) copyin(ary[0:N]) copy (tsum, tprod)
+#pragma acc parallel num_gangs (32) copyin(ary[0:N])
{
#pragma acc loop gang reduction(+:tsum) reduction (*:tprod)
for (int ix = 0; ix < N; ix++)
diff --git a/libgomp/testsuite/libgomp.oacc-c-c++-common/reduction-flt.c b/libgomp/testsuite/libgomp.oacc-c-c++-common/reduction-flt.c
index e6947fa509..f08650a83a 100644
--- a/libgomp/testsuite/libgomp.oacc-c-c++-common/reduction-flt.c
+++ b/libgomp/testsuite/libgomp.oacc-c-c++-common/reduction-flt.c
@@ -19,7 +19,7 @@ vector (Type ary[N], Type sum, Type prod)
{
Type tsum = 0, tprod = 1;
-#pragma acc parallel vector_length(32) copyin(ary[0:N]) copy (tsum, tprod)
+#pragma acc parallel vector_length(32) copyin(ary[0:N])
{
#pragma acc loop vector reduction(+:tsum) reduction (*:tprod)
for (int ix = 0; ix < N; ix++)
@@ -43,7 +43,7 @@ worker (Type ary[N], Type sum, Type prod)
{
Type tsum = 0, tprod = 1;
-#pragma acc parallel num_workers(32) copyin(ary[0:N]) copy (tsum, tprod)
+#pragma acc parallel num_workers(32) copyin(ary[0:N])
{
#pragma acc loop worker reduction(+:tsum) reduction (*:tprod)
for (int ix = 0; ix < N; ix++)
@@ -67,7 +67,7 @@ gang (Type ary[N], Type sum, Type prod)
{
Type tsum = 0, tprod = 1;
-#pragma acc parallel num_gangs (32) copyin(ary[0:N]) copy (tsum, tprod)
+#pragma acc parallel num_gangs (32) copyin(ary[0:N])
{
#pragma acc loop gang reduction(+:tsum) reduction (*:tprod)
for (int ix = 0; ix < N; ix++)
diff --git a/libgomp/testsuite/libgomp.oacc-c/nested-function-1.c b/libgomp/testsuite/libgomp.oacc-c/nested-function-1.c
new file mode 100644
index 0000000000..fb2a3acdfa
--- /dev/null
+++ b/libgomp/testsuite/libgomp.oacc-c/nested-function-1.c
@@ -0,0 +1,52 @@
+/* Exercise nested function decomposition, gcc/tree-nested.c. */
+
+int
+main (void)
+{
+ void test1 ()
+ {
+ int i, j, k;
+ int a[4][7][8];
+
+ __builtin_memset (a, 0, sizeof (a));
+
+#pragma acc parallel
+#pragma acc loop collapse(4 - 1)
+ for (i = 1; i <= 3; i++)
+ for (j = 4; j <= 6; j++)
+ for (k = 5; k <= 7; k++)
+ a[i][j][k] = i + j + k;
+
+ for (i = 1; i <= 3; i++)
+ for (j = 4; j <= 6; j++)
+ for (k = 5; k <= 7; k++)
+ if (a[i][j][k] != i + j + k)
+ __builtin_abort();
+ }
+
+ void test2 ()
+ {
+ int i, j, k;
+ int a[4][4][4];
+
+ __builtin_memset (a, 0, sizeof (a));
+
+#pragma acc parallel
+#pragma acc loop collapse(3)
+ for (i = 1; i <= 3; i++)
+ for (j = 1; j <= 3; j++)
+ for (k = 1; k <= 3; k++)
+ a[i][j][k] = 1;
+
+ for (i = 1; i <= 3; i++)
+ for (j = 1; j <= 3; j++)
+ for (k = 1; k <= 3; k++)
+ if (a[i][j][k] != 1)
+ __builtin_abort ();
+ }
+
+ test1 ();
+ test2 ();
+
+ return 0;
+}
diff --git a/libgomp/testsuite/libgomp.oacc-c/nested-function-2.c b/libgomp/testsuite/libgomp.oacc-c/nested-function-2.c
new file mode 100644
index 0000000000..2c3f3feb7f
--- /dev/null
+++ b/libgomp/testsuite/libgomp.oacc-c/nested-function-2.c
@@ -0,0 +1,155 @@
+/* Exercise nested function decomposition, gcc/tree-nested.c. */
+
+int
+main (void)
+{
+ int p1 = 2, p2 = 6, p3 = 0, p4 = 4, p5 = 13, p6 = 18, p7 = 1, p8 = 1, p9 = 1;
+
+ void test1 ()
+ {
+ int i, j, k;
+ int a[4][4][4];
+
+ __builtin_memset (a, '\0', sizeof (a));
+
+#pragma acc parallel
+#pragma acc loop collapse(3)
+ for (i = 1; i <= 3; i++)
+ for (j = 1; j <= 3; j++)
+ for (k = 2; k <= 3; k++)
+ a[i][j][k] = 1;
+
+ for (i = 1; i <= 3; i++)
+ for (j = 1; j <= 3; j++)
+ for (k = 2; k <= 3; k++)
+ if (a[i][j][k] != 1)
+ __builtin_abort();
+ }
+
+ void test2 (int v1, int v2, int v3, int v4, int v5, int v6)
+ {
+ int i, j, k, l = 0, r = 0;
+ int a[7][5][19];
+ int b[7][5][19];
+
+ __builtin_memset (a, '\0', sizeof (a));
+ __builtin_memset (b, '\0', sizeof (b));
+
+#pragma acc parallel reduction (||:l)
+#pragma acc loop reduction (||:l) collapse(3)
+ for (i = v1; i <= v2; i++)
+ for (j = v3; j <= v4; j++)
+ for (k = v5; k <= v6; k++)
+ {
+ l = l || i < 2 || i > 6 || j < 0 || j > 4 || k < 13 || k > 18;
+ if (!l)
+ a[i][j][k] += 1;
+ }
+
+ for (i = v1; i <= v2; i++)
+ for (j = v3; j <= v4; j++)
+ for (k = v5; k <= v6; k++)
+ {
+ r = r || i < 2 || i > 6 || j < 0 || j > 4 || k < 13 || k > 18;
+ if (!r)
+ b[i][j][k] += 1;
+ }
+
+ if (l != r)
+ __builtin_abort ();
+
+ for (i = v1; i <= v2; i++)
+ for (j = v3; j <= v4; j++)
+ for (k = v5; k <= v6; k++)
+ if (b[i][j][k] != a[i][j][k])
+ __builtin_abort ();
+ }
+
+ void test3 (int v1, int v2, int v3, int v4, int v5, int v6, int v7, int v8,
+ int v9)
+ {
+ int i, j, k, l = 0, r = 0;
+ int a[7][5][19];
+ int b[7][5][19];
+
+ __builtin_memset (a, '\0', sizeof (a));
+ __builtin_memset (b, '\0', sizeof (b));
+
+#pragma acc parallel reduction (||:l)
+#pragma acc loop reduction (||:l) collapse(3)
+ for (i = v1; i <= v2; i += v7)
+ for (j = v3; j <= v4; j += v8)
+ for (k = v5; k <= v6; k += v9)
+ {
+ l = l || i < 2 || i > 6 || j < 0 || j > 4 || k < 13 || k > 18;
+ if (!l)
+ a[i][j][k] += 1;
+ }
+
+ for (i = v1; i <= v2; i += v7)
+ for (j = v3; j <= v4; j += v8)
+ for (k = v5; k <= v6; k += v9)
+ {
+ r = r || i < 2 || i > 6 || j < 0 || j > 4 || k < 13 || k > 18;
+ if (!r)
+ b[i][j][k] += 1;
+ }
+
+ if (l != r)
+ __builtin_abort ();
+
+ for (i = v1; i <= v2; i++)
+ for (j = v3; j <= v4; j++)
+ for (k = v5; k <= v6; k++)
+ if (b[i][j][k] != a[i][j][k])
+ __builtin_abort ();
+ }
+
+ void test4 ()
+ {
+ int i, j, k, l = 0, r = 0;
+ int a[7][5][19];
+ int b[7][5][19];
+ int v1 = p1, v2 = p2, v3 = p3, v4 = p4, v5 = p5, v6 = p6, v7 = p7, v8 = p8,
+ v9 = p9;
+
+ __builtin_memset (a, '\0', sizeof (a));
+ __builtin_memset (b, '\0', sizeof (b));
+
+#pragma acc parallel reduction (||:l)
+#pragma acc loop reduction (||:l) collapse(3)
+ for (i = v1; i <= v2; i += v7)
+ for (j = v3; j <= v4; j += v8)
+ for (k = v5; k <= v6; k += v9)
+ {
+ l = l || i < 2 || i > 6 || j < 0 || j > 4 || k < 13 || k > 18;
+ if (!l)
+ a[i][j][k] += 1;
+ }
+
+ for (i = v1; i <= v2; i += v7)
+ for (j = v3; j <= v4; j += v8)
+ for (k = v5; k <= v6; k += v9)
+ {
+ r = r || i < 2 || i > 6 || j < 0 || j > 4 || k < 13 || k > 18;
+ if (!r)
+ b[i][j][k] += 1;
+ }
+
+ if (l != r)
+ __builtin_abort ();
+
+ for (i = v1; i <= v2; i++)
+ for (j = v3; j <= v4; j++)
+ for (k = v5; k <= v6; k++)
+ if (b[i][j][k] != a[i][j][k])
+ __builtin_abort ();
+ }
+
+ test1 ();
+ test2 (p1, p2, p3, p4, p5, p6);
+ test3 (p1, p2, p3, p4, p5, p6, p7, p8, p9);
+ test4 ();
+
+ return 0;
+}
diff --git a/libgomp/testsuite/libgomp.oacc-fortran/cache-1.f95 b/libgomp/testsuite/libgomp.oacc-fortran/cache-1.f95
new file mode 100644
index 0000000000..37313d8c44
--- /dev/null
+++ b/libgomp/testsuite/libgomp.oacc-fortran/cache-1.f95
@@ -0,0 +1,6 @@
+! OpenACC cache directive.
+! { dg-do run }
+! { dg-additional-options "-std=f2008" }
+! { dg-additional-options "-cpp" }
+
+#include "../../../gcc/testsuite/gfortran.dg/goacc/cache-1.f95"
diff --git a/libgomp/testsuite/libgomp.oacc-fortran/combined-reduction.f90 b/libgomp/testsuite/libgomp.oacc-fortran/combined-reduction.f90
new file mode 100644
index 0000000000..d3a61b57f1
--- /dev/null
+++ b/libgomp/testsuite/libgomp.oacc-fortran/combined-reduction.f90
@@ -0,0 +1,19 @@
+! Test a combined acc parallel loop reduction.
+
+! { dg-do run }
+
+program test
+ implicit none
+ integer i, n, var
+
+ n = 100
+ var = 0
+
+ !$acc parallel loop reduction(+:var)
+ do i = 1, 100
+ var = var + 1
+ end do
+ !$acc end parallel loop
+
+ if (var .ne. n) call abort
+end program test
diff --git a/libgomp/testsuite/libgomp.oacc-fortran/nested-function-1.f90 b/libgomp/testsuite/libgomp.oacc-fortran/nested-function-1.f90
new file mode 100644
index 0000000000..fdbca4481f
--- /dev/null
+++ b/libgomp/testsuite/libgomp.oacc-fortran/nested-function-1.f90
@@ -0,0 +1,70 @@
+! Exercise nested function decomposition, gcc/tree-nested.c.
+
+! { dg-do run }
+
+program collapse2
+ call test1
+ call test2
+contains
+ subroutine test1
+ integer :: i, j, k, a(1:3, 4:6, 5:7)
+ logical :: l
+ l = .false.
+ a(:, :, :) = 0
+ !$acc parallel reduction (.or.:l)
+ !$acc loop worker vector collapse(4 - 1)
+ do 164 i = 1, 3
+ do 164 j = 4, 6
+ do 164 k = 5, 7
+ a(i, j, k) = i + j + k
+164 end do
+ !$acc loop worker vector reduction(.or.:l) collapse(2)
+firstdo: do i = 1, 3
+ do j = 4, 6
+ do k = 5, 7
+ if (a(i, j, k) .ne. (i + j + k)) l = .true.
+ end do
+ end do
+ end do firstdo
+ !$acc end parallel
+ if (l) call abort
+ end subroutine test1
+
+ subroutine test2
+ integer :: a(3,3,3), k, kk, kkk, l, ll, lll
+ a = 0
+ !$acc parallel
+ ! Use "gang(static:1)" here and below to effectively turn gang-redundant
+ ! execution mode into something like gang-single.
+ !$acc loop gang(static:1) collapse(1)
+ do 115 k=1,3
+ !$acc loop collapse(2)
+ dokk: do kk=1,3
+ do kkk=1,3
+ a(k,kk,kkk) = 1
+ enddo
+ enddo dokk
+115 continue
+ !$acc loop gang(static:1) collapse(1)
+ do k=1,3
+ if (any(a(k,1:3,1:3).ne.1)) call abort
+ enddo
+ ! Use "gang(static:1)" here and below to effectively turn gang-redundant
+ ! execution mode into something like gang-single.
+ !$acc loop gang(static:1) collapse(1)
+ dol: do 120 l=1,3
+ !$acc loop collapse(2)
+ doll: do ll=1,3
+ do lll=1,3
+ a(l,ll,lll) = 2
+ enddo
+ enddo doll
+120 end do dol
+ !$acc loop gang(static:1) collapse(1)
+ do l=1,3
+ if (any(a(l,1:3,1:3).ne.2)) call abort
+ enddo
+ !$acc end parallel
+ end subroutine test2
+
+end program collapse2
diff --git a/libgomp/testsuite/libgomp.oacc-fortran/nested-function-2.f90 b/libgomp/testsuite/libgomp.oacc-fortran/nested-function-2.f90
new file mode 100644
index 0000000000..4e2819641e
--- /dev/null
+++ b/libgomp/testsuite/libgomp.oacc-fortran/nested-function-2.f90
@@ -0,0 +1,173 @@
+! Exercise nested function decomposition, gcc/tree-nested.c.
+
+! { dg-do run }
+
+program collapse3
+ integer :: p1, p2, p3, p4, p5, p6, p7, p8, p9
+ p1 = 2
+ p2 = 6
+ p3 = -2
+ p4 = 4
+ p5 = 13
+ p6 = 18
+ p7 = 1
+ p8 = 1
+ p9 = 1
+ call test1
+ call test2 (p1, p2, p3, p4, p5, p6)
+ call test3 (p1, p2, p3, p4, p5, p6, p7, p8, p9)
+ call test4
+contains
+ subroutine test1
+ integer :: a(3,3,3), k, kk, kkk, l, ll, lll
+ !$acc parallel
+ !$acc loop collapse(3)
+ do 115 k=1,3
+dokk: do kk=1,3
+ do kkk=1,3
+ a(k,kk,kkk) = 1
+ enddo
+ enddo dokk
+115 continue
+ !$acc end parallel
+ if (any(a(1:3,1:3,1:3).ne.1)) call abort
+ !$acc parallel
+ !$acc loop collapse(3)
+dol: do 120 l=1,3
+doll: do ll=1,3
+ do lll=1,3
+ a(l,ll,lll) = 2
+ enddo
+ enddo doll
+120 end do dol
+ !$acc end parallel
+ if (any(a(1:3,1:3,1:3).ne.2)) call abort
+ end subroutine test1
+
+ subroutine test2(v1, v2, v3, v4, v5, v6)
+ integer :: i, j, k, a(1:7, -3:5, 12:19), b(1:7, -3:5, 12:19)
+ integer :: v1, v2, v3, v4, v5, v6
+ logical :: l, r
+ l = .false.
+ r = .false.
+ a(:, :, :) = 0
+ b(:, :, :) = 0
+ !$acc parallel reduction (.or.:l)
+ !$acc loop reduction (.or.:l) collapse (3)
+ do i = v1, v2
+ do j = v3, v4
+ do k = v5, v6
+ l = l.or.i.lt.2.or.i.gt.6.or.j.lt.-2.or.j.gt.4
+ l = l.or.k.lt.13.or.k.gt.18
+ if (.not.l) a(i, j, k) = a(i, j, k) + 1
+ end do
+ end do
+ end do
+ !$acc end parallel
+ do i = v1, v2
+ do j = v3, v4
+ do k = v5, v6
+ r = r.or.i.lt.2.or.i.gt.6.or.j.lt.-2.or.j.gt.4
+ r = r.or.k.lt.13.or.k.gt.18
+ if (.not.l) b(i, j, k) = b(i, j, k) + 1
+ end do
+ end do
+ end do
+ if (l .neqv. r) call abort
+ do i = v1, v2
+ do j = v3, v4
+ do k = v5, v6
+ if (a(i, j, k) .ne. b(i, j, k)) call abort
+ end do
+ end do
+ end do
+ end subroutine test2
+
+ subroutine test3(v1, v2, v3, v4, v5, v6, v7, v8, v9)
+ integer :: i, j, k, a(1:7, -3:5, 12:19), b(1:7, -3:5, 12:19)
+ integer :: v1, v2, v3, v4, v5, v6, v7, v8, v9
+ logical :: l, r
+ l = .false.
+ r = .false.
+ a(:, :, :) = 0
+ b(:, :, :) = 0
+ !$acc parallel reduction (.or.:l)
+ !$acc loop reduction (.or.:l) collapse (3)
+ do i = v1, v2, v7
+ do j = v3, v4, v8
+ do k = v5, v6, v9
+ l = l.or.i.lt.2.or.i.gt.6.or.j.lt.-2.or.j.gt.4
+ l = l.or.k.lt.13.or.k.gt.18
+ if (.not.l) a(i, j, k) = a(i, j, k) + 1
+ end do
+ end do
+ end do
+ !$acc end parallel
+ do i = v1, v2, v7
+ do j = v3, v4, v8
+ do k = v5, v6, v9
+ r = r.or.i.lt.2.or.i.gt.6.or.j.lt.-2.or.j.gt.4
+ r = r.or.k.lt.13.or.k.gt.18
+ if (.not.l) b(i, j, k) = b(i, j, k) + 1
+ end do
+ end do
+ end do
+ if (l .neqv. r) call abort
+ do i = v1, v2, v7
+ do j = v3, v4, v8
+ do k = v5, v6, v9
+ if (a(i, j, k) .ne. b(i, j, k)) call abort
+ end do
+ end do
+ end do
+ end subroutine test3
+
+ subroutine test4
+ integer :: i, j, k, a(1:7, -3:5, 12:19), b(1:7, -3:5, 12:19)
+ integer :: v1, v2, v3, v4, v5, v6, v7, v8, v9
+ logical :: l, r
+ l = .false.
+ r = .false.
+ a(:, :, :) = 0
+ b(:, :, :) = 0
+ v1 = p1
+ v2 = p2
+ v3 = p3
+ v4 = p4
+ v5 = p5
+ v6 = p6
+ v7 = p7
+ v8 = p8
+ v9 = p9
+ !$acc parallel reduction (.or.:l)
+ !$acc loop reduction (.or.:l) collapse (3)
+ do i = v1, v2, v7
+ do j = v3, v4, v8
+ do k = v5, v6, v9
+ l = l.or.i.lt.2.or.i.gt.6.or.j.lt.-2.or.j.gt.4
+ l = l.or.k.lt.13.or.k.gt.18
+ if (.not.l) a(i, j, k) = a(i, j, k) + 1
+ end do
+ end do
+ end do
+ !$acc end parallel
+ do i = v1, v2, v7
+ do j = v3, v4, v8
+ do k = v5, v6, v9
+ r = r.or.i.lt.2.or.i.gt.6.or.j.lt.-2.or.j.gt.4
+ r = r.or.k.lt.13.or.k.gt.18
+ if (.not.r) b(i, j, k) = b(i, j, k) + 1
+ end do
+ end do
+ end do
+ if (l .neqv. r) call abort
+ do i = v1, v2, v7
+ do j = v3, v4, v8
+ do k = v5, v6, v9
+ if (a(i, j, k) .ne. b(i, j, k)) call abort
+ end do
+ end do
+ end do
+ end subroutine test4
+
+end program collapse3
diff --git a/libgomp/testsuite/libgomp.oacc-fortran/nested-function-3.f90 b/libgomp/testsuite/libgomp.oacc-fortran/nested-function-3.f90
new file mode 100644
index 0000000000..2f6485ef8c
--- /dev/null
+++ b/libgomp/testsuite/libgomp.oacc-fortran/nested-function-3.f90
@@ -0,0 +1,244 @@
+! Exercise nested function decomposition, gcc/tree-nested.c.
+
+! { dg-do run }
+
+program sub_collapse_3
+ call test1
+ call test2 (2, 6, -2, 4, 13, 18)
+ call test3 (2, 6, -2, 4, 13, 18, 1, 1, 1)
+ call test4
+ call test5 (2, 6, -2, 4, 13, 18)
+ call test6 (2, 6, -2, 4, 13, 18, 1, 1, 1)
+contains
+ subroutine test1
+ integer :: a(3,3,3), k, kk, kkk, l, ll, lll
+ !$acc parallel
+ !$acc loop collapse(3)
+ do 115 k=1,3
+dokk: do kk=1,3
+ do kkk=1,3
+ a(k,kk,kkk) = 1
+ enddo
+ enddo dokk
+115 continue
+ !$acc end parallel
+ if (any(a(1:3,1:3,1:3).ne.1)) call abort
+ !$acc parallel
+ !$acc loop collapse(3)
+dol: do 120 l=1,3
+doll: do ll=1,3
+ do lll=1,3
+ a(l,ll,lll) = 2
+ enddo
+ enddo doll
+120 end do dol
+ !$acc end parallel
+ if (any(a(1:3,1:3,1:3).ne.2)) call abort
+ end subroutine test1
+
+ subroutine test2(v1, v2, v3, v4, v5, v6)
+ integer :: i, j, k, a(1:7, -3:5, 12:19), b(1:7, -3:5, 12:19)
+ integer :: v1, v2, v3, v4, v5, v6
+ logical :: l, r
+ l = .false.
+ r = .false.
+ a(:, :, :) = 0
+ b(:, :, :) = 0
+ !$acc parallel pcopyin (v1, v2, v3, v4, v5, v6) reduction (.or.:l)
+ !$acc loop reduction (.or.:l) collapse (3)
+ do i = v1, v2
+ do j = v3, v4
+ do k = v5, v6
+ l = l.or.i.lt.2.or.i.gt.6.or.j.lt.-2.or.j.gt.4
+ l = l.or.k.lt.13.or.k.gt.18
+ if (.not.l) a(i, j, k) = a(i, j, k) + 1
+ end do
+ end do
+ end do
+ !$acc end parallel
+ do i = v1, v2
+ do j = v3, v4
+ do k = v5, v6
+ r = r.or.i.lt.2.or.i.gt.6.or.j.lt.-2.or.j.gt.4
+ r = r.or.k.lt.13.or.k.gt.18
+ if (.not.l) b(i, j, k) = b(i, j, k) + 1
+ end do
+ end do
+ end do
+ if (l .neqv. r) call abort
+ do i = v1, v2
+ do j = v3, v4
+ do k = v5, v6
+ if (a(i, j, k) .ne. b(i, j, k)) call abort
+ end do
+ end do
+ end do
+ end subroutine test2
+
+ subroutine test3(v1, v2, v3, v4, v5, v6, v7, v8, v9)
+ integer :: i, j, k, a(1:7, -3:5, 12:19), b(1:7, -3:5, 12:19)
+ integer :: v1, v2, v3, v4, v5, v6, v7, v8, v9
+ logical :: l, r
+ l = .false.
+ r = .false.
+ a(:, :, :) = 0
+ b(:, :, :) = 0
+ !$acc parallel pcopyin (v1, v2, v3, v4, v5, v6, v7, v8, v9) reduction (.or.:l)
+ !$acc loop reduction (.or.:l) collapse (3)
+ do i = v1, v2, v7
+ do j = v3, v4, v8
+ do k = v5, v6, v9
+ l = l.or.i.lt.2.or.i.gt.6.or.j.lt.-2.or.j.gt.4
+ l = l.or.k.lt.13.or.k.gt.18
+ if (.not.l) a(i, j, k) = a(i, j, k) + 1
+ end do
+ end do
+ end do
+ !$acc end parallel
+ do i = v1, v2, v7
+ do j = v3, v4, v8
+ do k = v5, v6, v9
+ r = r.or.i.lt.2.or.i.gt.6.or.j.lt.-2.or.j.gt.4
+ r = r.or.k.lt.13.or.k.gt.18
+ if (.not.l) b(i, j, k) = b(i, j, k) + 1
+ end do
+ end do
+ end do
+ if (l .neqv. r) call abort
+ do i = v1, v2, v7
+ do j = v3, v4, v8
+ do k = v5, v6, v9
+ if (a(i, j, k) .ne. b(i, j, k)) call abort
+ end do
+ end do
+ end do
+ end subroutine test3
+
+ subroutine test4
+ integer :: i, j, k, a(1:7, -3:5, 12:19), b(1:7, -3:5, 12:19)
+ integer :: v1, v2, v3, v4, v5, v6, v7, v8, v9
+ logical :: l, r
+ l = .false.
+ r = .false.
+ a(:, :, :) = 0
+ b(:, :, :) = 0
+ v1 = 2
+ v2 = 6
+ v3 = -2
+ v4 = 4
+ v5 = 13
+ v6 = 18
+ v7 = 1
+ v8 = 1
+ v9 = 1
+ !$acc parallel pcopyin (v1, v2, v3, v4, v5, v6, v7, v8, v9) reduction (.or.:l)
+ !$acc loop reduction (.or.:l) collapse (3)
+ do i = v1, v2, v7
+ do j = v3, v4, v8
+ do k = v5, v6, v9
+ l = l.or.i.lt.2.or.i.gt.6.or.j.lt.-2.or.j.gt.4
+ l = l.or.k.lt.13.or.k.gt.18
+ if (.not.l) a(i, j, k) = a(i, j, k) + 1
+ end do
+ end do
+ end do
+ !$acc end parallel
+ do i = v1, v2, v7
+ do j = v3, v4, v8
+ do k = v5, v6, v9
+ r = r.or.i.lt.2.or.i.gt.6.or.j.lt.-2.or.j.gt.4
+ r = r.or.k.lt.13.or.k.gt.18
+ if (.not.r) b(i, j, k) = b(i, j, k) + 1
+ end do
+ end do
+ end do
+ if (l .neqv. r) call abort
+ do i = v1, v2, v7
+ do j = v3, v4, v8
+ do k = v5, v6, v9
+ if (a(i, j, k) .ne. b(i, j, k)) call abort
+ end do
+ end do
+ end do
+ end subroutine test4
+
+ subroutine test5(v1, v2, v3, v4, v5, v6)
+ integer :: i, j, k, a(1:7, -3:5, 12:19), b(1:7, -3:5, 12:19)
+ integer :: v1, v2, v3, v4, v5, v6
+ logical :: l, r
+ l = .false.
+ r = .false.
+ a(:, :, :) = 0
+ b(:, :, :) = 0
+ !$acc parallel pcopyin (v1, v2, v3, v4, v5, v6) reduction (.or.:l)
+ !$acc loop reduction (.or.:l) collapse (3)
+ do i = v1, v2
+ do j = v3, v4
+ do k = v5, v6
+ l = l.or.i.lt.2.or.i.gt.6.or.j.lt.-2.or.j.gt.4
+ l = l.or.k.lt.13.or.k.gt.18
+ if (.not.l) a(i, j, k) = a(i, j, k) + 1
+ end do
+ end do
+ end do
+ !$acc end parallel
+ do i = v1, v2
+ do j = v3, v4
+ do k = v5, v6
+ r = r.or.i.lt.2.or.i.gt.6.or.j.lt.-2.or.j.gt.4
+ r = r.or.k.lt.13.or.k.gt.18
+ if (.not.r) b(i, j, k) = b(i, j, k) + 1
+ end do
+ end do
+ end do
+ if (l .neqv. r) call abort
+ do i = v1, v2
+ do j = v3, v4
+ do k = v5, v6
+ if (a(i, j, k) .ne. b(i, j, k)) call abort
+ end do
+ end do
+ end do
+ end subroutine test5
+
+ subroutine test6(v1, v2, v3, v4, v5, v6, v7, v8, v9)
+ integer :: i, j, k, a(1:7, -3:5, 12:19), b(1:7, -3:5, 12:19)
+ integer :: v1, v2, v3, v4, v5, v6, v7, v8, v9
+ logical :: l, r
+ l = .false.
+ r = .false.
+ a(:, :, :) = 0
+ b(:, :, :) = 0
+ !$acc parallel pcopyin (v1, v2, v3, v4, v5, v6, v7, v8, v9) reduction (.or.:l)
+ !$acc loop reduction (.or.:l) collapse (3)
+ do i = v1, v2, v7
+ do j = v3, v4, v8
+ do k = v5, v6, v9
+ l = l.or.i.lt.2.or.i.gt.6.or.j.lt.-2.or.j.gt.4
+ l = l.or.k.lt.13.or.k.gt.18
+ if (.not.l) a(i, j, k) = a(i, j, k) + 1
+ m = i * 100 + j * 10 + k
+ end do
+ end do
+ end do
+ !$acc end parallel
+ do i = v1, v2, v7
+ do j = v3, v4, v8
+ do k = v5, v6, v9
+ r = r.or.i.lt.2.or.i.gt.6.or.j.lt.-2.or.j.gt.4
+ r = r.or.k.lt.13.or.k.gt.18
+ if (.not.r) b(i, j, k) = b(i, j, k) + 1
+ end do
+ end do
+ end do
+ if (l .neqv. r) call abort
+ do i = v1, v2, v7
+ do j = v3, v4, v8
+ do k = v5, v6, v9
+ if (a(i, j, k) .ne. b(i, j, k)) call abort
+ end do
+ end do
+ end do
+ end subroutine test6
+
+end program sub_collapse_3
diff --git a/libgomp/testsuite/libgomp.oacc-fortran/reduction-6.f90 b/libgomp/testsuite/libgomp.oacc-fortran/reduction-6.f90
index f3ed27527f..c10e3f97a6 100644
--- a/libgomp/testsuite/libgomp.oacc-fortran/reduction-6.f90
+++ b/libgomp/testsuite/libgomp.oacc-fortran/reduction-6.f90
@@ -19,7 +19,7 @@ program reduction
hs1 = 0
hs2 = 0
- !$acc parallel num_gangs (1000) copy(gs1, gs2)
+ !$acc parallel num_gangs (1000)
!$acc loop reduction(+:gs1, gs2) gang
do i = 1, n
gs1 = gs1 + 1
@@ -27,7 +27,7 @@ program reduction
end do
!$acc end parallel
- !$acc parallel num_workers (4) vector_length (32) copy(ws1, ws2)
+ !$acc parallel num_workers (4) vector_length (32)
!$acc loop reduction(+:ws1, ws2) worker
do i = 1, n
ws1 = ws1 + 1
@@ -35,7 +35,7 @@ program reduction
end do
!$acc end parallel
- !$acc parallel vector_length (32) copy(vs1, vs2)
+ !$acc parallel vector_length (32)
!$acc loop reduction(+:vs1, vs2) vector
do i = 1, n
vs1 = vs1 + 1
@@ -43,7 +43,7 @@ program reduction
end do
!$acc end parallel
- !$acc parallel num_gangs(8) num_workers(4) vector_length(32) copy(cs1, cs2)
+ !$acc parallel num_gangs(8) num_workers(4) vector_length(32)
!$acc loop reduction(+:cs1, cs2) gang worker vector
do i = 1, n
cs1 = cs1 + 1
@@ -74,7 +74,7 @@ program reduction
red = 0
vred = 0
- !$acc parallel num_gangs(10) vector_length(32) copy(red)
+ !$acc parallel num_gangs(10) vector_length(32)
!$acc loop reduction(+:red) gang
do i = 1, n/chunksize
!$acc loop reduction(+:red) vector
diff --git a/libgomp/testsuite/libgomp.oacc-fortran/reduction-7.f90 b/libgomp/testsuite/libgomp.oacc-fortran/reduction-7.f90
index 8ec36adf1e..1a7d69aa52 100644
--- a/libgomp/testsuite/libgomp.oacc-fortran/reduction-7.f90
+++ b/libgomp/testsuite/libgomp.oacc-fortran/reduction-7.f90
@@ -50,7 +50,7 @@ subroutine redsub_private(sum, n, arr)
end subroutine redsub_private
-! Bogus reduction on an impliclitly firstprivate variable. The results do
+! Bogus reduction on a firstprivate variable. The results do
! survive the parallel region. The goal here is to ensure that gfortran
! doesn't ICE.
@@ -58,7 +58,7 @@ subroutine redsub_bogus(sum, n)
integer :: sum, n, arr(n)
integer :: i
- !$acc parallel
+ !$acc parallel firstprivate(sum)
!$acc loop gang worker vector reduction (+:sum)
do i = 1, n
sum = sum + 1
@@ -72,7 +72,7 @@ subroutine redsub_combined(sum, n, arr)
integer :: sum, n, arr(n)
integer :: i, j
- !$acc parallel copy (arr)
+ !$acc parallel copy (arr) firstprivate(sum)
!$acc loop gang
do i = 1, n
sum = i;