diff mbox

[gomp4,5/6] Initial support in the C front end for OpenACC data clauses.

Message ID 87a9dwy40z.fsf@kepler.schwinge.homeip.net
State New
Headers show

Commit Message

Thomas Schwinge Feb. 12, 2014, 11:16 a.m. UTC
Hi!

On Tue, 14 Jan 2014 16:10:07 +0100, I wrote:
> 	gcc/c-family/
> 	* c-pragma.h (pragma_omp_clause): Add PRAGMA_OMP_CLAUSE_COPY,
> 	PRAGMA_OMP_CLAUSE_COPYOUT, PRAGMA_OMP_CLAUSE_CREATE,
> 	PRAGMA_OMP_CLAUSE_DELETE, PRAGMA_OMP_CLAUSE_DEVICEPTR,
> 	PRAGMA_OMP_CLAUSE_PRESENT, PRAGMA_OMP_CLAUSE_PRESENT_OR_COPY,
> 	PRAGMA_OMP_CLAUSE_PRESENT_OR_COPYIN,
> 	PRAGMA_OMP_CLAUSE_PRESENT_OR_COPYOUT, and
> 	PRAGMA_OMP_CLAUSE_PRESENT_OR_CREATE.
> 	gcc/c/
> 	* c-parser.c (c_parser_omp_clause_name): Handle these.
> 	(c_parser_oacc_data_clause, c_parser_oacc_data_clause_deviceptr):
> 	New functions.
> 	(c_parser_oacc_all_clauses): Handle PRAGMA_OMP_CLAUSE_COPY,
> 	PRAGMA_OMP_CLAUSE_COPYIN, PRAGMA_OMP_CLAUSE_COPYOUT,
> 	PRAGMA_OMP_CLAUSE_CREATE, PRAGMA_OMP_CLAUSE_DELETE,
> 	PRAGMA_OMP_CLAUSE_DEVICEPTR, PRAGMA_OMP_CLAUSE_PRESENT,
> 	PRAGMA_OMP_CLAUSE_PRESENT_OR_COPY,
> 	PRAGMA_OMP_CLAUSE_PRESENT_OR_COPYIN,
> 	PRAGMA_OMP_CLAUSE_PRESENT_OR_COPYOUT, and
> 	PRAGMA_OMP_CLAUSE_PRESENT_OR_CREATE.
> 	gcc/
> 	* tree-core.h (omp_clause_code): Update description for
> 	OMP_CLAUSE_MAP.

This I committed to gomp-4_0-branch as r207177.

In
<http://news.gmane.org/find-root.php?message_id=%3C52E68AE3.9030706%40samsung.com%3E>,
Ilmir mentioned that I'm missing to handle the »short names: pcopy,
pcopyin, pcopyout and pcreate (see 2.6.5.9 - 2.6.5.12 of OpenACC 2.0«.
Unless there are any comments, I'll soon commit the following to
gomp-4_0-branch:

commit 9a1f6c075f6198c9ae3281387b875e6012e4387e
Author: Thomas Schwinge <thomas@codesourcery.com>
Date:   Wed Feb 12 11:59:51 2014 +0100

    OpenACC: pcopy, pcopyin, pcopyout, pcreate clauses.
    
    	gcc/c/
    	* c-parser.c (c_parser_omp_clause_name): Accept pcopy, pcopyin,
    	pcopyout, pcreate clauses.
    	(c_parser_oacc_data_clause): Update comment.
    	gcc/
    	* tree-core.h (omp_clause_code) <map>: Mention pcopy, pcopyin,
    	pcopyout, pcreate OpenACC clauses.
    	gcc/testsuite/
    	* c-c++-common/goacc/pcopy.c: New file.
    	* c-c++-common/goacc/pcopyin.c: Likewise.
    	* c-c++-common/goacc/pcopyout.c: Likewise.
    	* c-c++-common/goacc/pcreate.c: Likewise.



Grüße,
 Thomas
diff mbox

Patch

diff --git gcc/c/c-parser.c gcc/c/c-parser.c
index 6e89471..f401cef 100644
--- gcc/c/c-parser.c
+++ gcc/c/c-parser.c
@@ -9671,13 +9671,17 @@  c_parser_omp_clause_name (c_parser *parser)
 	    result = PRAGMA_OMP_CLAUSE_PARALLEL;
 	  else if (!strcmp ("present", p))
 	    result = PRAGMA_OMP_CLAUSE_PRESENT;
-	  else if (!strcmp ("present_or_copy", p))
+	  else if (!strcmp ("present_or_copy", p)
+		   || !strcmp ("pcopy", p))
 	    result = PRAGMA_OMP_CLAUSE_PRESENT_OR_COPY;
-	  else if (!strcmp ("present_or_copyin", p))
+	  else if (!strcmp ("present_or_copyin", p)
+		   || !strcmp ("pcopyin", p))
 	    result = PRAGMA_OMP_CLAUSE_PRESENT_OR_COPYIN;
-	  else if (!strcmp ("present_or_copyout", p))
+	  else if (!strcmp ("present_or_copyout", p)
+		   || !strcmp ("pcopyout", p))
 	    result = PRAGMA_OMP_CLAUSE_PRESENT_OR_COPYOUT;
-	  else if (!strcmp ("present_or_create", p))
+	  else if (!strcmp ("present_or_create", p)
+		   || !strcmp ("pcreate", p))
 	    result = PRAGMA_OMP_CLAUSE_PRESENT_OR_CREATE;
 	  else if (!strcmp ("private", p))
 	    result = PRAGMA_OMP_CLAUSE_PRIVATE;
@@ -9870,9 +9874,13 @@  c_parser_omp_var_list_parens (c_parser *parser, enum omp_clause_code kind,
    delete ( variable-list )
    present ( variable-list )
    present_or_copy ( variable-list )
+     pcopy ( variable-list )
    present_or_copyin ( variable-list )
+     pcopyin ( variable-list )
    present_or_copyout ( variable-list )
-   present_or_create ( variable-list ) */
+     pcopyout ( variable-list )
+   present_or_create ( variable-list )
+     pcreate ( variable-list ) */
 
 static tree
 c_parser_oacc_data_clause (c_parser *parser, pragma_omp_clause c_kind,
diff --git gcc/testsuite/c-c++-common/goacc/pcopy.c gcc/testsuite/c-c++-common/goacc/pcopy.c
new file mode 100644
index 0000000..fd16525
--- /dev/null
+++ gcc/testsuite/c-c++-common/goacc/pcopy.c
@@ -0,0 +1,11 @@ 
+/* { dg-additional-options "-fdump-tree-original" } */
+
+void
+f (char *cp)
+{
+#pragma acc parallel pcopy(cp[3:5])
+  ;
+}
+
+/* { dg-final { scan-tree-dump-times "#pragma acc parallel map\\(tofrom:\\*\\(cp \\+ 3\\) \\\[len: 5]\\) map\\(alloc:cp \\\[pointer assign, bias: 3]\\)" 1 "original" } } */
+/* { dg-final { cleanup-tree-dump "original" } } */
diff --git gcc/testsuite/c-c++-common/goacc/pcopyin.c gcc/testsuite/c-c++-common/goacc/pcopyin.c
new file mode 100644
index 0000000..c009d24
--- /dev/null
+++ gcc/testsuite/c-c++-common/goacc/pcopyin.c
@@ -0,0 +1,11 @@ 
+/* { dg-additional-options "-fdump-tree-original" } */
+
+void
+f (char *cp)
+{
+#pragma acc parallel pcopyin(cp[4:6])
+  ;
+}
+
+/* { dg-final { scan-tree-dump-times "#pragma acc parallel map\\(to:\\*\\(cp \\+ 4\\) \\\[len: 6]\\) map\\(alloc:cp \\\[pointer assign, bias: 4]\\)" 1 "original" } } */
+/* { dg-final { cleanup-tree-dump "original" } } */
diff --git gcc/testsuite/c-c++-common/goacc/pcopyout.c gcc/testsuite/c-c++-common/goacc/pcopyout.c
new file mode 100644
index 0000000..6099eff
--- /dev/null
+++ gcc/testsuite/c-c++-common/goacc/pcopyout.c
@@ -0,0 +1,11 @@ 
+/* { dg-additional-options "-fdump-tree-original" } */
+
+void
+f (char *cp)
+{
+#pragma acc parallel pcopyout(cp[5:7])
+  ;
+}
+
+/* { dg-final { scan-tree-dump-times "#pragma acc parallel map\\(from:\\*\\(cp \\+ 5\\) \\\[len: 7]\\) map\\(alloc:cp \\\[pointer assign, bias: 5]\\)" 1 "original" } } */
+/* { dg-final { cleanup-tree-dump "original" } } */
diff --git gcc/testsuite/c-c++-common/goacc/pcreate.c gcc/testsuite/c-c++-common/goacc/pcreate.c
new file mode 100644
index 0000000..2f6e836
--- /dev/null
+++ gcc/testsuite/c-c++-common/goacc/pcreate.c
@@ -0,0 +1,11 @@ 
+/* { dg-additional-options "-fdump-tree-original" } */
+
+void
+f (char *cp)
+{
+#pragma acc parallel pcreate(cp[6:8])
+  ;
+}
+
+/* { dg-final { scan-tree-dump-times "#pragma acc parallel map\\(alloc:\\*\\(cp \\+ 6\\) \\\[len: 8]\\) map\\(alloc:cp \\\[pointer assign, bias: 6]\\)" 1 "original" } } */
+/* { dg-final { cleanup-tree-dump "original" } } */
diff --git gcc/tree-core.h gcc/tree-core.h
index a5a95cd..2d9bf0c 100644
--- gcc/tree-core.h
+++ gcc/tree-core.h
@@ -259,8 +259,9 @@  enum omp_clause_code {
   OMP_CLAUSE_TO,
 
   /* OpenACC clauses: {copy, copyin, copyout, create, delete, deviceptr,
-     present, present_or_copy, present_or_copyin, present_or_copyout,
-     present_or_create} (variable-list).
+     present, present_or_copy (pcopy), present_or_copyin (pcopyin),
+     present_or_copyout (pcopyout), present_or_create (pcreate)}
+     (variable-list).
 
      OpenMP clause: map ({alloc:,to:,from:,tofrom:,}variable-list).  */
   OMP_CLAUSE_MAP,