[flang][openacc] Relax clause rule on routine directive
authorValentin Clement <clementval@gmail.com>
Wed, 28 Jun 2023 16:07:04 +0000 (09:07 -0700)
committerValentin Clement <clementval@gmail.com>
Wed, 28 Jun 2023 16:07:38 +0000 (09:07 -0700)
Some compiler treat `acc routine` without a parallelism clause as
if seq is present. Relax the parser rule to allow acc routine
without clause. The default clause will be handled in lowering.

Reviewed By: razvanlupusoru

Differential Revision: https://reviews.llvm.org/D153896

flang/docs/OpenACC.md
flang/test/Semantics/OpenACC/acc-routine-validity.f90
llvm/include/llvm/Frontend/OpenACC/ACC.td

index 8132a5b..c63fcd9 100644 (file)
@@ -15,3 +15,5 @@
 
 ## Intentional deviation from the specification
 * The end directive for combined construct can omit the `loop` keyword.
+* An `!$acc routine` with no parallelism clause is treated as if the `seq`
+  clause was present.
index 83583fc..5b8ecde 100644 (file)
@@ -10,7 +10,6 @@ module openacc_routine_validity
 
   !$acc routine(fct2) vector
 
-  !ERROR: At least one of GANG, SEQ, VECTOR, WORKER clause must appear on the ROUTINE directive
   !$acc routine(sub3)
 
   !ERROR: ROUTINE directive without name must appear within the specification part of a subroutine or function definition, or within an interface body for a subroutine or function in an interface block
@@ -23,7 +22,6 @@ contains
 
   subroutine sub1(a)
     real :: a(:)
-    !ERROR: At least one of GANG, SEQ, VECTOR, WORKER clause must appear on the ROUTINE directive
     !$acc routine
   end subroutine sub1
 
index 1b18607..98cf49f 100644 (file)
@@ -418,9 +418,7 @@ def ACC_Routine : Directive<"routine"> {
   let allowedOnceClauses = [
     VersionedClause<ACCC_Bind>,
     VersionedClause<ACCC_DeviceType>,
-    VersionedClause<ACCC_NoHost>
-  ];
-  let requiredClauses = [
+    VersionedClause<ACCC_NoHost>,
     VersionedClause<ACCC_Gang>,
     VersionedClause<ACCC_Seq>,
     VersionedClause<ACCC_Vector>,