[flang-commits] [flang] [flang][OpenMP] Support `bind` clause for `teams loop` (PR #127021)

Kareem Ergawy via flang-commits flang-commits at lists.llvm.org
Thu Feb 13 00:00:24 PST 2025


https://github.com/ergawy updated https://github.com/llvm/llvm-project/pull/127021

>From b353b0ba591be950b9392b427a408e15c6c7b2c5 Mon Sep 17 00:00:00 2001
From: ergawy <kareem.ergawy at amd.com>
Date: Thu, 13 Feb 2025 01:55:44 -0600
Subject: [PATCH] [flang][OpenMP] Support `bind` clause for `teams loop`

Extends generic `loop` directive support by supporting the `bind`
clause. Since semantic checking does the heavy lifting of verifying the
proper usage of the clause modifier, we can simply enable code-gen for
`teams loop bind(...)` without the need to differentiate between the
values the the clause can accept.
---
 .../OpenMP/GenericLoopConversion.cpp          |  7 ++++---
 .../Lower/OpenMP/generic-loop-rewriting.f90   | 20 ++++++++++++++++++-
 2 files changed, 23 insertions(+), 4 deletions(-)

diff --git a/flang/lib/Optimizer/OpenMP/GenericLoopConversion.cpp b/flang/lib/Optimizer/OpenMP/GenericLoopConversion.cpp
index 3512a537d38c3..d2581e3ad0a0a 100644
--- a/flang/lib/Optimizer/OpenMP/GenericLoopConversion.cpp
+++ b/flang/lib/Optimizer/OpenMP/GenericLoopConversion.cpp
@@ -84,9 +84,10 @@ class GenericLoopConversionPattern
              << loopOp->getName() << " operation";
     };
 
-    // For standalone directives, `bind` is already supported. Other combined
-    // forms will be supported in a follow-up PR.
-    if (combinedInfo != GenericLoopCombinedInfo::Standalone &&
+    // For `loop` and `teams loop` directives, `bind` is supported.
+    // Additionally, for `teams loop`, semantic checking verifies that the
+    // `bind` clause modifier is `teams`, so no need to check this here again.
+    if (combinedInfo == GenericLoopCombinedInfo::ParallelLoop &&
         loopOp.getBindKind())
       return todo("bind");
 
diff --git a/flang/test/Lower/OpenMP/generic-loop-rewriting.f90 b/flang/test/Lower/OpenMP/generic-loop-rewriting.f90
index fa26425356dd9..0699c36c69519 100644
--- a/flang/test/Lower/OpenMP/generic-loop-rewriting.f90
+++ b/flang/test/Lower/OpenMP/generic-loop-rewriting.f90
@@ -1,5 +1,12 @@
-!RUN: %flang_fc1 -emit-hlfir -fopenmp %s -o - | FileCheck %s
+!RUN: split-file %s %t
 
+!RUN: %flang_fc1 -emit-hlfir -fopenmp -fopenmp-version=50 %t/no_bind_clause.f90 -o - \
+!RUN: | FileCheck %s
+
+!RUN: %flang_fc1 -emit-hlfir -fopenmp -fopenmp-version=50 %t/bind_clause_teams.f90 -o - \
+!RUN: | FileCheck %s
+
+!--- no_bind_clause.f90
 subroutine target_teams_loop
     implicit none
     integer :: x, i
@@ -10,6 +17,17 @@ subroutine target_teams_loop
     end do
 end subroutine target_teams_loop
 
+!--- bind_clause_teams.f90
+subroutine target_teams_loop
+    implicit none
+    integer :: x, i
+
+    !$omp target teams loop bind(teams)
+    do i = 0, 10
+      x = x + i
+    end do
+end subroutine target_teams_loop
+
 !CHECK-LABEL: func.func @_QPtarget_teams_loop
 !CHECK:         omp.target map_entries(
 !CHECK-SAME:      %{{.*}} -> %[[I_ARG:[^[:space:]]+]],



More information about the flang-commits mailing list