[flang-commits] [flang] bc99d56 - [NFC][Flang][OpenMP] Refactor getting ompobject symbol

via flang-commits flang-commits at lists.llvm.org
Wed Jun 8 09:29:36 PDT 2022


Author: PeixinQiao
Date: 2022-06-09T00:29:07+08:00
New Revision: bc99d56589d86fbd7280b525d0889ca591012a6f

URL: https://github.com/llvm/llvm-project/commit/bc99d56589d86fbd7280b525d0889ca591012a6f
DIFF: https://github.com/llvm/llvm-project/commit/bc99d56589d86fbd7280b525d0889ca591012a6f.diff

LOG: [NFC][Flang][OpenMP] Refactor getting ompobject symbol

Getting ompobject symbol is needed in multiple places and will be
needed later for the lowering of other constructs/clauses such as
copyin clause. Extract them into one function.

Reviewed By: kiranchandramohan

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

Added: 
    

Modified: 
    flang/lib/Lower/OpenMP.cpp

Removed: 
    


################################################################################
diff  --git a/flang/lib/Lower/OpenMP.cpp b/flang/lib/Lower/OpenMP.cpp
index d53617c7bd59d..e0028cc0e9b6c 100644
--- a/flang/lib/Lower/OpenMP.cpp
+++ b/flang/lib/Lower/OpenMP.cpp
@@ -44,23 +44,27 @@ getDesignatorNameIfDataRef(const Fortran::parser::Designator &designator) {
   return dataRef ? std::get_if<Fortran::parser::Name>(&dataRef->u) : nullptr;
 }
 
+static Fortran::semantics::Symbol *
+getOmpObjectSymbol(const Fortran::parser::OmpObject &ompObject) {
+  Fortran::semantics::Symbol *sym = nullptr;
+  std::visit(Fortran::common::visitors{
+                 [&](const Fortran::parser::Designator &designator) {
+                   if (const Fortran::parser::Name *name =
+                           getDesignatorNameIfDataRef(designator)) {
+                     sym = name->symbol;
+                   }
+                 },
+                 [&](const Fortran::parser::Name &name) { sym = name.symbol; }},
+             ompObject.u);
+  return sym;
+}
+
 template <typename T>
 static void createPrivateVarSyms(Fortran::lower::AbstractConverter &converter,
                                  const T *clause) {
-  Fortran::semantics::Symbol *sym = nullptr;
   const Fortran::parser::OmpObjectList &ompObjectList = clause->v;
   for (const Fortran::parser::OmpObject &ompObject : ompObjectList.v) {
-    std::visit(
-        Fortran::common::visitors{
-            [&](const Fortran::parser::Designator &designator) {
-              if (const Fortran::parser::Name *name =
-                      getDesignatorNameIfDataRef(designator)) {
-                sym = name->symbol;
-              }
-            },
-            [&](const Fortran::parser::Name &name) { sym = name.symbol; }},
-        ompObject.u);
-
+    Fortran::semantics::Symbol *sym = getOmpObjectSymbol(ompObject);
     // Privatization for symbols which are pre-determined (like loop index
     // variables) happen separately, for everything else privatize here
     if constexpr (std::is_same_v<T, Fortran::parser::OmpClause::Firstprivate>) {
@@ -204,17 +208,8 @@ static void genObjectList(const Fortran::parser::OmpObjectList &objectList,
     }
   };
   for (const Fortran::parser::OmpObject &ompObject : objectList.v) {
-    std::visit(Fortran::common::visitors{
-                   [&](const Fortran::parser::Designator &designator) {
-                     if (const Fortran::parser::Name *name =
-                             getDesignatorNameIfDataRef(designator)) {
-                       addOperands(*name->symbol);
-                     }
-                   },
-                   [&](const Fortran::parser::Name &name) {
-                     addOperands(*name.symbol);
-                   }},
-               ompObject.u);
+    Fortran::semantics::Symbol *sym = getOmpObjectSymbol(ompObject);
+    addOperands(*sym);
   }
 }
 


        


More information about the flang-commits mailing list