[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