[NFC][Flang] Add simd collapse test case
authorDominik Adamski <dominik.adamski@amd.com>
Wed, 17 Aug 2022 08:49:46 +0000 (03:49 -0500)
committerDominik Adamski <dominik.adamski@amd.com>
Wed, 17 Aug 2022 12:42:22 +0000 (07:42 -0500)
Flang supports lowering collapse clause to MLIR for worksharing loops
and simd loops. Simd collapse clause is represented in MLIR code as a
simd-loop having a list of indices, bounds and steps where the size of the list
is equal to the collapse value.

Support for simd collapse clause was added by several patches:
https://reviews.llvm.org/D118065 -> basic support for simd-loop in MLIR.
                                    Loop collapsing is done in the same way as
                                    for worksharing loops:
                                    https://reviews.llvm.org/D105706
https://reviews.llvm.org/D125282 -> support for lowering simd clause from
                                    Fortran into MLIR
https://reviews.llvm.org/D125302 -> lowering collapse clause from Fortran to
                                    MLIR. Lowering collapse clause is done
                                    before simd-specific function is called.
https://reviews.llvm.org/D128338 -> modified the MLIR representation of
                                    collapse clause. Removed collapse keyword
                                    in OpenMP MLIR dialect. Use loop list to
                                    represent collapse clause. This loop list
                                    is created by changes from patch:
                                    https://reviews.llvm.org/D125302 and it is
                                    passed to function responsible for lowering
                                    of simd directive which was implemented in
                                    patch: https://reviews.llvm.org/D125282

Reviewed By: kiranchandramohan

Differential Revision: https://reviews.llvm.org/D132023

Signed-off-by: Dominik Adamski <dominik.adamski@amd.com>
flang/test/Lower/OpenMP/simd.f90

index c1adf6e..1be8863 100644 (file)
@@ -89,3 +89,26 @@ integer, parameter :: simdlen = 2;
   end do
   !$OMP END SIMD
 end subroutine
+
+!CHECK-LABEL: func @_QPsimdloop_with_collapse_clause
+subroutine simdloop_with_collapse_clause(n)
+integer :: i, j, n
+integer :: A(n,n)
+! CHECK: %[[LOWER_I:.*]] = arith.constant 1 : i32
+! CHECK: %[[UPPER_I:.*]] = fir.load %[[PARAM_ARG:.*]] : !fir.ref<i32>
+! CHECK: %[[STEP_I:.*]] = arith.constant 1 : i32
+! CHECK: %[[LOWER_J:.*]] = arith.constant 1 : i32
+! CHECK: %[[UPPER_J:.*]] = fir.load %[[PARAM_ARG:.*]] : !fir.ref<i32>
+! CHECK: %[[STEP_J:.*]] = arith.constant 1 : i32
+! CHECK: omp.simdloop  for (%[[ARG_0:.*]], %[[ARG_1:.*]]) : i32 = (
+! CHECK-SAME:               %[[LOWER_I]], %[[LOWER_J]]) to (
+! CHECK-SAME:               %[[UPPER_I]], %[[UPPER_J]]) inclusive step (
+! CHECK-SAME:               %[[STEP_I]], %[[STEP_J]]) {
+  !$OMP SIMD COLLAPSE(2)
+  do i = 1, n
+    do j = 1, n
+       A(i,j) = i + j
+    end do
+  end do
+  !$OMP END SIMD
+end subroutine