diff mbox

[gomp4,8/9] OpenACC: Basic support for #pragma acc in the C front end.

Message ID 1383766943-8863-8-git-send-email-thomas@codesourcery.com
State New
Headers show

Commit Message

Thomas Schwinge Nov. 6, 2013, 7:42 p.m. UTC
From: Thomas Schwinge <thomas@codesourcery.com>

	gcc/c-family/
	* c-pragma.c (oacc_pragmas): New array.
	(c_pp_lookup_pragma, init_pragma): Handle it.
	gcc/
	* doc/invoke.texi (-fopenacc): Update.

	gcc/c/
	* c-parser.c (c_parser_omp_all_clauses): Make a parser error
	message suitable for OpenACC, too.
	gcc/cp/
	* parser.c (cp_parser_omp_all_clauses): Make a parser error
	message suitable for OpenACC, too.
---
 gcc/c-family/c-pragma.c | 22 ++++++++++++++++++++++
 gcc/c/c-parser.c        |  2 +-
 gcc/cp/parser.c         |  2 +-
 gcc/doc/invoke.texi     |  2 +-
 4 files changed, 25 insertions(+), 3 deletions(-)

Comments

Jakub Jelinek Nov. 7, 2013, 8:18 a.m. UTC | #1
On Wed, Nov 06, 2013 at 08:42:22PM +0100, thomas@codesourcery.com wrote:
> From: Thomas Schwinge <thomas@codesourcery.com>
> 
> 	gcc/c-family/
> 	* c-pragma.c (oacc_pragmas): New array.
> 	(c_pp_lookup_pragma, init_pragma): Handle it.
> 	gcc/
> 	* doc/invoke.texi (-fopenacc): Update.
> 
> 	gcc/c/
> 	* c-parser.c (c_parser_omp_all_clauses): Make a parser error
> 	message suitable for OpenACC, too.
> 	gcc/cp/
> 	* parser.c (cp_parser_omp_all_clauses): Make a parser error
> 	message suitable for OpenACC, too.

Ok for branch.

	Jakub
diff mbox

Patch

diff --git gcc/c-family/c-pragma.c gcc/c-family/c-pragma.c
index 3ce77a2..98f98d0 100644
--- gcc/c-family/c-pragma.c
+++ gcc/c-family/c-pragma.c
@@ -1164,6 +1164,8 @@  typedef struct
 static vec<pragma_ns_name> registered_pp_pragmas;
 
 struct omp_pragma_def { const char *name; unsigned int id; };
+static const struct omp_pragma_def oacc_pragmas[] = {
+};
 static const struct omp_pragma_def omp_pragmas[] = {
   { "atomic", PRAGMA_OMP_ATOMIC },
   { "barrier", PRAGMA_OMP_BARRIER },
@@ -1194,9 +1196,18 @@  static const struct omp_pragma_def omp_pragmas[] = {
 void
 c_pp_lookup_pragma (unsigned int id, const char **space, const char **name)
 {
+  const int n_oacc_pragmas = sizeof (oacc_pragmas) / sizeof (*oacc_pragmas);
   const int n_omp_pragmas = sizeof (omp_pragmas) / sizeof (*omp_pragmas);
   int i;
 
+  for (i = 0; i < n_oacc_pragmas; ++i)
+    if (oacc_pragmas[i].id == id)
+      {
+	*space = "acc";
+	*name = oacc_pragmas[i].name;
+	return;
+      }
+
   for (i = 0; i < n_omp_pragmas; ++i)
     if (omp_pragmas[i].id == id)
       {
@@ -1348,6 +1359,17 @@  c_invoke_pragma_handler (unsigned int id)
 void
 init_pragma (void)
 {
+  if (flag_openacc)
+    {
+      const int n_oacc_pragmas
+	= sizeof (oacc_pragmas) / sizeof (*oacc_pragmas);
+      int i;
+
+      for (i = 0; i < n_oacc_pragmas; ++i)
+	cpp_register_deferred_pragma (parse_in, "acc", oacc_pragmas[i].name,
+				      oacc_pragmas[i].id, true, true);
+    }
+
   if (flag_openmp)
     {
       const int n_omp_pragmas = sizeof (omp_pragmas) / sizeof (*omp_pragmas);
diff --git gcc/c/c-parser.c gcc/c/c-parser.c
index a8f4774..8a1e988 100644
--- gcc/c/c-parser.c
+++ gcc/c/c-parser.c
@@ -10730,7 +10730,7 @@  c_parser_omp_all_clauses (c_parser *parser, omp_clause_mask mask,
 	  c_name = "simdlen";
 	  break;
 	default:
-	  c_parser_error (parser, "expected %<#pragma omp%> clause");
+	  c_parser_error (parser, "expected clause");
 	  goto saw_error;
 	}
 
diff --git gcc/cp/parser.c gcc/cp/parser.c
index bbc8e75..c3345ee 100644
--- gcc/cp/parser.c
+++ gcc/cp/parser.c
@@ -27911,7 +27911,7 @@  cp_parser_omp_all_clauses (cp_parser *parser, omp_clause_mask mask,
 	  c_name = "simdlen";
 	  break;
 	default:
-	  cp_parser_error (parser, "expected %<#pragma omp%> clause");
+	  cp_parser_error (parser, "expected clause");
 	  goto saw_error;
 	}
 
diff --git gcc/doc/invoke.texi gcc/doc/invoke.texi
index af8973a..cc4a6da 100644
--- gcc/doc/invoke.texi
+++ gcc/doc/invoke.texi
@@ -1835,7 +1835,7 @@  freestanding and hosted environments.
 @item -fopenacc
 @opindex fopenacc
 @cindex OpenACC accelerator programming
-Enable handling of OpenACC.
+Enable handling of OpenACC directives @code{#pragma acc} in C.
 When @option{-fopenacc} is specified, the
 compiler generates accelerated code according to the OpenACC Application
 Programming Interface v2.0 @w{@uref{http://www.openacc.org/}}.  This option