[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