blob: 0942b9deab989e356717ade4eeb630e44ca5a864 [file] [log] [blame]
//===- 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 "flang/Parser/parse-tree.h"
#include "llvm/Frontend/OpenMP/OMPConstants.h"
class OpenMPLoweringTest : public testing::Test {
protected:
void SetUp() override {
mlir::registerDialect<mlir::omp::OpenMPDialect>();
mlir::registerAllDialects(&ctx);
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);
}
// main() from gtest_main