[flang-commits] [flang] 81333cf - [flang][cuda] Relax host array check for cuda constant (#120333)

via flang-commits flang-commits at lists.llvm.org
Tue Dec 17 17:04:35 PST 2024


Author: Valentin Clement (バレンタイン クレメン)
Date: 2024-12-17T17:04:32-08:00
New Revision: 81333cfc5224de3bbfcba5b7306d5910fb332804

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

LOG: [flang][cuda] Relax host array check for cuda constant (#120333)

Array with CONSTANT attribute declared in module spec part are device
arrays and should not trigger the host array check.

Added: 
    

Modified: 
    flang/lib/Semantics/check-cuda.cpp
    flang/test/Semantics/cuf09.cuf

Removed: 
    


################################################################################
diff  --git a/flang/lib/Semantics/check-cuda.cpp b/flang/lib/Semantics/check-cuda.cpp
index 15ee5f32f69b19..bec3969c7a26b7 100644
--- a/flang/lib/Semantics/check-cuda.cpp
+++ b/flang/lib/Semantics/check-cuda.cpp
@@ -114,6 +114,7 @@ struct FindHostArray
           (!details->cudaDataAttr() ||
               (details->cudaDataAttr() &&
                   *details->cudaDataAttr() != common::CUDADataAttr::Device &&
+                  *details->cudaDataAttr() != common::CUDADataAttr::Constant &&
                   *details->cudaDataAttr() != common::CUDADataAttr::Managed &&
                   *details->cudaDataAttr() != common::CUDADataAttr::Shared &&
                   *details->cudaDataAttr() != common::CUDADataAttr::Unified))) {

diff  --git a/flang/test/Semantics/cuf09.cuf b/flang/test/Semantics/cuf09.cuf
index 7452ee7cd7dc6a..b45ca6d7d1a9d7 100644
--- a/flang/test/Semantics/cuf09.cuf
+++ b/flang/test/Semantics/cuf09.cuf
@@ -1,6 +1,7 @@
 ! RUN: %python %S/test_errors.py %s %flang_fc1
 module m
  integer :: m(100)
+ integer, constant :: c(10)
  integer, parameter :: p(5) = [1,2,3,4,5]
  contains
   attributes(device) subroutine devsub
@@ -42,6 +43,12 @@ module m
     i = threadIdx%x
     a(i) = s(10) ! ok, a is device and s is shared
   end subroutine
+
+  attributes(global) subroutine cstarray(a)
+    integer, device :: a(10)
+    i = threadIdx%x
+    a(i) = c(10) ! ok, a is device and c is constant
+  end subroutine
 end
 
 program main


        


More information about the flang-commits mailing list