[flang-commits] [flang] 7838dbe - [Flang][OpenMP] Add Lowering support for Collapse with Taskloop (#166791)
via flang-commits
flang-commits at lists.llvm.org
Wed Nov 12 05:15:39 PST 2025
Author: Jack Styles
Date: 2025-11-12T13:15:34Z
New Revision: 7838dbee3a307cd8bd129ee8dbb998209133bffe
URL: https://github.com/llvm/llvm-project/commit/7838dbee3a307cd8bd129ee8dbb998209133bffe
DIFF: https://github.com/llvm/llvm-project/commit/7838dbee3a307cd8bd129ee8dbb998209133bffe.diff
LOG: [Flang][OpenMP] Add Lowering support for Collapse with Taskloop (#166791)
Support for lowering collapse already exists within
`genLoopNestClauses`, which is called when lowering taskloop. However,
the TODO message still included the Collapse clause, so it was not
activated. By removing this, it enables lowering of the Collapse clause
in taskloop.
Added:
flang/test/Lower/OpenMP/taskloop-collapse.f90
flang/test/Semantics/OpenMP/taskloop04.f90
Modified:
flang/lib/Lower/OpenMP/OpenMP.cpp
Removed:
flang/test/Lower/OpenMP/Todo/taskloop-collapse.f90
################################################################################
diff --git a/flang/lib/Lower/OpenMP/OpenMP.cpp b/flang/lib/Lower/OpenMP/OpenMP.cpp
index 6e9f0716a02fe..4048aeea37b92 100644
--- a/flang/lib/Lower/OpenMP/OpenMP.cpp
+++ b/flang/lib/Lower/OpenMP/OpenMP.cpp
@@ -1781,8 +1781,6 @@ static void genTaskloopClauses(
cp.processPriority(stmtCtx, clauseOps);
cp.processReduction(loc, clauseOps, reductionSyms);
cp.processUntied(clauseOps);
-
- cp.processTODO<clause::Collapse>(loc, llvm::omp::Directive::OMPD_taskloop);
}
static void genTaskwaitClauses(lower::AbstractConverter &converter,
diff --git a/flang/test/Lower/OpenMP/Todo/taskloop-collapse.f90 b/flang/test/Lower/OpenMP/Todo/taskloop-collapse.f90
deleted file mode 100644
index cd54f5eeba6c4..0000000000000
--- a/flang/test/Lower/OpenMP/Todo/taskloop-collapse.f90
+++ /dev/null
@@ -1,15 +0,0 @@
-! RUN: %not_todo_cmd bbc -emit-fir -fopenmp -o - %s 2>&1 | FileCheck %s
-! RUN: %not_todo_cmd %flang_fc1 -emit-fir -fopenmp -o - %s 2>&1 | FileCheck %s
-
-! CHECK: not yet implemented: Unhandled clause COLLAPSE in TASKLOOP construct
-subroutine omp_taskloop_collapse()
- integer x
- x = 0
- !$omp taskloop collapse(2)
- do i = 1, 100
- do j = 1, 100
- x = x + 1
- end do
- end do
- !$omp end taskloop
-end subroutine omp_taskloop_collapse
diff --git a/flang/test/Lower/OpenMP/taskloop-collapse.f90 b/flang/test/Lower/OpenMP/taskloop-collapse.f90
new file mode 100644
index 0000000000000..48243640d07b9
--- /dev/null
+++ b/flang/test/Lower/OpenMP/taskloop-collapse.f90
@@ -0,0 +1,34 @@
+! Test the collapse clause when being used with the taskloop construct
+! RUN: bbc -emit-hlfir -fopenmp -fopenmp-version=45 %s -o - 2>&1 | FileCheck %s
+! RUN: %flang_fc1 -emit-hlfir -fopenmp -fopenmp-version=45 %s -o - 2>&1 | FileCheck %s
+
+! CHECK-LABEL: omp.private
+! CHECK-SAME: {type = private} @[[J_PRIVATE:.*]] : i32
+! CHECK-LABEL: omp.private
+! CHECK-SAME: {type = private} @[[I_PRIVATE:.*]] : i32
+! CHECK-LABEL: omp.private
+! CHECK-SAME: {type = firstprivate} @[[SUM_FIRSTPRIVATE:.*]] : i32 copy
+
+! CHECK-LABEL: func.func @_QPtest()
+! CHECK: %[[ALLOCA_I:.*]] = fir.alloca i32 {bindc_name = "i", uniq_name = "_QFtestEi"}
+! CHECK: %[[DECLARE_I:.*]]:2 = hlfir.declare %1 {uniq_name = "_QFtestEi"} : (!fir.ref<i32>) -> (!fir.ref<i32>, !fir.ref<i32>)
+! CHECK: %[[ALLOCA_J:.*]] = fir.alloca i32 {bindc_name = "j", uniq_name = "_QFtestEj"}
+! CHECK: %[[DECLARE_J:.*]]:2 = hlfir.declare %3 {uniq_name = "_QFtestEj"} : (!fir.ref<i32>) -> (!fir.ref<i32>, !fir.ref<i32>)
+! CHECK: %[[ALLOCA_SUM:.*]] = fir.alloca i32 {bindc_name = "sum", uniq_name = "_QFtestEsum"}
+! CHECK: %[[DECLARE_SUM:.*]]:2 = hlfir.declare %5 {uniq_name = "_QFtestEsum"} : (!fir.ref<i32>) -> (!fir.ref<i32>, !fir.ref<i32>)
+
+subroutine test()
+ integer :: i, j, sum
+
+ !$omp taskloop collapse(2)
+ ! CHECK-LABEL: omp.taskloop
+ ! CHECK-SAME: private(@_QFtestEsum_firstprivate_i32 %[[DECLARE_SUM]]#0 -> %arg0, @_QFtestEi_private_i32 %[[DECLARE_I]]#0 -> %arg1, @_QFtestEj_private_i32 %[[DECLARE_J]]#0 -> %arg2 : !fir.ref<i32>, !fir.ref<i32>, !fir.ref<i32>)
+ ! CHECK-LABEL: omp.loop_nest
+ ! CHECK-SAME: (%arg3, %arg4) : i32 = (%c1_i32, %c1_i32_1) to (%c10_i32, %c5_i32) inclusive step (%c1_i32_0, %c1_i32_2) collapse(2)
+ do i = 1, 10
+ do j = 1, 5
+ sum = sum + i + j
+ end do
+ end do
+ !$omp end taskloop
+end subroutine
diff --git a/flang/test/Semantics/OpenMP/taskloop04.f90 b/flang/test/Semantics/OpenMP/taskloop04.f90
new file mode 100644
index 0000000000000..4ffcf84f708e9
--- /dev/null
+++ b/flang/test/Semantics/OpenMP/taskloop04.f90
@@ -0,0 +1,15 @@
+! When lowering Taskloop, it is possible for the TileSizes clause to be lowered, but this is not a supported clause.
+! We should make sure that any use of Tilesizes with Taskloop is correctly rejected by the Semantics.
+! RUN: %python %S/../test_errors.py %s %flang -fopenmp
+
+subroutine test
+ integer :: i, sum
+
+ !ERROR: TILE cannot follow TASKLOOP
+ !ERROR: SIZES clause is not allowed on the TASKLOOP directive
+ !$omp taskloop tile sizes(2)
+ do i=1,10
+ sum = sum + i
+ end do
+ !$omp end taskloop
+end subroutine
More information about the flang-commits
mailing list