diff options
author | Guillaume Chatelet <gchatelet@google.com> | 2018-09-17 11:09:32 +0000 |
---|---|---|
committer | Guillaume Chatelet <gchatelet@google.com> | 2018-09-17 11:09:32 +0000 |
commit | cd488efe7e55aa3b4b36ab56ca12036b1869bfc4 (patch) | |
tree | 0de4572d6612e71a540c9ba6cbf1cde39173d6aa /llvm/unittests/tools | |
parent | 488fd4e6255d6216f2a678d9ac6a184f4e449695 (diff) | |
download | bcm5719-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.txt | 1 | ||||
-rw-r--r-- | llvm/unittests/tools/llvm-exegesis/RegisterValueTest.cpp | 71 |
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 |