[flang-commits] [flang] 47a8a6d - [flang][acc] Ignore compiler directives when checking tight-nesting (#186222)

via flang-commits flang-commits at lists.llvm.org
Thu Mar 12 13:53:49 PDT 2026


Author: Razvan Lupusoru
Date: 2026-03-12T13:53:42-07:00
New Revision: 47a8a6d5cbfffcc1a1bbc7f9f0b357dab6cbc035

URL: https://github.com/llvm/llvm-project/commit/47a8a6d5cbfffcc1a1bbc7f9f0b357dab6cbc035
DIFF: https://github.com/llvm/llvm-project/commit/47a8a6d5cbfffcc1a1bbc7f9f0b357dab6cbc035.diff

LOG: [flang][acc] Ignore compiler directives when checking tight-nesting (#186222)

Added: 
    

Modified: 
    flang/lib/Semantics/canonicalize-acc.cpp
    flang/test/Semantics/OpenACC/acc-canonicalization-validity.f90

Removed: 
    


################################################################################
diff  --git a/flang/lib/Semantics/canonicalize-acc.cpp b/flang/lib/Semantics/canonicalize-acc.cpp
index 11be484f66621..9d2d2ce3a82fb 100644
--- a/flang/lib/Semantics/canonicalize-acc.cpp
+++ b/flang/lib/Semantics/canonicalize-acc.cpp
@@ -70,7 +70,12 @@ class CanonicalizationOfAcc {
         for (const parser::DoConstruct *loop{&outer}; loop && tileArgNb > 0;
              --tileArgNb) {
           const auto &block{std::get<parser::Block>(loop->t)};
-          const auto it{block.begin()};
+          auto it{block.begin()};
+          // Skip directives when checking tight nesting.
+          while (it != block.end() &&
+              parser::Unwrap<parser::CompilerDirective>(*it)) {
+            ++it;
+          }
           loop = it != block.end() ? parser::Unwrap<parser::DoConstruct>(*it)
                                    : nullptr;
         }

diff  --git a/flang/test/Semantics/OpenACC/acc-canonicalization-validity.f90 b/flang/test/Semantics/OpenACC/acc-canonicalization-validity.f90
index c0eab1f3f9181..a92be44c60b74 100644
--- a/flang/test/Semantics/OpenACC/acc-canonicalization-validity.f90
+++ b/flang/test/Semantics/OpenACC/acc-canonicalization-validity.f90
@@ -109,4 +109,17 @@ program openacc_clause_validity
   end do
   !$acc end parallel
 
+  ! TILE with compiler directives between the ACC loop and the nested DO loops
+  ! (directives should be ignored when checking tightly-nested loops).
+  !$acc parallel
+  !$acc loop gang vector tile(128, 2)
+  !dir$ ivdep
+  do j = 1, N
+    !dir$ ivdep
+    do i = 1, N
+      aa(i, j) = aa(i, j) + 3.14
+    end do
+  end do
+  !$acc end parallel
+
 end program openacc_clause_validity


        


More information about the flang-commits mailing list