[PATCH] D120396: [flang] Support export/import OpenMP Threadprivate Flag

Peixin Qiao via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Wed Feb 23 17:14:27 PST 2022


peixin updated this revision to Diff 410977.

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D120396/new/

https://reviews.llvm.org/D120396

Files:
  flang/lib/Semantics/mod-file.cpp
  flang/test/Semantics/modfile44.f90


Index: flang/test/Semantics/modfile44.f90
===================================================================
--- /dev/null
+++ flang/test/Semantics/modfile44.f90
@@ -0,0 +1,35 @@
+! RUN: %python %S/test_modfile.py %s %flang_fc1 -fopenmp
+! Check correct modfile generation for OpenMP threadprivate directive.
+
+module m
+  implicit none
+  type :: my_type(kind_param, len_param)
+    integer, KIND :: kind_param
+    integer, LEN :: len_param
+    integer :: t_i
+    integer :: t_arr(10)
+  end type
+  type(my_type(kind_param=2, len_param=4)) :: t
+  real, dimension(3) :: thrtest
+  real :: x
+  common /blk/ x
+
+  !$omp threadprivate(thrtest, t, /blk/)
+end
+
+!Expect: m.mod
+!module m
+!type::my_type(kind_param,len_param)
+!integer(4),kind::kind_param
+!integer(4),len::len_param
+!integer(4)::t_i
+!integer(4)::t_arr(1_8:10_8)
+!end type
+!type(my_type(kind_param=2_4,len_param=4_4))::t
+!!$omp threadprivate(t)
+!real(4)::thrtest(1_8:3_8)
+!!$omp threadprivate(thrtest)
+!real(4)::x
+!common/blk/x
+!end
+
Index: flang/lib/Semantics/mod-file.cpp
===================================================================
--- flang/lib/Semantics/mod-file.cpp
+++ flang/lib/Semantics/mod-file.cpp
@@ -322,7 +322,13 @@
                  },
                  [](const HostAssocDetails &) {},
                  [](const MiscDetails &) {},
-                 [&](const auto &) { PutEntity(decls_, symbol); },
+                 [&](const auto &) {
+                   PutEntity(decls_, symbol);
+                   if (symbol.test(Symbol::Flag::OmpThreadprivate) &&
+                       !FindCommonBlockContaining(symbol)) {
+                     decls_ << "!$omp threadprivate(" << symbol.name() << ")\n";
+                   }
+                 },
              },
       symbol.details());
 }
@@ -925,6 +931,7 @@
   parser::Options options;
   options.isModuleFile = true;
   options.features.Enable(common::LanguageFeature::BackslashEscapes);
+  options.features.Enable(common::LanguageFeature::OpenMP);
   if (!isIntrinsic.value_or(false)) {
     options.searchDirectories = context_.searchDirectories();
     // If a directory is in both lists, the intrinsic module directory


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D120396.410977.patch
Type: text/x-patch
Size: 2182 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20220224/4167b76b/attachment.bin>


More information about the llvm-commits mailing list