public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
From: Thomas Schwinge <thomas@codesourcery.com>
To: Ilmir Usmanov <i.usmanov@samsung.com>
Cc: Evgeny Gavrin <e.gavrin@samsung.com>,
	GarbuzovViacheslav	<v.garbuzov@samsung.com>,
	Dmitri Botcharnikov <dmitry.b@samsung.com>,
	<gcc-patches@gcc.gnu.org>, <jakub@redhat.com>,
	<fortran@gcc.gnu.org>
Subject: Re: [PATCH 4/6] [GOMP4] OpenACC 1.0+ support in fortran front-end
Date: Tue, 11 Feb 2014 16:51:00 -0000	[thread overview]
Message-ID: <8761olk2yk.fsf@schwinge.name> (raw)
In-Reply-To: <52EB85F7.5020807@samsung.com>

[-- Attachment #1: Type: text/plain, Size: 14084 bytes --]

Hi!

On Fri, 31 Jan 2014 15:16:07 +0400, Ilmir Usmanov <i.usmanov@samsung.com> wrote:
>      OpenACC 1.0 support -- GENERIC nodes and gimplify stubs.

Thanks!  This one is nearly ready for commit, and can then go in already,
while the Fortran front end patches are still being dicussed.  :-)

Please merge »OpenACC 1.0 support -- documentation« into this patch.  In
gcc/doc/generic.texi, please also add an entry for OACC_DECLARE, which is
currently missing.  Ideally, gcc/doc/generic.texi <OMP_CLAUSE> should
also be updated for the OpenACC clauses (as well as recently added OpenMP
ones), but as that one's outdated already, this is not a prerequisite.

For ChangeLog files updates (on gomp-4_0-branch, use the respective
ChangeLog.gomp files, by the way), should just you be listed as the
author, or also your colleagues?

> --- a/gcc/gimplify.c
> +++ b/gcc/gimplify.c

> @@ -6157,6 +6166,20 @@ gimplify_scan_omp_clauses (tree *list_p, gimple_seq *pre_p,
>  	    remove = true;
>  	  break;
>  
> +  case OMP_CLAUSE_HOST:
> +  case [...]
> +  case OMP_CLAUSE_VECTOR_LENGTH:
>  	case OMP_CLAUSE_NOWAIT:
>  	case OMP_CLAUSE_ORDERED:
>  	case OMP_CLAUSE_UNTIED:

Indentation (one tab instead of two spaces).

> @@ -6476,6 +6499,23 @@ gimplify_adjust_omp_clauses (tree *list_p)
>  	    }
>  	  break;
>  
> +  case OMP_CLAUSE_HOST:
> +  case [...]
> +  case OMP_CLAUSE_VECTOR_LENGTH:
> +    sorry ("Clause not supported yet");
> +    break;
> +
>  	case OMP_CLAUSE_REDUCTION:
>  	case OMP_CLAUSE_COPYIN:
>  	case OMP_CLAUSE_COPYPRIVATE:

Indentation.

Also, shouldn't the sorry be moved to gimplify_scan_omp_clauses, and a
»remove = true« be added in there, and gimplify_adjust_omp_clauses then
just contain a gcc_unreachable (or, move the new »case OMP_CLAUSE_*« next
to the existing default: that already contains gcc_unreachable)?

> @@ -7988,6 +8028,19 @@ gimplify_expr (tree *expr_p, gimple_seq *pre_p, gimple_seq *post_p,
>  	  ret = GS_ALL_DONE;
>  	  break;
>  
> +  case OACC_KERNELS:
> +  case OACC_DATA:
> +  case OACC_CACHE:
> +  case OACC_WAIT:
> +  case OACC_HOST_DATA:
> +  case OACC_DECLARE:
> +  case OACC_UPDATE:
> +  case OACC_ENTER_DATA:
> +  case OACC_EXIT_DATA:
> +    sorry ("directive not yet implemented");
> +    ret = GS_ALL_DONE;
> +    break;
> +
>  	case OMP_PARALLEL:
>  	  gimplify_omp_parallel (expr_p, pre_p);
>  	  ret = GS_ALL_DONE;

Indentation.

Further down in gimplify_expr, shouldn't these new OACC_* codes also be
added to the »These expressions should already be in gimple IR form«
assert?

> --- a/gcc/omp-low.c
> +++ b/gcc/omp-low.c
> @@ -1491,6 +1491,18 @@ fixup_child_record_type (omp_context *ctx)
>    TREE_TYPE (ctx->receiver_decl) = build_pointer_type (type);
>  }
>  
> +static bool
> +gimple_code_is_oacc (const_gimple g)
> +{
> +  switch (gimple_code (g))
> +    {
> +    case GIMPLE_OACC_PARALLEL:
> +      return true;
> +    default:
> +      return false;
> +    }
> +}
> +

Eventually, this will probably end up next to CASE_GIMPLE_OP/is_gimple_op
in gimple.h (or the latter be reworked to be able to ask for is_omp vs.
is_oacc vs. is_omp_or_oacc), but it's fine to do that once we actually
need it in files other than just omp-low.c, and once we support more
GIMPLE_OACC_* codes.

> @@ -1710,17 +1732,34 @@ scan_sharing_clauses (tree clauses, omp_context *ctx)

> +  case OMP_CLAUSE_HOST:
> +  case OMP_CLAUSE_OACC_DEVICE:
> +  case OMP_CLAUSE_DEVICE_RESIDENT:
> +  case OMP_CLAUSE_USE_DEVICE:
> +  case OMP_CLAUSE_ASYNC:
> +  case OMP_CLAUSE_GANG:
> +  case OMP_CLAUSE_WAIT:
> +  case OMP_NO_CLAUSE_CACHE:
> +  case OMP_CLAUSE_INDEPENDENT:
> +  case OMP_CLAUSE_WORKER:
> +  case OMP_CLAUSE_VECTOR:
> +  case OMP_CLAUSE_NUM_GANGS:
> +  case OMP_CLAUSE_NUM_WORKERS:
> +  case OMP_CLAUSE_VECTOR_LENGTH:
> +    sorry ("Clause not supported yet");
> +    break;
> +
>  	default:
>  	  gcc_unreachable ();
>  	}

Indentation.

> @@ -1827,9 +1876,26 @@ scan_sharing_clauses (tree clauses, omp_context *ctx)
>  	case OMP_CLAUSE__LOOPTEMP_:
>  	case OMP_CLAUSE_TO:
>  	case OMP_CLAUSE_FROM:
> -	  gcc_assert (gimple_code (ctx->stmt) != GIMPLE_OACC_PARALLEL);
> +	  gcc_assert (!gimple_code_is_oacc (ctx->stmt));
>  	  break;
>  
> +  case OMP_CLAUSE_HOST:
> +  case OMP_CLAUSE_OACC_DEVICE:
> +  case OMP_CLAUSE_DEVICE_RESIDENT:
> +  case OMP_CLAUSE_USE_DEVICE:
> +  case OMP_CLAUSE_ASYNC:
> +  case OMP_CLAUSE_GANG:
> +  case OMP_CLAUSE_WAIT:
> +  case OMP_NO_CLAUSE_CACHE:
> +  case OMP_CLAUSE_INDEPENDENT:
> +  case OMP_CLAUSE_WORKER:
> +  case OMP_CLAUSE_VECTOR:
> +  case OMP_CLAUSE_NUM_GANGS:
> +  case OMP_CLAUSE_NUM_WORKERS:
> +  case OMP_CLAUSE_VECTOR_LENGTH:
> +    sorry ("Clause not supported yet");
> +    break;
> +
>  	default:
>  	  gcc_unreachable ();
>  	}

Indentation.

> --- a/gcc/tree-core.h
> +++ b/gcc/tree-core.h
> @@ -213,19 +213,19 @@ enum omp_clause_code {
>       (c_parser_omp_variable_list).  */
>    OMP_CLAUSE_ERROR = 0,
>  
> -  /* OpenMP clause: private (variable_list).  */
> +  /* OpenMP/OpenACC clause: private (variable_list).  */
>    OMP_CLAUSE_PRIVATE,
>  
>    /* OpenMP clause: shared (variable_list).  */
>    OMP_CLAUSE_SHARED,
>  
> -  /* OpenMP clause: firstprivate (variable_list).  */
> +  /* OpenMP/OpenACC clause: firstprivate (variable_list).  */
>    OMP_CLAUSE_FIRSTPRIVATE,
>  
>    /* OpenMP clause: lastprivate (variable_list).  */
>    OMP_CLAUSE_LASTPRIVATE,
>  
> -  /* OpenMP clause: reduction (operator:variable_list).
> +  /* OpenMP/OpenACC clause: reduction (operator:variable_list).
>       OMP_CLAUSE_REDUCTION_CODE: The tree_code of the operator.
>       Operand 1: OMP_CLAUSE_REDUCTION_INIT: Stmt-list to initialize the var.
>       Operand 2: OMP_CLAUSE_REDUCTION_MERGE: Stmt-list to merge private var
> @@ -265,10 +265,40 @@ enum omp_clause_code {
>       OpenMP clause: map ({alloc:,to:,from:,tofrom:,}variable-list).  */
>    OMP_CLAUSE_MAP,
>  
> +  /* OpenACC clause: host (variable_list).  */
> +  OMP_CLAUSE_HOST,
> +
> +  /* OpenACC clause: device (variable_list).  */
> +  OMP_CLAUSE_OACC_DEVICE,
> +
> +  /* OpenACC clause: device_resident (variable_list).  */
> +  OMP_CLAUSE_DEVICE_RESIDENT,
> +
> +  /* OpenACC clause: use_device (variable_list).  */
> +  OMP_CLAUSE_USE_DEVICE,
> +
> +  /* OpenACC clause: async [(integer-expression)].  */
> +  OMP_CLAUSE_ASYNC,
> +
> +  /* OpenACC clause: gang [(gang-argument-list)]. 
> +     Where 
> +      gang-argument-list: [gang-argument-list, ] gang-argument 
> +      gang-argument: [num:] integer-expression
> +                   | static: size-expression
> +      size-expression: * | integer-expression.  */
> +  OMP_CLAUSE_GANG,
> +
> +  /* OpenACC clause/directive: wait [(integer-expression-list)].  */
> +  OMP_CLAUSE_WAIT,
> +
> +  /* Internal structure to hold OpenACC cache directive's variable-list.
> +     #pragma acc cache (variable-list).  */
> +  OMP_NO_CLAUSE_CACHE,
> +
>    /* Internal clause: temporary for combined loops expansion.  */
>    OMP_CLAUSE__LOOPTEMP_,
>  
> -  /* OpenMP clause: if (scalar-expression).  */
> +  /* OpenMP/OpenACC clause: if (scalar-expression).  */
>    OMP_CLAUSE_IF,
>  
>    /* OpenMP clause: num_threads (integer-expression).  */
> @@ -281,12 +311,13 @@ enum omp_clause_code {
>    OMP_CLAUSE_NOWAIT,
>  
>    /* OpenMP clause: ordered.  */
> +  /* OpenACC clause: seq.  */
>    OMP_CLAUSE_ORDERED,
>  
>    /* OpenMP clause: default.  */
>    OMP_CLAUSE_DEFAULT,
>  
> -  /* OpenMP clause: collapse (constant-integer-expression).  */
> +  /* OpenMP/OpenACC clause: collapse (constant-integer-expression).  */
>    OMP_CLAUSE_COLLAPSE,
>  
>    /* OpenMP clause: untied.  */
> @@ -338,7 +369,25 @@ enum omp_clause_code {
>    OMP_CLAUSE_TASKGROUP,
>  
>    /* Internally used only clause, holding SIMD uid.  */
> -  OMP_CLAUSE__SIMDUID_
> +  OMP_CLAUSE__SIMDUID_,
> +
> +  /* OpenACC clause: independent.  */
> +  OMP_CLAUSE_INDEPENDENT,
> +
> +  /* OpenACC clause: worker [( [num:] integer-expression)].  */
> +  OMP_CLAUSE_WORKER,
> +
> +  /* OpenACC clause: vector [( [length:] integer-expression)].  */
> +  OMP_CLAUSE_VECTOR,
> +
> +  /* OpenACC clause: num_gangs (integer-expression).  */
> +  OMP_CLAUSE_NUM_GANGS,
> +
> +  /* OpenACC clause: num_workers (integer-expression).  */
> +  OMP_CLAUSE_NUM_WORKERS,
> +
> +  /* OpenACC clause: vector_length (integer-expression).  */
> +  OMP_CLAUSE_VECTOR_LENGTH
>  };

Unless I'm confused, some of the new clauses (those that deal with more
than just a single operand) will need to get special handling added à la
the other omp_clause_subcode variants in tree-core.h:tree_omp_clause?
(It is fine to rework that in a later patch, once we actually implement
these clauses.)

> --- a/gcc/tree-pretty-print.c
> +++ b/gcc/tree-pretty-print.c
> @@ -326,6 +326,21 @@ dump_omp_clause (pretty_printer *buffer, tree clause, int spc, int flags)

OMP_CLAUSE_WAIT is missing.

> @@ -2384,6 +2452,41 @@ dump_generic_node (pretty_printer *buffer, tree node, int spc, int flags,

OACC_ENTER_DATA and OACC_EXIT_DATA are missing.

> --- a/gcc/tree.c
> +++ b/gcc/tree.c

> @@ -327,7 +350,13 @@ const char * const omp_clause_code_name[] =

> +  "indepentend",

Typo: independent.

> @@ -11034,6 +11063,18 @@ walk_tree_1 (tree *tp, walk_tree_fn func, void *data,

OMP_CLAUSE_GANG missing.

>      case OMP_CLAUSE:
>        switch (OMP_CLAUSE_CODE (*tp))
>  	{
> +  case OMP_CLAUSE_HOST:
> +  case OMP_CLAUSE_OACC_DEVICE:
> +  case OMP_CLAUSE_DEVICE_RESIDENT:
> +  case OMP_CLAUSE_USE_DEVICE:
> +  case OMP_NO_CLAUSE_CACHE:
> +  case OMP_CLAUSE_ASYNC:
> +  case OMP_CLAUSE_WORKER:
> +  case OMP_CLAUSE_VECTOR:
> +  case OMP_CLAUSE_NUM_GANGS:
> +  case OMP_CLAUSE_NUM_WORKERS:
> +  case OMP_CLAUSE_VECTOR_LENGTH:
> +  case OMP_CLAUSE_WAIT:
>  	case OMP_CLAUSE_PRIVATE:
>  	case OMP_CLAUSE_SHARED:
>  	case OMP_CLAUSE_FIRSTPRIVATE:

Indentation.

> @@ -11056,6 +11097,7 @@ walk_tree_1 (tree *tp, walk_tree_fn func, void *data,
>  	  WALK_SUBTREE (OMP_CLAUSE_OPERAND (*tp, 0));
>  	  /* FALLTHRU */
>  
> +  case OMP_CLAUSE_INDEPENDENT:
>  	case OMP_CLAUSE_NOWAIT:
>  	case OMP_CLAUSE_ORDERED:
>  	case OMP_CLAUSE_DEFAULT:

Indentation.

> --- a/gcc/tree.def
> +++ b/gcc/tree.def
> @@ -1017,6 +1017,56 @@ DEFTREECODE (MEM_REF, "mem_ref", tcc_reference, 2)
>  
>  DEFTREECODE (OACC_PARALLEL, "oacc_parallel", tcc_statement, 2)
>  
> +/* #pragma acc kernels */
> +/* Operand 0: BODY
> +   Operand 1: CLAUSES   
> +*/
> +DEFTREECODE (OACC_KERNELS, "oacc_kernels", tcc_statement, 2)
> +
> +/* #pragma acc data */
> +/* Operand 0: BODY
> +   Operand 1: CLAUSES   
> +*/
> +DEFTREECODE (OACC_DATA, "oacc_data", tcc_statement, 2)
> +
> +/* #pragma acc host_data */
> +/* Operand 0: BODY
> +   Operand 1: CLAUSES   
> +*/
> +DEFTREECODE (OACC_HOST_DATA, "oacc_host_data", tcc_statement, 2)
> +
> +/* #pragma acc declare */
> +/* Operand 0: CLAUSES   
> +*/
> +DEFTREECODE (OACC_DECLARE, "oacc_declare", tcc_statement, 1)
> +[...]
| [...]
| DEFTREECODE (OMP_PARALLEL, "omp_parallel", tcc_statement, 2)
| [...]
| DEFTREECODE (OMP_SINGLE, "omp_single", tcc_statement, 2)
| [...]
| DEFTREECODE (OMP_CRITICAL, "omp_critical", tcc_statement, 2)
| [...]

If you look at tree.h:OMP_BODY and OMP_CLAUSES:

    #define OMP_BODY(NODE) \
      TREE_OPERAND (TREE_RANGE_CHECK (NODE, OACC_PARALLEL, OMP_CRITICAL), 0)
    #define OMP_CLAUSES(NODE) \
      TREE_OPERAND (TREE_RANGE_CHECK (NODE, OACC_PARALLEL, OMP_SINGLE), 1)

..., you'll see that any codes from OACC_PARALLEL to OMP_CRITICAL are
expected to have a body as operand 0, and all from OACC_PARALLEL to
OMP_SINGLE are expected to have a list of clauses as operand 1.

This doesn't matter as long as all code paths are using the more
specialized OMP_*_BODY/OACC_*_BODY and OMP_*_CLAUSES/OACC_*_CLAUSES
accessor macros instead of the generic OMP_BODY and OMP_CLAUSES ones when
working with such OMP_* nodes, but to reduce confusion for readers of
this list/code, we should anyway pay attention, that is, distribute the
new OACC_* tree codes in tree.def to the appropriate places, to fit into
the existing scheme (as good as possible).  Please then also try to
maintain the same order of OACC_* codes in tree.h, tree.c, and so on:

> --- a/gcc/tree.h
> +++ b/gcc/tree.h
> @@ -1367,6 +1367,59 @@ extern void protected_set_expr_location (tree, location_t);
>  #define OMP_CLAUSE_DEFAULT_KIND(NODE) \
>    (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_DEFAULT)->omp_clause.subcode.default_kind)
>  
> +/* OpenACC directives and clause accessors. */
> +
> +#define OACC_KERNELS_BODY(NODE)      TREE_OPERAND (OACC_KERNELS_CHECK(NODE), 0)
> +#define OACC_KERNELS_CLAUSES(NODE)   TREE_OPERAND (OACC_KERNELS_CHECK(NODE), 1)

..., that is, move these (and the following ones) after the existing
OACC_PARALLEL_*, and so on, as appropriate.

> +#define OACC_DATA_BODY(NODE) \
> +            TREE_OPERAND (OACC_DATA_CHECK (NODE), 0)
> +
> +#define OACC_DATA_CLAUSES(NODE) \
> +            TREE_OPERAND (OACC_DATA_CHECK (NODE), 1)

No empty line between macros for the same tree code (OACC_DATA).

> +/* OpenACC clauses */

> +#define OMP_CLAUSE_[...]_EXPR(NODE) \

Please also try to sort these into the appropriate order (that is, as
defined in tree-core.h:omp_clause_code) -- if possible: I see that it is
not really consistent right now.  (This would also apply to the other
files where any OMP_*/OACC_* are used, for example the pretty printers,
but alas, if it's not in the right order now, then don't bother too much
about it.)


With these issues addressed, this patch is ready for commit to
gomp-4_0-branch.  Use your own judgement; if you feel confident, just
commit it, or otherwise post it again for a final review -- as you
prefer.


Grüße,
 Thomas

[-- Attachment #2: Type: application/pgp-signature, Size: 489 bytes --]

  parent reply	other threads:[~2014-02-11 16:51 UTC|newest]

Thread overview: 89+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-01-23 18:01 [PATCH] " Ilmir Usmanov
2014-01-23 18:03 ` [PATCH 1/6] " Ilmir Usmanov
2014-01-23 18:03   ` [PATCH 2/6] " Ilmir Usmanov
2014-01-23 18:04     ` [PATCH 3/6] " Ilmir Usmanov
2014-01-23 18:05       ` [PATCH 4/6] " Ilmir Usmanov
2014-01-23 18:05         ` [PATCH 5/6] " Ilmir Usmanov
2014-01-23 18:06           ` [PATCH 6/6] " Ilmir Usmanov
2014-01-23 18:09             ` [PATCH 7/6] " Ilmir Usmanov
2014-01-24 19:33         ` [PATCH 4/6] " Thomas Schwinge
2014-11-05 16:29           ` [gomp4] OpenACC cache directive for C Thomas Schwinge
2014-11-05 16:36             ` [gomp4] OpenACC cache directive maintenance (was: [PATCH 4/6] [GOMP4] OpenACC 1.0+ support in fortran front-end) Thomas Schwinge
2014-11-05 16:45               ` [gomp4] OpenACC cache directive maintenance Thomas Schwinge
2015-10-27 15:26                 ` [PR fortran/63865] OpenACC cache directive: match Fortran support with C/C++ (was: [gomp4] OpenACC cache directive maintenance) Thomas Schwinge
2015-10-27 15:30                   ` Jakub Jelinek
2015-10-27 17:03                     ` [PR fortran/63865] OpenACC cache directive: match Fortran support with C/C++ Thomas Schwinge
2014-11-05 16:49             ` [gomp4] Testing of C/C++ OpenACC cache directive (was: OpenACC cache directive for C) Thomas Schwinge
2016-06-02 11:47             ` [PR c/71381] C/C++ OpenACC cache directive rejects valid syntax (was: [gomp4] OpenACC cache directive for C.) Thomas Schwinge
2016-06-08 13:29               ` [PING] [PR c/71381] C/C++ OpenACC cache directive rejects valid syntax Thomas Schwinge
2016-06-08 14:07                 ` Jakub Jelinek
2016-06-10 10:32                   ` Thomas Schwinge
2016-06-10 13:14                     ` Thomas Schwinge
2016-06-10 20:40                       ` Gerald Pfeifer
2014-01-24 20:47     ` [PATCH 2/6] [GOMP4] OpenACC 1.0+ support in fortran front-end Thomas Schwinge
2014-01-24 20:31   ` [PATCH 1/6] " Thomas Schwinge
2014-01-27 19:37     ` Tobias Burnus
2014-01-24 18:04 ` [PATCH] " Thomas Schwinge
2014-01-27 13:12   ` Ilmir Usmanov
2014-01-27 15:49     ` Thomas Schwinge
2014-01-27 16:35       ` Ilmir Usmanov
2014-01-31 11:14       ` Ilmir Usmanov
2014-01-31 11:16         ` [PATCH 1/6] " Ilmir Usmanov
2014-01-31 11:17           ` [PATCH 2/6] " Ilmir Usmanov
2014-01-31 11:18             ` [PATCH 3/6] " Ilmir Usmanov
2014-01-31 11:22               ` [PATCH 4/6] " Ilmir Usmanov
2014-01-31 11:34                 ` [PATCH 5/6] " Ilmir Usmanov
2014-01-31 11:45                   ` [PATCH 6/6] " Ilmir Usmanov
2014-02-09 23:43                   ` [PATCH 5/6] " Tobias Burnus
2014-02-10  8:52                     ` Thomas Schwinge
2014-02-10  9:34                       ` Ilmir Usmanov
2014-02-10 23:13                       ` Tobias Burnus
2014-02-10  9:45                     ` Ilmir Usmanov
2014-02-10 10:52                       ` Thomas Schwinge
2014-02-11 16:51                 ` Thomas Schwinge [this message]
2014-02-13 13:15                   ` [PATCH 4/6] " Ilmir Usmanov
2014-02-13 14:57                     ` Thomas Schwinge
2014-02-14  5:45                       ` Ilmir Usmanov
2014-02-21 19:29                   ` [GOMP4] gimple_code_is_oacc -> is_gimple_omp_oacc_specifically (was: [PATCH 4/6] [GOMP4] OpenACC 1.0+ support in fortran front-end) Thomas Schwinge
2014-02-09 23:24               ` [PATCH 3/6] [GOMP4] OpenACC 1.0+ support in fortran front-end Tobias Burnus
2014-02-09 23:10             ` [PATCH 2/6] " Tobias Burnus
2014-02-10  9:10               ` Thomas Schwinge
2014-02-19 16:43               ` Ilmir Usmanov
2014-01-31 12:00           ` [PATCH 1/6] " Jakub Jelinek
2014-01-31 12:33             ` Ilmir Usmanov
2014-02-03 15:21               ` [PING] " Ilmir Usmanov
2014-02-09 22:22           ` Tobias Burnus
2014-02-19 15:34             ` Ilmir Usmanov
2014-02-19 23:52               ` Tobias Burnus
2014-02-20  8:19                 ` Ilmir Usmanov
2014-03-04  7:56                   ` [PATCH 1/4] [GOMP4] [Fortran] " Ilmir Usmanov
2014-03-04  7:57                     ` Ilmir Usmanov
2014-03-04  7:57                       ` [PATCH 2/4] " Ilmir Usmanov
2014-03-04  7:58                         ` [PATCH 3/4] " Ilmir Usmanov
2014-03-04  7:59                           ` [PATCH 4/4] " Ilmir Usmanov
2014-03-04 22:56                             ` Tobias Burnus
2014-03-04 22:52                           ` [PATCH 3/4] " Tobias Burnus
2014-03-04 17:20                       ` [PATCH 1/4] " Tobias Burnus
2014-03-07 10:44                         ` Ilmir Usmanov
2014-03-07 10:45                           ` Ilmir Usmanov
2014-03-07 10:46                             ` [PATCH 2/4] " Ilmir Usmanov
2014-03-07 10:46                               ` [PATCH 3/4] " Ilmir Usmanov
2014-03-07 10:47                                 ` [PATCH 4/4] " Ilmir Usmanov
2014-03-08 17:55                                   ` Tobias Burnus
2014-03-20 10:53                                   ` Thomas Schwinge
2014-03-20 12:48                                     ` Ilmir Usmanov
2014-03-20 14:43                                     ` Jakub Jelinek
2014-03-08 17:19                                 ` [PATCH 3/4] " Tobias Burnus
2014-03-08 19:55                               ` [PATCH 2/4] " Tobias Burnus
2014-03-11 12:04                                 ` Ilmir Usmanov
2014-03-12 18:46                                   ` Tobias Burnus
2014-03-12 18:27                             ` [PATCH 1/4] " Tobias Burnus
2014-03-13  9:41                               ` Ilmir Usmanov
2014-03-13 11:43                                 ` Thomas Schwinge
2014-03-13 13:24                                   ` Ilmir Usmanov
2014-03-13 14:13                                     ` Ilmir Usmanov
2014-03-16 19:46                                       ` Tobias Burnus
2014-03-16 20:44                                         ` Thomas Schwinge
2014-04-05 10:40                                         ` Thomas Schwinge
2014-03-10 15:44                           ` Thomas Schwinge
2014-03-04 17:42                       ` Tobias Burnus

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=8761olk2yk.fsf@schwinge.name \
    --to=thomas@codesourcery.com \
    --cc=dmitry.b@samsung.com \
    --cc=e.gavrin@samsung.com \
    --cc=fortran@gcc.gnu.org \
    --cc=gcc-patches@gcc.gnu.org \
    --cc=i.usmanov@samsung.com \
    --cc=jakub@redhat.com \
    --cc=v.garbuzov@samsung.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).