[flang-commits] [flang] 8feb5d4 - [flang][OpenMP] Added parser support for Tile Construct ( OpenMP 5.1)
Kiran Chandramohan via flang-commits
flang-commits at lists.llvm.org
Tue Jan 17 03:50:42 PST 2023
Author: Abid Malik
Date: 2023-01-17T11:50:22Z
New Revision: 8feb5d419c5e69c941d129c5f31ec64e5e04dfd2
URL: https://github.com/llvm/llvm-project/commit/8feb5d419c5e69c941d129c5f31ec64e5e04dfd2
DIFF: https://github.com/llvm/llvm-project/commit/8feb5d419c5e69c941d129c5f31ec64e5e04dfd2.diff
LOG: [flang][OpenMP] Added parser support for Tile Construct ( OpenMP 5.1)
Added parser support for Tile Construct .
Reviewed By: kiranchandramohan
Differential Revision: https://reviews.llvm.org/D136359
Added:
flang/test/Parser/omp-tile-size.f90
flang/test/Parser/omp-tile.f90
Modified:
flang/lib/Parser/openmp-parsers.cpp
flang/lib/Parser/unparse.cpp
flang/lib/Semantics/resolve-directives.cpp
llvm/include/llvm/Frontend/OpenMP/OMP.td
Removed:
################################################################################
diff --git a/flang/lib/Parser/openmp-parsers.cpp b/flang/lib/Parser/openmp-parsers.cpp
index 0e9f74295421..49d6ef000f13 100644
--- a/flang/lib/Parser/openmp-parsers.cpp
+++ b/flang/lib/Parser/openmp-parsers.cpp
@@ -278,6 +278,8 @@ TYPE_PARSER(
"SIMD"_id >> construct<OmpClause>(construct<OmpClause::Simd>()) ||
"SIMDLEN" >> construct<OmpClause>(construct<OmpClause::Simdlen>(
parenthesized(scalarIntConstantExpr))) ||
+ "SIZES" >> construct<OmpClause>(construct<OmpClause::Sizes>(
+ parenthesized(nonemptyList(scalarIntExpr)))) ||
"THREADS" >> construct<OmpClause>(construct<OmpClause::Threads>()) ||
"THREAD_LIMIT" >> construct<OmpClause>(construct<OmpClause::ThreadLimit>(
parenthesized(scalarIntExpr))) ||
@@ -334,7 +336,8 @@ TYPE_PARSER(sourced(construct<OmpLoopDirective>(first(
pure(llvm::omp::Directive::OMPD_teams_distribute_parallel_do),
"TEAMS DISTRIBUTE SIMD" >>
pure(llvm::omp::Directive::OMPD_teams_distribute_simd),
- "TEAMS DISTRIBUTE" >> pure(llvm::omp::Directive::OMPD_teams_distribute)))))
+ "TEAMS DISTRIBUTE" >> pure(llvm::omp::Directive::OMPD_teams_distribute),
+ "TILE" >> pure(llvm::omp::Directive::OMPD_tile)))))
TYPE_PARSER(sourced(construct<OmpBeginLoopDirective>(
sourced(Parser<OmpLoopDirective>{}), Parser<OmpClauseList>{})))
diff --git a/flang/lib/Parser/unparse.cpp b/flang/lib/Parser/unparse.cpp
index a8fb6676ada3..892d34b146df 100644
--- a/flang/lib/Parser/unparse.cpp
+++ b/flang/lib/Parser/unparse.cpp
@@ -2150,6 +2150,9 @@ class UnparseVisitor {
case llvm::omp::Directive::OMPD_teams_distribute_simd:
Word("TEAMS DISTRIBUTE SIMD ");
break;
+ case llvm::omp::Directive::OMPD_tile:
+ Word("TILE ");
+ break;
default:
break;
}
diff --git a/flang/lib/Semantics/resolve-directives.cpp b/flang/lib/Semantics/resolve-directives.cpp
index 82623acf13c6..ec66f7d2795f 100644
--- a/flang/lib/Semantics/resolve-directives.cpp
+++ b/flang/lib/Semantics/resolve-directives.cpp
@@ -1221,6 +1221,7 @@ bool OmpAttributeVisitor::Pre(const parser::OpenMPLoopConstruct &x) {
case llvm::omp::Directive::OMPD_teams_distribute_parallel_do:
case llvm::omp::Directive::OMPD_teams_distribute_parallel_do_simd:
case llvm::omp::Directive::OMPD_teams_distribute_simd:
+ case llvm::omp::Directive::OMPD_tile:
PushContext(beginDir.source, beginDir.v);
break;
default:
diff --git a/flang/test/Parser/omp-tile-size.f90 b/flang/test/Parser/omp-tile-size.f90
new file mode 100644
index 000000000000..f40dc3819af0
--- /dev/null
+++ b/flang/test/Parser/omp-tile-size.f90
@@ -0,0 +1,23 @@
+! RUN: %flang_fc1 -fdebug-unparse -fopenmp %s | FileCheck --ignore-case %s
+! RUN: %flang_fc1 -fdebug-dump-parse-tree -fopenmp %s | FileCheck --check-prefix="PARSE-TREE" %s
+
+subroutine openmp_tiles(x)
+
+ integer, intent(inout)::x
+
+!CHECK: !$omp tile sizes
+!$omp tile sizes(2)
+!CHECK: do
+ do x = 1, 100
+ call F1()
+!CHECK: end do
+ end do
+!CHECK: !$omp end tile
+!$omp end tile
+
+
+!PARSE-TREE: OpenMPConstruct -> OpenMPLoopConstruct
+!PARSE-TREE: OmpBeginLoopDirective
+!PARSE-TREE: OmpLoopDirective -> llvm::omp::Directive = tile
+!PARSE-TREE: OmpClauseList -> OmpClause -> Sizes -> Scalar -> Integer -> Expr = '2_4'
+END subroutine openmp_tiles
diff --git a/flang/test/Parser/omp-tile.f90 b/flang/test/Parser/omp-tile.f90
new file mode 100644
index 000000000000..ee9b6aa5c84c
--- /dev/null
+++ b/flang/test/Parser/omp-tile.f90
@@ -0,0 +1,23 @@
+! RUN: %flang_fc1 -fdebug-unparse -fopenmp %s | FileCheck --ignore-case %s
+! RUN: %flang_fc1 -fdebug-dump-parse-tree -fopenmp %s | FileCheck --check-prefix="PARSE-TREE" %s
+
+subroutine openmp_tiles(x)
+
+ integer, intent(inout)::x
+
+!CHECK: !$omp tile
+!$omp tile
+!CHECK: do
+ do x = 1, 100
+ call F1()
+!CHECK: end do
+ end do
+!CHECK: !$omp end tile
+!$omp end tile
+
+!PARSE-TREE: OpenMPConstruct -> OpenMPLoopConstruct
+!PARSE-TREE: OmpBeginLoopDirective
+!PARSE-TREE: OmpLoopDirective -> llvm::omp::Directive = tile
+
+END subroutine openmp_tiles
+
diff --git a/llvm/include/llvm/Frontend/OpenMP/OMP.td b/llvm/include/llvm/Frontend/OpenMP/OMP.td
index 0b90affb7a34..9c55f0f6e7b9 100644
--- a/llvm/include/llvm/Frontend/OpenMP/OMP.td
+++ b/llvm/include/llvm/Frontend/OpenMP/OMP.td
@@ -67,7 +67,11 @@ def OMPC_Private : Clause<"private"> {
let clangClass = "OMPPrivateClause";
let flangClass = "OmpObjectList";
}
-def OMPC_Sizes: Clause<"sizes"> { let clangClass = "OMPSizesClause"; }
+def OMPC_Sizes: Clause<"sizes"> {
+ let clangClass = "OMPSizesClause";
+ let flangClass = "ScalarIntExpr";
+ let isValueList = true;
+ }
def OMPC_Full: Clause<"full"> { let clangClass = "OMPFullClause"; }
def OMPC_Partial: Clause<"partial"> { let clangClass = "OMPPartialClause"; }
def OMPC_FirstPrivate : Clause<"firstprivate"> {
More information about the flang-commits
mailing list