[flang-commits] [flang] [mlir] [flang][acc] Add PointerLikeType API for MemRef type conversion (PR #203965)

Razvan Lupusoru via flang-commits flang-commits at lists.llvm.org
Mon Jun 15 12:00:44 PDT 2026


https://github.com/razvanlupusoru updated https://github.com/llvm/llvm-project/pull/203965

>From c8d7c22128f6115cf6977088806e3cad05bc1a4f Mon Sep 17 00:00:00 2001
From: Razvan Lupusoru <rlupusoru at nvidia.com>
Date: Mon, 15 Jun 2026 11:14:12 -0700
Subject: [PATCH 1/4] [flang][acc] Add PointerLikeType API for MemRef type
 conversion

This PR adds a PointerLikeType API named `getAsMemRefType` whose
intent is to establish equivalent MemRefType - the first use
case for this will be privatization and shared memory handling
to be done in a dialect-independent way. The Flang implementation
uses FIRToMemRefTypeConverter to do so.
---
 .../Support/FIROpenACCTypeInterfaces.h        |   3 +
 .../Optimizer/OpenACC/Support/CMakeLists.txt  |   1 +
 .../Support/FIROpenACCTypeInterfaces.cpp      |  25 ++++
 flang/unittests/Optimizer/CMakeLists.txt      |   4 +
 ...FIROpenACCPointerLikeTypeInterfaceTest.cpp | 123 ++++++++++++++++++
 .../Dialect/OpenACC/OpenACCTypeInterfaces.td  |  12 ++
 mlir/lib/Dialect/OpenACC/IR/OpenACC.cpp       |  14 ++
 .../OpenACC/OpenACCTypeInterfacesTest.cpp     |  43 ++++++
 8 files changed, 225 insertions(+)
 create mode 100644 flang/unittests/Optimizer/OpenACC/FIROpenACCPointerLikeTypeInterfaceTest.cpp

diff --git a/flang/include/flang/Optimizer/OpenACC/Support/FIROpenACCTypeInterfaces.h b/flang/include/flang/Optimizer/OpenACC/Support/FIROpenACCTypeInterfaces.h
index 3798d668ed547..ae47805a1af42 100644
--- a/flang/include/flang/Optimizer/OpenACC/Support/FIROpenACCTypeInterfaces.h
+++ b/flang/include/flang/Optimizer/OpenACC/Support/FIROpenACCTypeInterfaces.h
@@ -57,6 +57,9 @@ struct OpenACCPointerLikeModel
                       mlir::Location loc, mlir::Value value,
                       mlir::Type resultType) const;
 
+  mlir::MemRefType getAsMemRefType(mlir::Type pointer,
+                                   mlir::ModuleOp module) const;
+
   bool isDeviceData(mlir::Type pointer, mlir::Value var) const;
 };
 
diff --git a/flang/lib/Optimizer/OpenACC/Support/CMakeLists.txt b/flang/lib/Optimizer/OpenACC/Support/CMakeLists.txt
index 9ff46c70db3cc..3da0c79fdf4c9 100644
--- a/flang/lib/Optimizer/OpenACC/Support/CMakeLists.txt
+++ b/flang/lib/Optimizer/OpenACC/Support/CMakeLists.txt
@@ -24,6 +24,7 @@ add_flang_library(FIROpenACCSupport
   FIRDialect
   FIRDialectSupport
   FIRSupport
+  FIRTransforms
   HLFIRDialect
 
   MLIR_DEPS
diff --git a/flang/lib/Optimizer/OpenACC/Support/FIROpenACCTypeInterfaces.cpp b/flang/lib/Optimizer/OpenACC/Support/FIROpenACCTypeInterfaces.cpp
index 9a8e7e47e54d0..11dcfdf8f0f4b 100644
--- a/flang/lib/Optimizer/OpenACC/Support/FIROpenACCTypeInterfaces.cpp
+++ b/flang/lib/Optimizer/OpenACC/Support/FIROpenACCTypeInterfaces.cpp
@@ -25,6 +25,7 @@
 #include "flang/Optimizer/Dialect/Support/KindMapping.h"
 #include "flang/Optimizer/OpenACC/Support/FIROpenACCUtils.h"
 #include "flang/Optimizer/Support/Utils.h"
+#include "flang/Optimizer/Transforms/FIRToMemRefTypeConverter.h"
 #include "mlir/Dialect/Arith/IR/Arith.h"
 #include "mlir/Dialect/OpenACC/OpenACC.h"
 #include "mlir/IR/BuiltinOps.h"
@@ -1603,6 +1604,30 @@ template bool OpenACCPointerLikeModel<fir::LLVMPointerType>::genStore(
     mlir::Value valueToStore,
     mlir::TypedValue<mlir::acc::PointerLikeType> destPtr) const;
 
+template <typename Ty>
+mlir::MemRefType OpenACCPointerLikeModel<Ty>::getAsMemRefType(
+    mlir::Type pointer, mlir::ModuleOp module) const {
+  if (auto memrefTy = mlir::dyn_cast<mlir::MemRefType>(pointer))
+    return memrefTy;
+  fir::FIRToMemRefTypeConverter converter(module);
+  converter.setConvertComplexTypes(true);
+  if (!converter.convertibleMemrefType(pointer))
+    return {};
+  return converter.convertMemrefType(pointer);
+}
+
+template mlir::MemRefType OpenACCPointerLikeModel<fir::ReferenceType>::
+    getAsMemRefType(mlir::Type pointer, mlir::ModuleOp module) const;
+
+template mlir::MemRefType OpenACCPointerLikeModel<fir::PointerType>::
+    getAsMemRefType(mlir::Type pointer, mlir::ModuleOp module) const;
+
+template mlir::MemRefType OpenACCPointerLikeModel<fir::HeapType>::getAsMemRefType(
+    mlir::Type pointer, mlir::ModuleOp module) const;
+
+template mlir::MemRefType OpenACCPointerLikeModel<fir::LLVMPointerType>::
+    getAsMemRefType(mlir::Type pointer, mlir::ModuleOp module) const;
+
 template <typename Ty>
 mlir::Value OpenACCPointerLikeModel<Ty>::genCast(mlir::Type pointer,
                                                  mlir::OpBuilder &builder,
diff --git a/flang/unittests/Optimizer/CMakeLists.txt b/flang/unittests/Optimizer/CMakeLists.txt
index 8c2fb1c4dc850..eb1f4f298015a 100644
--- a/flang/unittests/Optimizer/CMakeLists.txt
+++ b/flang/unittests/Optimizer/CMakeLists.txt
@@ -12,7 +12,9 @@ set(LIBS
   FIRCodeGenDialect
   FIRDialect
   FIRDialectSupport
+  FIROpenACCSupport
   FIRSupport
+  FIRTransforms
   HLFIRDialect
   MIFDialect
 )
@@ -36,6 +38,7 @@ add_flang_unittest(FlangOptimizerTests
   Builder/Runtime/TransformationalTest.cpp
   FIRCallInterfaceTest.cpp
   FIRContextTest.cpp
+  OpenACC/FIROpenACCPointerLikeTypeInterfaceTest.cpp
   FIRTypesTest.cpp
   FortranVariableTest.cpp
   InternalNamesTest.cpp
@@ -60,4 +63,5 @@ mlir_target_link_libraries(FlangOptimizerTests
   PRIVATE
   ${dialect_libs}
   ${extension_libs}
+  MLIROpenACCDialect
   )
diff --git a/flang/unittests/Optimizer/OpenACC/FIROpenACCPointerLikeTypeInterfaceTest.cpp b/flang/unittests/Optimizer/OpenACC/FIROpenACCPointerLikeTypeInterfaceTest.cpp
new file mode 100644
index 0000000000000..1da27eababa3a
--- /dev/null
+++ b/flang/unittests/Optimizer/OpenACC/FIROpenACCPointerLikeTypeInterfaceTest.cpp
@@ -0,0 +1,123 @@
+//===- FIROpenACCPointerLikeTypeInterfaceTest.cpp -------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#include "gtest/gtest.h"
+#include "mlir/Dialect/OpenACC/OpenACC.h"
+#include "mlir/IR/BuiltinOps.h"
+#include "flang/Optimizer/Dialect/FIRType.h"
+#include "flang/Optimizer/Dialect/Support/FIRContext.h"
+#include "flang/Optimizer/Dialect/Support/KindMapping.h"
+#include "flang/Optimizer/Support/InitFIR.h"
+
+using namespace mlir;
+
+namespace {
+
+struct FIROpenACCPointerLikeTypeInterfaceTest : public testing::Test {
+  void SetUp() override {
+    mlir::DialectRegistry registry;
+    fir::support::addFIRExtensions(registry);
+    context.appendDialectRegistry(registry);
+    fir::support::loadDialects(context);
+    kindMap = std::make_unique<fir::KindMapping>(&context);
+    module = ModuleOp::create(UnknownLoc::get(&context));
+    fir::setKindMapping(module, *kindMap);
+  }
+
+  MLIRContext context;
+  std::unique_ptr<fir::KindMapping> kindMap;
+  ModuleOp module;
+};
+
+TEST_F(FIROpenACCPointerLikeTypeInterfaceTest,
+    GetAsMemRefTypeFromFirRefStaticArray) {
+  Type f32 = Float32Type::get(&context);
+  Type seq = fir::SequenceType::get({10}, f32);
+  Type refTy = fir::ReferenceType::get(seq);
+  auto ptrLike = cast<acc::PointerLikeType>(refTy);
+
+  MemRefType memrefTy = ptrLike.getAsMemRefType(module);
+  ASSERT_TRUE(memrefTy);
+  EXPECT_EQ(memrefTy.getRank(), 1);
+  EXPECT_EQ(memrefTy.getDimSize(0), 10);
+  EXPECT_TRUE(isa<Float32Type>(memrefTy.getElementType()));
+}
+
+TEST_F(FIROpenACCPointerLikeTypeInterfaceTest,
+    GetAsMemRefTypeFromFirRefMultiDimArray) {
+  Type i32 = IntegerType::get(&context, 32);
+  Type seq = fir::SequenceType::get({2, 3}, i32);
+  Type refTy = fir::ReferenceType::get(seq);
+  auto ptrLike = cast<acc::PointerLikeType>(refTy);
+
+  MemRefType memrefTy = ptrLike.getAsMemRefType(module);
+  ASSERT_TRUE(memrefTy);
+  EXPECT_EQ(memrefTy.getRank(), 2);
+  // MemRef layout is in reversed order:
+  EXPECT_EQ(memrefTy.getDimSize(0), 3);
+  EXPECT_EQ(memrefTy.getDimSize(1), 2);
+  EXPECT_TRUE(isa<IntegerType>(memrefTy.getElementType()));
+  EXPECT_EQ(cast<IntegerType>(memrefTy.getElementType()).getWidth(), 32u);
+}
+
+TEST_F(FIROpenACCPointerLikeTypeInterfaceTest,
+    GetAsMemRefTypeFromFirHeapDynamicArray) {
+  Type f64 = Float64Type::get(&context);
+  Type seq = fir::SequenceType::get({ShapedType::kDynamic}, f64);
+  Type heapTy = fir::HeapType::get(seq);
+  auto ptrLike = cast<acc::PointerLikeType>(heapTy);
+
+  MemRefType memrefTy = ptrLike.getAsMemRefType(module);
+  ASSERT_TRUE(memrefTy);
+  EXPECT_EQ(memrefTy.getRank(), 1);
+  EXPECT_EQ(memrefTy.getDimSize(0), ShapedType::kDynamic);
+  EXPECT_TRUE(isa<Float64Type>(memrefTy.getElementType()));
+}
+
+TEST_F(FIROpenACCPointerLikeTypeInterfaceTest,
+    GetAsMemRefTypeFromFirPointerStaticArray) {
+  Type f32 = Float32Type::get(&context);
+  Type seq = fir::SequenceType::get({4}, f32);
+  Type ptrTy = fir::PointerType::get(seq);
+  auto ptrLike = cast<acc::PointerLikeType>(ptrTy);
+
+  MemRefType memrefTy = ptrLike.getAsMemRefType(module);
+  ASSERT_TRUE(memrefTy);
+  EXPECT_EQ(memrefTy.getRank(), 1);
+  EXPECT_EQ(memrefTy.getDimSize(0), 4);
+}
+
+TEST_F(FIROpenACCPointerLikeTypeInterfaceTest,
+    GetAsMemRefTypeFromFirRefScalarInteger) {
+  Type i32 = IntegerType::get(&context, 32);
+  Type refTy = fir::ReferenceType::get(i32);
+  auto ptrLike = cast<acc::PointerLikeType>(refTy);
+
+  MemRefType memrefTy = ptrLike.getAsMemRefType(module);
+  ASSERT_TRUE(memrefTy);
+  EXPECT_EQ(memrefTy.getRank(), 0);
+  EXPECT_TRUE(isa<IntegerType>(memrefTy.getElementType()));
+  EXPECT_EQ(cast<IntegerType>(memrefTy.getElementType()).getWidth(), 32u);
+}
+
+TEST_F(FIROpenACCPointerLikeTypeInterfaceTest,
+    GetAsMemRefTypeFromFirRefScalarLogical) {
+  constexpr unsigned logicalKind = 4;
+  Type logicalTy = fir::LogicalType::get(&context, logicalKind);
+  Type refTy = fir::ReferenceType::get(logicalTy);
+  auto ptrLike = cast<acc::PointerLikeType>(refTy);
+
+  MemRefType memrefTy = ptrLike.getAsMemRefType(module);
+  ASSERT_TRUE(memrefTy);
+  EXPECT_EQ(memrefTy.getRank(), 0);
+  auto elTy = dyn_cast<IntegerType>(memrefTy.getElementType());
+  ASSERT_TRUE(elTy);
+  EXPECT_EQ(elTy.getWidth(), kindMap->getLogicalBitsize(logicalKind));
+}
+
+} // namespace
diff --git a/mlir/include/mlir/Dialect/OpenACC/OpenACCTypeInterfaces.td b/mlir/include/mlir/Dialect/OpenACC/OpenACCTypeInterfaces.td
index 2753056bf8a7a..37af4a4744839 100644
--- a/mlir/include/mlir/Dialect/OpenACC/OpenACCTypeInterfaces.td
+++ b/mlir/include/mlir/Dialect/OpenACC/OpenACCTypeInterfaces.td
@@ -248,6 +248,18 @@ def OpenACC_PointerLikeTypeInterface : TypeInterface<"PointerLikeType"> {
         return {};
       }]
     >,
+    InterfaceMethod<
+      /*description=*/[{
+        Return this type as an equivalent MemRef type when convertible.
+      }],
+      /*retTy=*/"::mlir::MemRefType",
+      /*methodName=*/"getAsMemRefType",
+      /*args=*/(ins "::mlir::ModuleOp":$module),
+      /*methodBody=*/"",
+      /*defaultImplementation=*/[{
+        return {};
+      }]
+    >,
     InterfaceMethod<
       /*description=*/[{
         Returns true if the pointer points to device data.
diff --git a/mlir/lib/Dialect/OpenACC/IR/OpenACC.cpp b/mlir/lib/Dialect/OpenACC/IR/OpenACC.cpp
index 69a83a90d0d95..d793645e49eca 100644
--- a/mlir/lib/Dialect/OpenACC/IR/OpenACC.cpp
+++ b/mlir/lib/Dialect/OpenACC/IR/OpenACC.cpp
@@ -283,6 +283,11 @@ struct MemRefPointerLikeModel
     Attribute memSpace = memrefTy.getMemorySpace();
     return isa_and_nonnull<gpu::AddressSpaceAttr>(memSpace);
   }
+
+  MemRefType getAsMemRefType(Type pointer, ModuleOp module) const {
+    (void)module;
+    return dyn_cast<MemRefType>(pointer);
+  }
 };
 
 struct LLVMPointerPointerLikeModel
@@ -361,6 +366,15 @@ struct PrivateTypePointerLikeModel
       return {};
     return UnwrapPrivateOp::create(builder, loc, resultType, value).getResult();
   }
+
+  MemRefType getAsMemRefType(Type type, ModuleOp module) const {
+    Type baseTy = cast<PrivateType>(type).getBaseTy();
+    if (auto memrefTy = dyn_cast<MemRefType>(baseTy))
+      return memrefTy;
+    if (auto ptrLikeTy = dyn_cast<PointerLikeType>(baseTy))
+      return ptrLikeTy.getAsMemRefType(module);
+    return {};
+  }
 };
 
 struct MemrefAddressOfGlobalModel
diff --git a/mlir/unittests/Dialect/OpenACC/OpenACCTypeInterfacesTest.cpp b/mlir/unittests/Dialect/OpenACC/OpenACCTypeInterfacesTest.cpp
index 9e9b05e969211..7438ee577952c 100644
--- a/mlir/unittests/Dialect/OpenACC/OpenACCTypeInterfacesTest.cpp
+++ b/mlir/unittests/Dialect/OpenACC/OpenACCTypeInterfacesTest.cpp
@@ -277,3 +277,46 @@ TEST_F(OpenACCTypeInterfacesTest, PointerLikeGenCastPrivateTypeToMemref) {
   ASSERT_TRUE(unwrap);
   EXPECT_EQ(unwrap.getHandle(), handle);
 }
+
+//===----------------------------------------------------------------------===//
+// PointerLikeType::getAsMemRefType tests
+//===----------------------------------------------------------------------===//
+
+TEST_F(OpenACCTypeInterfacesTest, PointerLikeGetAsMemRefTypeRankedMemref) {
+  Location loc = UnknownLoc::get(&context);
+  OwningOpRef<ModuleOp> module = ModuleOp::create(loc);
+
+  auto memTy = MemRefType::get({4, 8}, Float32Type::get(&context));
+  auto ptrLike = cast<PointerLikeType>(memTy);
+  EXPECT_EQ(ptrLike.getAsMemRefType(*module), memTy);
+}
+
+TEST_F(OpenACCTypeInterfacesTest, PointerLikeGetAsMemRefTypeUnrankedMemref) {
+  Location loc = UnknownLoc::get(&context);
+  OwningOpRef<ModuleOp> module = ModuleOp::create(loc);
+
+  auto unrankedTy =
+      UnrankedMemRefType::get(Float32Type::get(&context), /*memorySpace=*/0);
+  auto ptrLike = cast<PointerLikeType>(unrankedTy);
+  EXPECT_FALSE(ptrLike.getAsMemRefType(*module));
+}
+
+TEST_F(OpenACCTypeInterfacesTest, PointerLikeGetAsMemRefTypePrivateTypeMemrefBase) {
+  Location loc = UnknownLoc::get(&context);
+  OwningOpRef<ModuleOp> module = ModuleOp::create(loc);
+
+  Type memrefTy = MemRefType::get({10}, IntegerType::get(&context, 64));
+  Type privateTy = PrivateType::get(&context, memrefTy);
+  auto ptrLike = cast<PointerLikeType>(privateTy);
+  EXPECT_EQ(ptrLike.getAsMemRefType(*module), memrefTy);
+}
+
+TEST_F(OpenACCTypeInterfacesTest,
+       PointerLikeGetAsMemRefTypePrivateTypeNonMemrefBase) {
+  Location loc = UnknownLoc::get(&context);
+  OwningOpRef<ModuleOp> module = ModuleOp::create(loc);
+
+  Type privateTy = PrivateType::get(&context, IntegerType::get(&context, 8));
+  auto ptrLike = cast<PointerLikeType>(privateTy);
+  EXPECT_FALSE(ptrLike.getAsMemRefType(*module));
+}

>From 5280437e13d1378afaee5fe948021c5990068970 Mon Sep 17 00:00:00 2001
From: Razvan Lupusoru <rlupusoru at nvidia.com>
Date: Mon, 15 Jun 2026 11:32:44 -0700
Subject: [PATCH 2/4] Fix format

---
 .../Support/FIROpenACCTypeInterfaces.cpp      | 23 +++++++++++--------
 .../OpenACC/OpenACCTypeInterfacesTest.cpp     |  3 ++-
 2 files changed, 16 insertions(+), 10 deletions(-)

diff --git a/flang/lib/Optimizer/OpenACC/Support/FIROpenACCTypeInterfaces.cpp b/flang/lib/Optimizer/OpenACC/Support/FIROpenACCTypeInterfaces.cpp
index 11dcfdf8f0f4b..da9114200a5f2 100644
--- a/flang/lib/Optimizer/OpenACC/Support/FIROpenACCTypeInterfaces.cpp
+++ b/flang/lib/Optimizer/OpenACC/Support/FIROpenACCTypeInterfaces.cpp
@@ -1605,8 +1605,9 @@ template bool OpenACCPointerLikeModel<fir::LLVMPointerType>::genStore(
     mlir::TypedValue<mlir::acc::PointerLikeType> destPtr) const;
 
 template <typename Ty>
-mlir::MemRefType OpenACCPointerLikeModel<Ty>::getAsMemRefType(
-    mlir::Type pointer, mlir::ModuleOp module) const {
+mlir::MemRefType
+OpenACCPointerLikeModel<Ty>::getAsMemRefType(mlir::Type pointer,
+                                             mlir::ModuleOp module) const {
   if (auto memrefTy = mlir::dyn_cast<mlir::MemRefType>(pointer))
     return memrefTy;
   fir::FIRToMemRefTypeConverter converter(module);
@@ -1616,17 +1617,21 @@ mlir::MemRefType OpenACCPointerLikeModel<Ty>::getAsMemRefType(
   return converter.convertMemrefType(pointer);
 }
 
-template mlir::MemRefType OpenACCPointerLikeModel<fir::ReferenceType>::
-    getAsMemRefType(mlir::Type pointer, mlir::ModuleOp module) const;
+template mlir::MemRefType
+OpenACCPointerLikeModel<fir::ReferenceType>::getAsMemRefType(
+    mlir::Type pointer, mlir::ModuleOp module) const;
 
-template mlir::MemRefType OpenACCPointerLikeModel<fir::PointerType>::
-    getAsMemRefType(mlir::Type pointer, mlir::ModuleOp module) const;
+template mlir::MemRefType
+OpenACCPointerLikeModel<fir::PointerType>::getAsMemRefType(
+    mlir::Type pointer, mlir::ModuleOp module) const;
 
-template mlir::MemRefType OpenACCPointerLikeModel<fir::HeapType>::getAsMemRefType(
+template mlir::MemRefType
+OpenACCPointerLikeModel<fir::HeapType>::getAsMemRefType(
     mlir::Type pointer, mlir::ModuleOp module) const;
 
-template mlir::MemRefType OpenACCPointerLikeModel<fir::LLVMPointerType>::
-    getAsMemRefType(mlir::Type pointer, mlir::ModuleOp module) const;
+template mlir::MemRefType
+OpenACCPointerLikeModel<fir::LLVMPointerType>::getAsMemRefType(
+    mlir::Type pointer, mlir::ModuleOp module) const;
 
 template <typename Ty>
 mlir::Value OpenACCPointerLikeModel<Ty>::genCast(mlir::Type pointer,
diff --git a/mlir/unittests/Dialect/OpenACC/OpenACCTypeInterfacesTest.cpp b/mlir/unittests/Dialect/OpenACC/OpenACCTypeInterfacesTest.cpp
index 7438ee577952c..2940712204930 100644
--- a/mlir/unittests/Dialect/OpenACC/OpenACCTypeInterfacesTest.cpp
+++ b/mlir/unittests/Dialect/OpenACC/OpenACCTypeInterfacesTest.cpp
@@ -301,7 +301,8 @@ TEST_F(OpenACCTypeInterfacesTest, PointerLikeGetAsMemRefTypeUnrankedMemref) {
   EXPECT_FALSE(ptrLike.getAsMemRefType(*module));
 }
 
-TEST_F(OpenACCTypeInterfacesTest, PointerLikeGetAsMemRefTypePrivateTypeMemrefBase) {
+TEST_F(OpenACCTypeInterfacesTest,
+       PointerLikeGetAsMemRefTypePrivateTypeMemrefBase) {
   Location loc = UnknownLoc::get(&context);
   OwningOpRef<ModuleOp> module = ModuleOp::create(loc);
 

>From f8f0a06c0a7e2975c3dc3883295dc0c1b3c00ceb Mon Sep 17 00:00:00 2001
From: Razvan Lupusoru <rlupusoru at nvidia.com>
Date: Mon, 15 Jun 2026 11:41:35 -0700
Subject: [PATCH 3/4] Remove not needed dependency

---
 flang/lib/Optimizer/OpenACC/Support/CMakeLists.txt | 1 -
 1 file changed, 1 deletion(-)

diff --git a/flang/lib/Optimizer/OpenACC/Support/CMakeLists.txt b/flang/lib/Optimizer/OpenACC/Support/CMakeLists.txt
index 3da0c79fdf4c9..9ff46c70db3cc 100644
--- a/flang/lib/Optimizer/OpenACC/Support/CMakeLists.txt
+++ b/flang/lib/Optimizer/OpenACC/Support/CMakeLists.txt
@@ -24,7 +24,6 @@ add_flang_library(FIROpenACCSupport
   FIRDialect
   FIRDialectSupport
   FIRSupport
-  FIRTransforms
   HLFIRDialect
 
   MLIR_DEPS

>From 2cbe82ab38d18bbf76d1412e7d1c593613e06cbd Mon Sep 17 00:00:00 2001
From: Razvan Lupusoru <rlupusoru at nvidia.com>
Date: Mon, 15 Jun 2026 11:45:30 -0700
Subject: [PATCH 4/4] Change cmakelists file order so that folders are shown
 first

---
 flang/unittests/Optimizer/CMakeLists.txt | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/flang/unittests/Optimizer/CMakeLists.txt b/flang/unittests/Optimizer/CMakeLists.txt
index eb1f4f298015a..3af6f9d2a3724 100644
--- a/flang/unittests/Optimizer/CMakeLists.txt
+++ b/flang/unittests/Optimizer/CMakeLists.txt
@@ -36,9 +36,9 @@ add_flang_unittest(FlangOptimizerTests
   Builder/Runtime/ReductionTest.cpp
   Builder/Runtime/StopTest.cpp
   Builder/Runtime/TransformationalTest.cpp
+  OpenACC/FIROpenACCPointerLikeTypeInterfaceTest.cpp
   FIRCallInterfaceTest.cpp
   FIRContextTest.cpp
-  OpenACC/FIROpenACCPointerLikeTypeInterfaceTest.cpp
   FIRTypesTest.cpp
   FortranVariableTest.cpp
   InternalNamesTest.cpp



More information about the flang-commits mailing list