summaryrefslogtreecommitdiffstats
path: root/llvm/unittests/tools
diff options
context:
space:
mode:
authorGuillaume Chatelet <gchatelet@google.com>2018-09-17 11:09:32 +0000
committerGuillaume Chatelet <gchatelet@google.com>2018-09-17 11:09:32 +0000
commitcd488efe7e55aa3b4b36ab56ca12036b1869bfc4 (patch)
tree0de4572d6612e71a540c9ba6cbf1cde39173d6aa /llvm/unittests/tools
parent488fd4e6255d6216f2a678d9ac6a184f4e449695 (diff)
downloadbcm5719-llvm-cd488efe7e55aa3b4b36ab56ca12036b1869bfc4.tar.gz
bcm5719-llvm-cd488efe7e55aa3b4b36ab56ca12036b1869bfc4.zip
[llvm-exegesis] Add predefined floating point values so we can test impact of special values on latency.
Summary: This will be useful to generate many configurations and test instruction regimes (NaN, Inf, subnormal, normal). Reviewers: courbet Subscribers: mgorny, tschuett, llvm-commits Differential Revision: https://reviews.llvm.org/D51858 llvm-svn: 342369
Diffstat (limited to 'llvm/unittests/tools')
-rw-r--r--llvm/unittests/tools/llvm-exegesis/CMakeLists.txt1
-rw-r--r--llvm/unittests/tools/llvm-exegesis/RegisterValueTest.cpp71
2 files changed, 72 insertions, 0 deletions
diff --git a/llvm/unittests/tools/llvm-exegesis/CMakeLists.txt b/llvm/unittests/tools/llvm-exegesis/CMakeLists.txt
index 387f8a58ebd..21459a46ddb 100644
--- a/llvm/unittests/tools/llvm-exegesis/CMakeLists.txt
+++ b/llvm/unittests/tools/llvm-exegesis/CMakeLists.txt
@@ -15,6 +15,7 @@ add_llvm_unittest(LLVMExegesisTests
BenchmarkRunnerTest.cpp
ClusteringTest.cpp
PerfHelperTest.cpp
+ RegisterValueTest.cpp
)
target_link_libraries(LLVMExegesisTests PRIVATE LLVMExegesis)
diff --git a/llvm/unittests/tools/llvm-exegesis/RegisterValueTest.cpp b/llvm/unittests/tools/llvm-exegesis/RegisterValueTest.cpp
new file mode 100644
index 00000000000..4ade990382d
--- /dev/null
+++ b/llvm/unittests/tools/llvm-exegesis/RegisterValueTest.cpp
@@ -0,0 +1,71 @@
+//===-- RegisterValueTest.cpp -----------------------------------*- C++ -*-===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+#include "RegisterValue.h"
+#include "gmock/gmock.h"
+#include "gtest/gtest.h"
+
+namespace exegesis {
+
+namespace {
+
+#define CHECK(EXPECTED, ACTUAL) \
+ EXPECT_EQ(llvm::APInt(SizeInBits, EXPECTED, 16), \
+ bitcastFloatValue(Semantic, PredefinedValues::ACTUAL))
+
+TEST(RegisterValueTest, Half) {
+ const size_t SizeInBits = 16;
+ const auto &Semantic = llvm::APFloatBase::IEEEhalf();
+ CHECK("0000", POS_ZERO);
+ CHECK("8000", NEG_ZERO);
+ CHECK("3C00", ONE);
+ CHECK("4000", TWO);
+ CHECK("7C00", INF);
+ CHECK("7E00", QNAN);
+ CHECK("7BFF", LARGEST);
+ CHECK("0400", SMALLEST_NORM);
+ CHECK("0001", SMALLEST);
+ CHECK("0001", ULP);
+ CHECK("3C01", ONE_PLUS_ULP);
+}
+
+TEST(RegisterValueTest, Single) {
+ const size_t SizeInBits = 32;
+ const auto &Semantic = llvm::APFloatBase::IEEEsingle();
+ CHECK("00000000", POS_ZERO);
+ CHECK("80000000", NEG_ZERO);
+ CHECK("3F800000", ONE);
+ CHECK("40000000", TWO);
+ CHECK("7F800000", INF);
+ CHECK("7FC00000", QNAN);
+ CHECK("7F7FFFFF", LARGEST);
+ CHECK("00800000", SMALLEST_NORM);
+ CHECK("00000001", SMALLEST);
+ CHECK("00000001", ULP);
+ CHECK("3F800001", ONE_PLUS_ULP);
+}
+
+TEST(RegisterValueTest, Double) {
+ const size_t SizeInBits = 64;
+ const auto &Semantic = llvm::APFloatBase::IEEEdouble();
+ CHECK("0000000000000000", POS_ZERO);
+ CHECK("8000000000000000", NEG_ZERO);
+ CHECK("3FF0000000000000", ONE);
+ CHECK("4000000000000000", TWO);
+ CHECK("7FF0000000000000", INF);
+ CHECK("7FF8000000000000", QNAN);
+ CHECK("7FEFFFFFFFFFFFFF", LARGEST);
+ CHECK("0010000000000000", SMALLEST_NORM);
+ CHECK("0000000000000001", SMALLEST);
+ CHECK("0000000000000001", ULP);
+ CHECK("3FF0000000000001", ONE_PLUS_ULP);
+}
+
+} // namespace
+} // namespace exegesis
OpenPOWER on IntegriCloud