[flang-commits] [flang] a535078 - Revert "[flang][cuda] Allocate derived-type with CUDA componement in managed memory (#146797)"
Valentin Clement via flang-commits
flang-commits at lists.llvm.org
Wed Jul 2 17:52:24 PDT 2025
Author: Valentin Clement
Date: 2025-07-02T17:51:45-07:00
New Revision: a5350785db62f2082bd700fc68bbab9781d03489
URL: https://github.com/llvm/llvm-project/commit/a5350785db62f2082bd700fc68bbab9781d03489
DIFF: https://github.com/llvm/llvm-project/commit/a5350785db62f2082bd700fc68bbab9781d03489.diff
LOG: Revert "[flang][cuda] Allocate derived-type with CUDA componement in managed memory (#146797)"
This reverts commit 925588cd001a91d592b99e6e7c6bee9514f5a26e.
Added:
Modified:
flang/lib/Lower/ConvertVariable.cpp
flang/lib/Semantics/tools.cpp
flang/test/Lower/CUDA/cuda-derived.cuf
Removed:
################################################################################
diff --git a/flang/lib/Lower/ConvertVariable.cpp b/flang/lib/Lower/ConvertVariable.cpp
index 44f534e7d569a..7ab3c43016bd9 100644
--- a/flang/lib/Lower/ConvertVariable.cpp
+++ b/flang/lib/Lower/ConvertVariable.cpp
@@ -702,29 +702,6 @@ static void instantiateGlobal(Fortran::lower::AbstractConverter &converter,
mapSymbolAttributes(converter, var, symMap, stmtCtx, cast);
}
-bool needCUDAAlloc(const Fortran::semantics::Symbol &sym) {
- if (Fortran::semantics::IsDummy(sym))
- return false;
- if (const auto *details{
- sym.GetUltimate()
- .detailsIf<Fortran::semantics::ObjectEntityDetails>()}) {
- if (details->cudaDataAttr() &&
- (*details->cudaDataAttr() == Fortran::common::CUDADataAttr::Device ||
- *details->cudaDataAttr() == Fortran::common::CUDADataAttr::Managed ||
- *details->cudaDataAttr() == Fortran::common::CUDADataAttr::Unified ||
- *details->cudaDataAttr() == Fortran::common::CUDADataAttr::Shared ||
- *details->cudaDataAttr() == Fortran::common::CUDADataAttr::Pinned))
- return true;
- const Fortran::semantics::DeclTypeSpec *type{details->type()};
- const Fortran::semantics::DerivedTypeSpec *derived{type ? type->AsDerived()
- : nullptr};
- if (derived)
- if (FindCUDADeviceAllocatableUltimateComponent(*derived))
- return true;
- }
- return false;
-}
-
//===----------------------------------------------------------------===//
// Local variables instantiation (not for alias)
//===----------------------------------------------------------------===//
@@ -755,7 +732,7 @@ static mlir::Value createNewLocal(Fortran::lower::AbstractConverter &converter,
if (ultimateSymbol.test(Fortran::semantics::Symbol::Flag::CrayPointee))
return builder.create<fir::ZeroOp>(loc, fir::ReferenceType::get(ty));
- if (needCUDAAlloc(ultimateSymbol)) {
+ if (Fortran::semantics::NeedCUDAAlloc(ultimateSymbol)) {
cuf::DataAttributeAttr dataAttr =
Fortran::lower::translateSymbolCUFDataAttribute(builder.getContext(),
ultimateSymbol);
@@ -1110,7 +1087,7 @@ static void instantiateLocal(Fortran::lower::AbstractConverter &converter,
Fortran::lower::defaultInitializeAtRuntime(converter, var.getSymbol(),
symMap);
auto *builder = &converter.getFirOpBuilder();
- if (needCUDAAlloc(var.getSymbol()) &&
+ if (Fortran::semantics::NeedCUDAAlloc(var.getSymbol()) &&
!cuf::isCUDADeviceContext(builder->getRegion())) {
cuf::DataAttributeAttr dataAttr =
Fortran::lower::translateSymbolCUFDataAttribute(builder->getContext(),
diff --git a/flang/lib/Semantics/tools.cpp b/flang/lib/Semantics/tools.cpp
index ea37316e78273..498bbc18709ab 100644
--- a/flang/lib/Semantics/tools.cpp
+++ b/flang/lib/Semantics/tools.cpp
@@ -1095,20 +1095,9 @@ bool IsDeviceAllocatable(const Symbol &symbol) {
}
std::optional<common::CUDADataAttr> GetCUDADataAttr(const Symbol *symbol) {
- const auto *details{
+ const auto *object{
symbol ? symbol->detailsIf<ObjectEntityDetails>() : nullptr};
- if (details) {
- const Fortran::semantics::DeclTypeSpec *type{details->type()};
- const Fortran::semantics::DerivedTypeSpec *derived{
- type ? type->AsDerived() : nullptr};
- if (derived) {
- if (FindCUDADeviceAllocatableUltimateComponent(*derived)) {
- return common::CUDADataAttr::Managed;
- }
- }
- return details->cudaDataAttr();
- }
- return std::nullopt;
+ return object ? object->cudaDataAttr() : std::nullopt;
}
bool IsAccessible(const Symbol &original, const Scope &scope) {
diff --git a/flang/test/Lower/CUDA/cuda-derived.cuf b/flang/test/Lower/CUDA/cuda-derived.cuf
index 96250d88d81c4..d280ac722d08f 100644
--- a/flang/test/Lower/CUDA/cuda-derived.cuf
+++ b/flang/test/Lower/CUDA/cuda-derived.cuf
@@ -7,16 +7,6 @@ module m1
type t1; real, device, allocatable :: a(:); end type
type t2; type(t1) :: b; end type
-contains
- subroutine sub1()
- type(ty_device) :: a
- end subroutine
-
-! CHECK-LABEL: func.func @_QMm1Psub1()
-! CHECK: %[[ALLOC:.*]] = cuf.alloc !fir.type<_QMm1Tty_device{x:!fir.box<!fir.heap<!fir.array<?xi32>>>}> {bindc_name = "a", data_attr = #cuf.cuda<managed>, uniq_name = "_QMm1Fsub1Ea"} -> !fir.ref<!fir.type<_QMm1Tty_device{x:!fir.box<!fir.heap<!fir.array<?xi32>>>}>>
-! CHECK: %[[DECL:.*]]:2 = hlfir.declare %[[ALLOC]] {data_attr = #cuf.cuda<managed>, uniq_name = "_QMm1Fsub1Ea"} : (!fir.ref<!fir.type<_QMm1Tty_device{x:!fir.box<!fir.heap<!fir.array<?xi32>>>}>>) -> (!fir.ref<!fir.type<_QMm1Tty_device{x:!fir.box<!fir.heap<!fir.array<?xi32>>>}>>, !fir.ref<!fir.type<_QMm1Tty_device{x:!fir.box<!fir.heap<!fir.array<?xi32>>>}>>)
-! CHECK: cuf.free %[[DECL]]#0 : !fir.ref<!fir.type<_QMm1Tty_device{x:!fir.box<!fir.heap<!fir.array<?xi32>>>}>> {data_attr = #cuf.cuda<managed>}
-
end module
program main
@@ -26,5 +16,5 @@ program main
end
! CHECK-LABEL: func.func @_QQmain() attributes {fir.bindc_name = "main"}
-! CHECK: %{{.*}} = cuf.alloc !fir.type<_QMm1Tty_device{x:!fir.box<!fir.heap<!fir.array<?xi32>>>}> {bindc_name = "a", data_attr = #cuf.cuda<managed>, uniq_name = "_QFEa"}
-! CHECK: %{{.*}} = cuf.alloc !fir.type<_QMm1Tt2{b:!fir.type<_QMm1Tt1{a:!fir.box<!fir.heap<!fir.array<?xf32>>>}>}> {bindc_name = "b", data_attr = #cuf.cuda<managed>, uniq_name = "_QFEb"}
+! CHECK: %{{.*}} = fir.alloca !fir.type<_QMm1Tty_device{x:!fir.box<!fir.heap<!fir.array<?xi32>>>}> {bindc_name = "a", uniq_name = "_QFEa"}
+! CHECK: %{{.*}} = fir.alloca !fir.type<_QMm1Tt2{b:!fir.type<_QMm1Tt1{a:!fir.box<!fir.heap<!fir.array<?xf32>>>}>}> {bindc_name = "b", uniq_name = "_QFEb"}
More information about the flang-commits
mailing list