[flang-commits] [flang] 4065d98 - [flang][cuda] Allow complex type in cuf kernel reduce (#124185)

via flang-commits flang-commits at lists.llvm.org
Thu Jan 23 15:09:28 PST 2025


Author: Valentin Clement (バレンタイン クレメン)
Date: 2025-01-23T15:09:24-08:00
New Revision: 4065d985ab0f012f7fc0718685f6c12cf0352929

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

LOG: [flang][cuda] Allow complex type in cuf kernel reduce (#124185)

Added: 
    

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

Removed: 
    


################################################################################
diff  --git a/flang/lib/Semantics/check-cuda.cpp b/flang/lib/Semantics/check-cuda.cpp
index d8a5639227648f..f1bdb4f20a55cf 100644
--- a/flang/lib/Semantics/check-cuda.cpp
+++ b/flang/lib/Semantics/check-cuda.cpp
@@ -553,7 +553,8 @@ static void CheckReduce(
         case parser::ReductionOperator::Operator::Multiply:
         case parser::ReductionOperator::Operator::Max:
         case parser::ReductionOperator::Operator::Min:
-          isOk = cat == TypeCategory::Integer || cat == TypeCategory::Real;
+          isOk = cat == TypeCategory::Integer || cat == TypeCategory::Real ||
+              cat == TypeCategory::Complex;
           break;
         case parser::ReductionOperator::Operator::Iand:
         case parser::ReductionOperator::Operator::Ior:

diff  --git a/flang/test/Semantics/reduce.cuf b/flang/test/Semantics/reduce.cuf
index 92d12ab149010d..0ee7fa097432c2 100644
--- a/flang/test/Semantics/reduce.cuf
+++ b/flang/test/Semantics/reduce.cuf
@@ -1,5 +1,5 @@
 ! RUN: %python %S/test_errors.py %s %flang_fc1
-subroutine s(n,m,a,l)
+subroutine s(n,m,a,l,c)
   integer, intent(in) :: n
   integer, device, intent(in) :: m(n)
   real, device, intent(in) :: a(n)
@@ -7,6 +7,8 @@ subroutine s(n,m,a,l)
   integer j, mr
   real ar
   logical lr
+  complex :: cr
+  complex, device, intent(in) :: c(n)
 !$cuf kernel do <<<*,*>>> reduce (+:mr,ar)
   do j=1,n; mr = mr + m(j); ar = ar + a(j); end do
 !ERROR: !$CUF KERNEL DO REDUCE operation is not acceptable for a variable with type LOGICAL(4)
@@ -69,4 +71,6 @@ subroutine s(n,m,a,l)
 !ERROR: !$CUF KERNEL DO REDUCE operation is not acceptable for a variable with type REAL(4)
 !$cuf kernel do <<<*,*>>> reduce (.or.:mr,ar)
   do j=1,n; end do
+!$cuf kernel do <<<*,*>>> reduce (+:cr) ! ok complex type
+  do j=1,n; cr = cr + c(j); end do
 end


        


More information about the flang-commits mailing list