From cc8c746f8df5274ac20486bd62b1183c0583ea6a Mon Sep 17 00:00:00 2001 From: Dominik Adamski Date: Wed, 17 Aug 2022 03:49:46 -0500 Subject: [PATCH] [NFC][Flang] Add simd collapse test case 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 --- flang/test/Lower/OpenMP/simd.f90 | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/flang/test/Lower/OpenMP/simd.f90 b/flang/test/Lower/OpenMP/simd.f90 index c1adf6e..1be8863 100644 --- a/flang/test/Lower/OpenMP/simd.f90 +++ b/flang/test/Lower/OpenMP/simd.f90 @@ -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 +! CHECK: %[[STEP_I:.*]] = arith.constant 1 : i32 +! CHECK: %[[LOWER_J:.*]] = arith.constant 1 : i32 +! CHECK: %[[UPPER_J:.*]] = fir.load %[[PARAM_ARG:.*]] : !fir.ref +! 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 -- 2.7.4