Author: Akash Banerjee
Date: 2025-09-15T16:10:32+01:00
New Revision: e12f3d0251c98c9561ccf2a40101f5bc86447e82

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

LOG: Revert "[NFC][Flang] Move bounds helper functions to Util header. 
(#154164)"

This reverts commit 32ab6ff9f95739cba9954e666479d30e126af53c.

Added: 
    

Modified: 
    flang/include/flang/Optimizer/OpenMP/Utils.h
    flang/lib/Lower/OpenMP/OpenMP.cpp
    flang/lib/Optimizer/OpenMP/AutomapToTargetData.cpp
    flang/lib/Optimizer/OpenMP/MapsForPrivatizedSymbols.cpp

Removed: 
    


################################################################################
diff  --git a/flang/include/flang/Optimizer/OpenMP/Utils.h 
b/flang/include/flang/Optimizer/OpenMP/Utils.h
index 235e667130659..636c768b016b7 100644
--- a/flang/include/flang/Optimizer/OpenMP/Utils.h
+++ b/flang/include/flang/Optimizer/OpenMP/Utils.h
@@ -13,17 +13,6 @@
 #ifndef FORTRAN_OPTIMIZER_OPENMP_UTILS_H
 #define FORTRAN_OPTIMIZER_OPENMP_UTILS_H
 
-#include "flang/Optimizer/Builder/BoxValue.h"
-#include "flang/Optimizer/Builder/DirectivesCommon.h"
-#include "flang/Optimizer/Builder/FIRBuilder.h"
-#include "flang/Optimizer/Builder/HLFIRTools.h"
-#include "flang/Optimizer/Dialect/FIRType.h"
-
-#include "mlir/Dialect/OpenMP/OpenMPDialect.h"
-#include "mlir/IR/Value.h"
-
-#include "llvm/ADT/SmallVector.h"
-
 namespace flangomp {
 
 enum class DoConcurrentMappingKind {
@@ -32,35 +21,6 @@ enum class DoConcurrentMappingKind {
   DCMK_Device ///< Lower to run in parallel on the GPU.
 };
 
-/// Return true if the variable has a dynamic size and therefore requires
-/// bounds operations to describe its extents.
-inline bool needsBoundsOps(mlir::Value var) {
-  assert(mlir::isa<mlir::omp::PointerLikeType>(var.getType()) &&
-         "needsBoundsOps can deal only with pointer types");
-  mlir::Type t = fir::unwrapRefType(var.getType());
-  if (mlir::Type inner = fir::dyn_cast_ptrOrBoxEleTy(t))
-    return fir::hasDynamicSize(inner);
-  return fir::hasDynamicSize(t);
-}
-
-/// Generate MapBoundsOp operations for the variable and append them to
-/// `boundsOps`.
-inline llvm::SmallVector<mlir::Value> genBoundsOps(fir::FirOpBuilder &builder,
-                                                   mlir::Value var,
-                                                   bool isAssumedSize = false,
-                                                   bool isOptional = false) {
-  mlir::Location loc = var.getLoc();
-  fir::factory::AddrAndBoundsInfo info =
-      fir::factory::getDataOperandBaseAddr(builder, var, isOptional, loc);
-  fir::ExtendedValue exv =
-      hlfir::translateToExtendedValue(loc, builder, hlfir::Entity{info.addr},
-                                      /*contiguousHint=*/true)
-          .first;
-  return fir::factory::genImplicitBoundsOps<mlir::omp::MapBoundsOp,
-                                            mlir::omp::MapBoundsType>(
-      builder, info, exv, isAssumedSize, loc);
-}
-
 } // namespace flangomp
 
 #endif // FORTRAN_OPTIMIZER_OPENMP_UTILS_H

diff  --git a/flang/lib/Lower/OpenMP/OpenMP.cpp 
b/flang/lib/Lower/OpenMP/OpenMP.cpp
index 9279bc04e7daf..0ec33e6b24dbf 100644
--- a/flang/lib/Lower/OpenMP/OpenMP.cpp
+++ b/flang/lib/Lower/OpenMP/OpenMP.cpp
@@ -30,7 +30,6 @@
 #include "flang/Optimizer/Builder/Todo.h"
 #include "flang/Optimizer/Dialect/FIRType.h"
 #include "flang/Optimizer/HLFIR/HLFIROps.h"
-#include "flang/Optimizer/OpenMP/Utils.h"
 #include "flang/Parser/characters.h"
 #include "flang/Parser/openmp-utils.h"
 #include "flang/Parser/parse-tree.h"
@@ -2497,10 +2496,12 @@ genTargetOp(lower::AbstractConverter &converter, 
lower::SymMap &symTable,
           Fortran::lower::getDataOperandBaseAddr(
               converter, firOpBuilder, sym.GetUltimate(),
               converter.getCurrentLocation());
-      llvm::SmallVector<mlir::Value> bounds = flangomp::genBoundsOps(
-          firOpBuilder, info.rawInput,
-          semantics::IsAssumedSizeArray(sym.GetUltimate()),
-          semantics::IsOptional(sym.GetUltimate()));
+      llvm::SmallVector<mlir::Value> bounds =
+          fir::factory::genImplicitBoundsOps<mlir::omp::MapBoundsOp,
+                                             mlir::omp::MapBoundsType>(
+              firOpBuilder, info, dataExv,
+              semantics::IsAssumedSizeArray(sym.GetUltimate()),
+              converter.getCurrentLocation());
       mlir::Value baseOp = info.rawInput;
       mlir::Type eleType = baseOp.getType();
       if (auto refType = mlir::dyn_cast<fir::ReferenceType>(baseOp.getType()))

diff  --git a/flang/lib/Optimizer/OpenMP/AutomapToTargetData.cpp 
b/flang/lib/Optimizer/OpenMP/AutomapToTargetData.cpp
index d4be315c167be..8b9991301aae8 100644
--- a/flang/lib/Optimizer/OpenMP/AutomapToTargetData.cpp
+++ b/flang/lib/Optimizer/OpenMP/AutomapToTargetData.cpp
@@ -13,7 +13,6 @@
 #include "flang/Optimizer/Dialect/FIRType.h"
 #include "flang/Optimizer/Dialect/Support/KindMapping.h"
 #include "flang/Optimizer/HLFIR/HLFIROps.h"
-#include "flang/Optimizer/OpenMP/Utils.h"
 
 #include "mlir/Dialect/OpenMP/OpenMPDialect.h"
 #include "mlir/Dialect/OpenMP/OpenMPInterfaces.h"
@@ -34,6 +33,36 @@ namespace {
 class AutomapToTargetDataPass
     : public flangomp::impl::AutomapToTargetDataPassBase<
           AutomapToTargetDataPass> {
+
+  // Returns true if the variable has a dynamic size and therefore requires
+  // bounds operations to describe its extents.
+  inline bool needsBoundsOps(mlir::Value var) {
+    assert(mlir::isa<mlir::omp::PointerLikeType>(var.getType()) &&
+           "only pointer like types expected");
+    mlir::Type t = fir::unwrapRefType(var.getType());
+    if (mlir::Type inner = fir::dyn_cast_ptrOrBoxEleTy(t))
+      return fir::hasDynamicSize(inner);
+    return fir::hasDynamicSize(t);
+  }
+
+  // Generate MapBoundsOp operations for the variable if required.
+  inline void genBoundsOps(fir::FirOpBuilder &builder, mlir::Value var,
+                           llvm::SmallVectorImpl<mlir::Value> &boundsOps) {
+    mlir::Location loc = var.getLoc();
+    fir::factory::AddrAndBoundsInfo info =
+        fir::factory::getDataOperandBaseAddr(builder, var,
+                                             /*isOptional=*/false, loc);
+    fir::ExtendedValue exv =
+        hlfir::translateToExtendedValue(loc, builder, hlfir::Entity{info.addr},
+                                        /*contiguousHint=*/true)
+            .first;
+    llvm::SmallVector<mlir::Value> tmp =
+        fir::factory::genImplicitBoundsOps<mlir::omp::MapBoundsOp,
+                                           mlir::omp::MapBoundsType>(
+            builder, info, exv, /*dataExvIsAssumedSize=*/false, loc);
+    llvm::append_range(boundsOps, tmp);
+  }
+
   void findRelatedAllocmemFreemem(fir::AddrOfOp addressOfOp,
                                   llvm::DenseSet<fir::StoreOp> &allocmems,
                                   llvm::DenseSet<fir::LoadOp> &freemems) {
@@ -83,8 +112,8 @@ class AutomapToTargetDataPass
     auto addMapInfo = [&](auto globalOp, auto memOp) {
       builder.setInsertionPointAfter(memOp);
       SmallVector<Value> bounds;
-      if (flangomp::needsBoundsOps(memOp.getMemref()))
-        bounds = flangomp::genBoundsOps(builder, memOp.getMemref());
+      if (needsBoundsOps(memOp.getMemref()))
+        genBoundsOps(builder, memOp.getMemref(), bounds);
 
       omp::TargetEnterExitUpdateDataOperands clauses;
       mlir::omp::MapInfoOp mapInfo = mlir::omp::MapInfoOp::create(

diff  --git a/flang/lib/Optimizer/OpenMP/MapsForPrivatizedSymbols.cpp 
b/flang/lib/Optimizer/OpenMP/MapsForPrivatizedSymbols.cpp
index 5c1a3d232a8c9..30328573b74fc 100644
--- a/flang/lib/Optimizer/OpenMP/MapsForPrivatizedSymbols.cpp
+++ b/flang/lib/Optimizer/OpenMP/MapsForPrivatizedSymbols.cpp
@@ -29,7 +29,6 @@
 #include "flang/Optimizer/Dialect/Support/KindMapping.h"
 #include "flang/Optimizer/HLFIR/HLFIROps.h"
 #include "flang/Optimizer/OpenMP/Passes.h"
-#include "flang/Optimizer/OpenMP/Utils.h"
 
 #include "mlir/Dialect/Func/IR/FuncOps.h"
 #include "mlir/Dialect/OpenMP/OpenMPDialect.h"
@@ -107,8 +106,8 @@ class MapsForPrivatizedSymbolsPass
     // Figure out the bounds because knowing the bounds will help the 
subsequent
     // MapInfoFinalizationPass map the underlying data of the descriptor.
     llvm::SmallVector<mlir::Value> boundsOps;
-    if (flangomp::needsBoundsOps(varPtr))
-      boundsOps = flangomp::genBoundsOps(builder, varPtr);
+    if (needsBoundsOps(varPtr))
+      genBoundsOps(builder, varPtr, boundsOps);
 
     mlir::omp::VariableCaptureKind captureKind =
         mlir::omp::VariableCaptureKind::ByRef;
@@ -195,5 +194,38 @@ class MapsForPrivatizedSymbolsPass
       }
     }
   }
+  // As the name suggests, this function examines var to determine if
+  // it has dynamic size. If true, this pass'll have to extract these
+  // bounds from descriptor of var and add the bounds to the resultant
+  // MapInfoOp.
+  bool needsBoundsOps(mlir::Value var) {
+    assert(mlir::isa<omp::PointerLikeType>(var.getType()) &&
+           "needsBoundsOps can deal only with pointer types");
+    mlir::Type t = fir::unwrapRefType(var.getType());
+    // t could be a box, so look inside the box
+    auto innerType = fir::dyn_cast_ptrOrBoxEleTy(t);
+    if (innerType)
+      return fir::hasDynamicSize(innerType);
+    return fir::hasDynamicSize(t);
+  }
+
+  void genBoundsOps(fir::FirOpBuilder &builder, mlir::Value var,
+                    llvm::SmallVector<mlir::Value> &boundsOps) {
+    mlir::Location loc = var.getLoc();
+    fir::factory::AddrAndBoundsInfo info =
+        fir::factory::getDataOperandBaseAddr(builder, var,
+                                             /*isOptional=*/false, loc);
+    fir::ExtendedValue extendedValue =
+        hlfir::translateToExtendedValue(loc, builder, hlfir::Entity{info.addr},
+                                        /*continguousHint=*/true)
+            .first;
+    llvm::SmallVector<mlir::Value> boundsOpsVec =
+        fir::factory::genImplicitBoundsOps<mlir::omp::MapBoundsOp,
+                                           mlir::omp::MapBoundsType>(
+            builder, info, extendedValue,
+            /*dataExvIsAssumedSize=*/false, loc);
+    for (auto bounds : boundsOpsVec)
+      boundsOps.push_back(bounds);
+  }
 };
 } // namespace


        
_______________________________________________
llvm-branch-commits mailing list
llvm-branch-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits

Reply via email to