+++ /dev/null
-//===- OpenMPLoweringTest.cpp -- OpenMPLowering unit tests ----------------===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-#include "gtest/gtest.h"
-#include "mlir/Dialect/OpenMP/OpenMPDialect.h"
-#include "mlir/IR/Builders.h"
-#include "mlir/InitAllDialects.h"
-#include "flang/Parser/parse-tree.h"
-#include "llvm/Frontend/OpenMP/OMPConstants.h"
-
-class OpenMPLoweringTest : public testing::Test {
-protected:
- void SetUp() override {
- ctx.loadDialect<mlir::omp::OpenMPDialect>();
- mlir::registerAllDialects(ctx.getDialectRegistry());
- mlirOpBuilder.reset(new mlir::OpBuilder(&ctx));
- }
-
- void TearDown() override { mlirOpBuilder.reset(); }
-
- mlir::MLIRContext ctx;
- std::unique_ptr<mlir::OpBuilder> mlirOpBuilder;
-};
-
-TEST_F(OpenMPLoweringTest, Barrier) {
- // Construct a dummy parse tree node for `!OMP barrier`.
- struct Fortran::parser::OmpSimpleStandaloneDirective barrierDirective(
- llvm::omp::Directive::OMPD_barrier);
-
- // Check and lower the `!OMP barrier` node to `BarrierOp` operation of
- // OpenMPDialect.
- EXPECT_EQ(barrierDirective.v, llvm::omp::Directive::OMPD_barrier);
- auto barrierOp = mlirOpBuilder->create<mlir::omp::BarrierOp>(
- mlirOpBuilder->getUnknownLoc());
-
- EXPECT_EQ(barrierOp.getOperationName(), "omp.barrier");
- EXPECT_EQ(succeeded(barrierOp.verify()), true);
-}
-
-TEST_F(OpenMPLoweringTest, TaskWait) {
- // Construct a dummy parse tree node for `!OMP taskwait`.
- struct Fortran::parser::OmpSimpleStandaloneDirective taskWaitDirective(
- llvm::omp::Directive::OMPD_taskwait);
-
- // Check and lower the `!OMP taskwait` node to `TaskwaitOp` operation of
- // OpenMPDialect.
- EXPECT_EQ(taskWaitDirective.v, llvm::omp::Directive::OMPD_taskwait);
- auto taskWaitOp = mlirOpBuilder->create<mlir::omp::TaskwaitOp>(
- mlirOpBuilder->getUnknownLoc());
-
- EXPECT_EQ(taskWaitOp.getOperationName(), "omp.taskwait");
- EXPECT_EQ(succeeded(taskWaitOp.verify()), true);
-}
-
-TEST_F(OpenMPLoweringTest, TaskYield) {
- // Construct a dummy parse tree node for `!OMP taskyield`.
- struct Fortran::parser::OmpSimpleStandaloneDirective taskYieldDirective(
- llvm::omp::Directive::OMPD_taskyield);
-
- // Check and lower the `!OMP taskyield` node to `TaskYieldOp` operation of
- // OpenMPDialect.
- EXPECT_EQ(taskYieldDirective.v, llvm::omp::Directive::OMPD_taskyield);
- auto taskYieldOp = mlirOpBuilder->create<mlir::omp::TaskyieldOp>(
- mlirOpBuilder->getUnknownLoc());
-
- EXPECT_EQ(taskYieldOp.getOperationName(), "omp.taskyield");
- EXPECT_EQ(succeeded(taskYieldOp.verify()), true);
-}
-
-TEST_F(OpenMPLoweringTest, EmptyParallel) {
- // Construct a dummy parse tree node for `!OMP parallel`.
- struct Fortran::parser::OmpSimpleStandaloneDirective parallelDirective(
- llvm::omp::Directive::OMPD_parallel);
-
- // Check and lower the `!OMP parallel` node to `ParallelOp` operation of
- // OpenMPDialect.
- EXPECT_EQ(parallelDirective.v, llvm::omp::Directive::OMPD_parallel);
- auto insertPt = mlirOpBuilder->saveInsertionPoint();
- llvm::ArrayRef<mlir::Type> argTy;
- mlir::ValueRange range;
- llvm::SmallVector<int32_t, 6> operandSegmentSizes(6 /*Size=*/, 0 /*Value=*/);
- // create and insert the operation.
- auto parallelOp = mlirOpBuilder->create<mlir::omp::ParallelOp>(
- mlirOpBuilder->getUnknownLoc(), argTy, range);
- parallelOp.setAttr(mlir::omp::ParallelOp::getOperandSegmentSizeAttr(),
- mlirOpBuilder->getI32VectorAttr(operandSegmentSizes));
- parallelOp.getRegion().push_back(new mlir::Block{});
- auto &block = parallelOp.getRegion().back();
- mlirOpBuilder->setInsertionPointToStart(&block);
- // ensure the block is well-formed.
- mlirOpBuilder->create<mlir::omp::TerminatorOp>(
- mlirOpBuilder->getUnknownLoc());
- mlirOpBuilder->restoreInsertionPoint(insertPt);
- EXPECT_EQ(succeeded(parallelOp.verify()), true);
-}
-
-// main() from gtest_main