[llvm] 8fb4417 - [LLVMFronted][tests] Add basic OpenMP parsing tests.

Michael Kruse via llvm-commits llvm-commits at lists.llvm.org
Tue Nov 17 13:45:32 PST 2020


Author: Michael Kruse
Date: 2020-11-17T15:45:19-06:00
New Revision: 8fb4417d82bc9d7285734cd63cdd06f1d6926be6

URL: https://github.com/llvm/llvm-project/commit/8fb4417d82bc9d7285734cd63cdd06f1d6926be6
DIFF: https://github.com/llvm/llvm-project/commit/8fb4417d82bc9d7285734cd63cdd06f1d6926be6.diff

LOG: [LLVMFronted][tests] Add basic OpenMP parsing tests.

As noticed in D91470, some of the functions of LLVMFrontend, are not tested within the library itself (but indirectly by its users clang and flang). In particular, the file OMP.cpp which is generated by tablegen was not tested at all.

Add tests for the parsing helpers in OMP.cpp. These are not meant to be exhaustive tests, just to ensure that we have some basic tests for all API functions.

Reviewed By: clementval

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

Added: 
    llvm/unittests/Frontend/OpenMPParsingTest.cpp

Modified: 
    llvm/unittests/Frontend/CMakeLists.txt

Removed: 
    


################################################################################
diff  --git a/llvm/unittests/Frontend/CMakeLists.txt b/llvm/unittests/Frontend/CMakeLists.txt
index d10d08ef190a..e7002344a36d 100644
--- a/llvm/unittests/Frontend/CMakeLists.txt
+++ b/llvm/unittests/Frontend/CMakeLists.txt
@@ -11,6 +11,7 @@ set(LLVM_LINK_COMPONENTS
 add_llvm_unittest(LLVMFrontendTests
   OpenMPContextTest.cpp
   OpenMPIRBuilderTest.cpp
+  OpenMPParsingTest.cpp
 
   DEPENDS
   omp_gen

diff  --git a/llvm/unittests/Frontend/OpenMPParsingTest.cpp b/llvm/unittests/Frontend/OpenMPParsingTest.cpp
new file mode 100644
index 000000000000..ea06b34658c5
--- /dev/null
+++ b/llvm/unittests/Frontend/OpenMPParsingTest.cpp
@@ -0,0 +1,84 @@
+//===- llvm/unittest/IR/OpenMPIRParsingTest.cpp ---------------------------===//
+//
+// 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 "llvm/Frontend/OpenMP/OMPConstants.h"
+#include "gtest/gtest.h"
+
+using namespace llvm;
+using namespace llvm::omp;
+
+namespace {
+
+TEST(OpenMPParsingTest, OpenMPDirectiveKind) {
+  EXPECT_EQ(getOpenMPDirectiveKind("foobar"), OMPD_unknown);
+
+  EXPECT_EQ(getOpenMPDirectiveKind("for"), OMPD_for);
+  EXPECT_EQ(getOpenMPDirectiveKind("simd"), OMPD_simd);
+  EXPECT_EQ(getOpenMPDirectiveKind("for simd"), OMPD_for_simd);
+}
+
+TEST(OpenMPParsingTest, getOpenMPDirectiveName) {
+  EXPECT_EQ(getOpenMPDirectiveName(OMPD_unknown), "unknown");
+
+  EXPECT_EQ(getOpenMPDirectiveName(OMPD_for), "for");
+  EXPECT_EQ(getOpenMPDirectiveName(OMPD_simd), "simd");
+  EXPECT_EQ(getOpenMPDirectiveName(OMPD_for_simd), "for simd");
+}
+
+TEST(OpenMPParsingTest, getOpenMPClauseKind) {
+  EXPECT_EQ(getOpenMPClauseKind("foobar"), OMPC_unknown);
+
+  EXPECT_EQ(getOpenMPClauseKind("schedule"), OMPC_schedule);
+  EXPECT_EQ(getOpenMPClauseKind("if"), OMPC_if);
+}
+
+TEST(OpenMPParsingTest, getOpenMPClauseName) {
+  EXPECT_EQ(getOpenMPClauseName(OMPC_unknown), "unknown");
+
+  EXPECT_EQ(getOpenMPClauseName(OMPC_schedule), "schedule");
+  EXPECT_EQ(getOpenMPClauseName(OMPC_if), "if");
+}
+
+TEST(OpenMPParsingTest, isAllowedClauseForDirective) {
+  EXPECT_TRUE(isAllowedClauseForDirective(OMPD_for, OMPC_schedule, 30));
+  EXPECT_FALSE(isAllowedClauseForDirective(OMPD_for, OMPC_num_teams, 30));
+
+  EXPECT_FALSE(isAllowedClauseForDirective(OMPD_for, OMPC_order, 30));
+  EXPECT_FALSE(isAllowedClauseForDirective(OMPD_for, OMPC_order, 45));
+  EXPECT_TRUE(isAllowedClauseForDirective(OMPD_for, OMPC_order, 50));
+  EXPECT_TRUE(isAllowedClauseForDirective(OMPD_for, OMPC_order, 51));
+}
+
+TEST(OpenMPParsingTest, getOrderKind) {
+  EXPECT_EQ(getOrderKind("foobar"), OMP_ORDER_concurrent);
+  EXPECT_EQ(getOrderKind("default"), OMP_ORDER_concurrent);
+}
+
+TEST(OpenMPParsingTest, getProcBindKind) {
+  EXPECT_EQ(getProcBindKind("foobar"), OMP_PROC_BIND_unknown);
+
+  EXPECT_EQ(getProcBindKind("master"), OMP_PROC_BIND_master);
+  EXPECT_EQ(getProcBindKind("close"), OMP_PROC_BIND_close);
+  EXPECT_EQ(getProcBindKind("spread"), OMP_PROC_BIND_spread);
+  EXPECT_EQ(getProcBindKind("default"), OMP_PROC_BIND_default);
+  EXPECT_EQ(getProcBindKind("unknown"), OMP_PROC_BIND_unknown);
+}
+
+TEST(OpenMPParsingTest, getScheduleKind) {
+  EXPECT_EQ(getScheduleKind("foobar"), OMP_SCHEDULE_Default);
+
+  // FIXME: Why are these not lower case?
+  EXPECT_EQ(getScheduleKind("Static"), OMP_SCHEDULE_Static);
+  EXPECT_EQ(getScheduleKind("Dynamic"), OMP_SCHEDULE_Dynamic);
+  EXPECT_EQ(getScheduleKind("Guided"), OMP_SCHEDULE_Guided);
+  EXPECT_EQ(getScheduleKind("Auto"), OMP_SCHEDULE_Auto);
+  EXPECT_EQ(getScheduleKind("Runtime"), OMP_SCHEDULE_Runtime);
+  EXPECT_EQ(getScheduleKind("Default"), OMP_SCHEDULE_Default);
+}
+
+} // namespace


        


More information about the llvm-commits mailing list