Author: Valentin Clement (バレンタイン クレメン) Date: 2025-12-30T13:04:59-08:00 New Revision: 3d03f73453e70e3cdc4b036199864709e497650a
URL: https://github.com/llvm/llvm-project/commit/3d03f73453e70e3cdc4b036199864709e497650a DIFF: https://github.com/llvm/llvm-project/commit/3d03f73453e70e3cdc4b036199864709e497650a.diff LOG: Revert "[flang][cuda] Emit error when a device actual argument is used in hos…" This reverts commit 68a0b93b1f582ac40fac512b8064af0f8771fe39. Added: Modified: flang/lib/Semantics/check-call.cpp flang/lib/Semantics/resolve-names.cpp flang/test/Lower/CUDA/cuda-data-transfer.cuf flang/test/Semantics/cuf23.cuf Removed: ################################################################################ diff --git a/flang/lib/Semantics/check-call.cpp b/flang/lib/Semantics/check-call.cpp index b084746a3f787..5f276d9b9f4f8 100644 --- a/flang/lib/Semantics/check-call.cpp +++ b/flang/lib/Semantics/check-call.cpp @@ -18,7 +18,6 @@ #include "flang/Parser/message.h" #include "flang/Semantics/scope.h" #include "flang/Semantics/tools.h" -#include "llvm/ADT/StringSet.h" #include <map> #include <string> @@ -341,15 +340,6 @@ static bool DefersSameTypeParameters( return true; } -// List of intrinsics that are skipped when checking for device actual -// arguments. -static const llvm::StringSet<> cudaSkippedIntrinsics = { - "__builtin_c_f_pointer", "__builtin_c_loc"}; -// List of intrinsics that can have a device actual argument if it is an -// allocatable or pointer. -static const llvm::StringSet<> cudaAllowedIntrinsics = {"size", "lbound", - "ubound", "shape", "allocated", "associated", "kind", "present"}; - static void CheckExplicitDataArg(const characteristics::DummyDataObject &dummy, const std::string &dummyName, evaluate::Expr<evaluate::SomeType> &actual, characteristics::TypeAndShape &actualType, bool isElemental, @@ -1150,32 +1140,6 @@ static void CheckExplicitDataArg(const characteristics::DummyDataObject &dummy, dummyName, toStr(dummyDataAttr), toStr(actualDataAttr)); } } - // Emit an error message if an actual argument passed to a host intrinsic is - // on the device. - if (intrinsic && !FindCUDADeviceContext(scope) && - !FindOpenACCConstructContaining(scope)) { - if (!cudaSkippedIntrinsics.contains(intrinsic->name)) { - std::optional<common::CUDADataAttr> actualDataAttr; - if (const auto *actualObject{actualLastSymbol - ? actualLastSymbol->detailsIf<ObjectEntityDetails>() - : nullptr}) { - actualDataAttr = actualObject->cudaDataAttr(); - } - if (actualDataAttr && *actualDataAttr == common::CUDADataAttr::Device) { - // Allocatable or pointer with device attribute have their descriptor in - // managed memory. It is allowed to pass them to some inquiry - // intrinsics. - if (!actualLastSymbol || !IsAllocatableOrPointer(*actualLastSymbol) || - (IsAllocatableOrPointer(*actualLastSymbol) && - !cudaAllowedIntrinsics.contains(intrinsic->name))) { - messages.Say( - "Actual argument %s associated with host intrinsic %s is on the device"_err_en_US, - actualLastSymbol ? actualLastSymbol->name() : "", - intrinsic->name); - } - } - } - } // Warning for breaking F'2023 change with character allocatables if (intrinsic && dummy.intent != common::Intent::In) { diff --git a/flang/lib/Semantics/resolve-names.cpp b/flang/lib/Semantics/resolve-names.cpp index 6b59eb94c1c9b..5cc887791048d 100644 --- a/flang/lib/Semantics/resolve-names.cpp +++ b/flang/lib/Semantics/resolve-names.cpp @@ -1081,8 +1081,6 @@ class DeclarationVisitor : public ArraySpecVisitor, bool Pre(const parser::SaveStmt &); bool Pre(const parser::BasedPointer &); void Post(const parser::BasedPointer &); - bool Pre(const parser::CUFKernelDoConstruct &); - void Post(const parser::CUFKernelDoConstruct &); void PointerInitialization( const parser::Name &, const parser::InitialDataTarget &); @@ -9280,16 +9278,6 @@ void DeclarationVisitor::LegacyDataInitialization(const parser::Name &name, } } -bool DeclarationVisitor::Pre(const parser::CUFKernelDoConstruct &x) { - // Treat CUDA kernel do construct as OpenACC construct. - PushScope(Scope::Kind::OpenACCConstruct, nullptr); - return true; -} - -void DeclarationVisitor::Post(const parser::CUFKernelDoConstruct &x) { - PopScope(); -} - void ResolveNamesVisitor::HandleCall( Symbol::Flag procFlag, const parser::Call &call) { common::visit( diff --git a/flang/test/Lower/CUDA/cuda-data-transfer.cuf b/flang/test/Lower/CUDA/cuda-data-transfer.cuf index e0c23a1d5df8f..015947430b07c 100644 --- a/flang/test/Lower/CUDA/cuda-data-transfer.cuf +++ b/flang/test/Lower/CUDA/cuda-data-transfer.cuf @@ -22,15 +22,6 @@ module mod1 end function end interface - interface - function somefunction(d, n) - integer :: n - real(8), device :: d(n,n) - real(8) :: somefunction(n) - end function - end interface - - contains function dev1(a) integer, device :: a(:) @@ -456,10 +447,9 @@ end subroutine ! CHECK: cuf.data_transfer subroutine sub23(n) - use mod1 integer :: n real(8), device :: d(n,n), x(n) - x = somefunction(d,2) ! Was triggering Unsupported CUDA data transfer + x = sum(d,dim=2) ! Was triggering Unsupported CUDA data transfer end subroutine ! CHECK-LABEL: func.func @_QPsub23 diff --git a/flang/test/Semantics/cuf23.cuf b/flang/test/Semantics/cuf23.cuf index 73f13d1d46a17..8c03c18d9b0db 100644 --- a/flang/test/Semantics/cuf23.cuf +++ b/flang/test/Semantics/cuf23.cuf @@ -53,10 +53,3 @@ attributes(global) subroutine global_with_block() print*, a ! ok end block end subroutine - -subroutine intrinsic_error(n) - integer :: n - real(8), device :: d(n,n), x(n) -!ERROR: Actual argument d associated with host intrinsic sum is on the device - x = sum(d,dim=2) -end subroutine _______________________________________________ llvm-branch-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits
