diff options
author | Francis Visoiu Mistrih <francisvm@yahoo.com> | 2019-07-03 22:40:07 +0000 |
---|---|---|
committer | Francis Visoiu Mistrih <francisvm@yahoo.com> | 2019-07-03 22:40:07 +0000 |
commit | e0308279cbdd18391c533d6501922429ff4ef839 (patch) | |
tree | c2386ec9a73920d3d86f09116473884c388e7b8d /llvm/unittests/Bitcode | |
parent | e0afcd8d266ed4fa9d3793d0032623f0aa12b80a (diff) | |
download | bcm5719-llvm-e0308279cbdd18391c533d6501922429ff4ef839.tar.gz bcm5719-llvm-e0308279cbdd18391c533d6501922429ff4ef839.zip |
[Bitcode] Move Bitstream to a separate library
This moves Bitcode/Bitstream*, Bitcode/BitCodes.h to Bitstream/.
This is needed to avoid a circular dependency when using the bitstream
code for parsing optimization remarks.
Since Bitcode uses Core for the IR part:
libLLVMRemarks -> Bitcode -> Core
and Core uses libLLVMRemarks to generate remarks (see
IR/RemarkStreamer.cpp):
Core -> libLLVMRemarks
we need to separate the Bitstream and Bitcode part.
For clang-doc, it seems that it doesn't need the whole bitcode layer, so
I updated the CMake to only use the bitstream part.
Differential Revision: https://reviews.llvm.org/D63899
llvm-svn: 365091
Diffstat (limited to 'llvm/unittests/Bitcode')
-rw-r--r-- | llvm/unittests/Bitcode/BitstreamReaderTest.cpp | 167 | ||||
-rw-r--r-- | llvm/unittests/Bitcode/BitstreamWriterTest.cpp | 58 | ||||
-rw-r--r-- | llvm/unittests/Bitcode/CMakeLists.txt | 2 |
3 files changed, 0 insertions, 227 deletions
diff --git a/llvm/unittests/Bitcode/BitstreamReaderTest.cpp b/llvm/unittests/Bitcode/BitstreamReaderTest.cpp deleted file mode 100644 index 89657d9e992..00000000000 --- a/llvm/unittests/Bitcode/BitstreamReaderTest.cpp +++ /dev/null @@ -1,167 +0,0 @@ -//===- BitstreamReaderTest.cpp - Tests for BitstreamReader ----------------===// -// -// 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/Bitcode/BitstreamReader.h" -#include "llvm/ADT/STLExtras.h" -#include "llvm/Bitcode/BitstreamWriter.h" -#include "gtest/gtest.h" - -using namespace llvm; - -namespace { - -TEST(BitstreamReaderTest, AtEndOfStream) { - uint8_t Bytes[4] = { - 0x00, 0x01, 0x02, 0x03 - }; - BitstreamCursor Cursor(Bytes); - - EXPECT_FALSE(Cursor.AtEndOfStream()); - Expected<SimpleBitstreamCursor::word_t> MaybeRead = Cursor.Read(8); - EXPECT_TRUE((bool)MaybeRead); - EXPECT_FALSE(Cursor.AtEndOfStream()); - MaybeRead = Cursor.Read(24); - EXPECT_TRUE((bool)MaybeRead); - EXPECT_TRUE(Cursor.AtEndOfStream()); - - EXPECT_FALSE(Cursor.JumpToBit(0)); - EXPECT_FALSE(Cursor.AtEndOfStream()); - - EXPECT_FALSE(Cursor.JumpToBit(32)); - EXPECT_TRUE(Cursor.AtEndOfStream()); -} - -TEST(BitstreamReaderTest, AtEndOfStreamJump) { - uint8_t Bytes[4] = { - 0x00, 0x01, 0x02, 0x03 - }; - BitstreamCursor Cursor(Bytes); - - EXPECT_FALSE(Cursor.JumpToBit(32)); - EXPECT_TRUE(Cursor.AtEndOfStream()); -} - -TEST(BitstreamReaderTest, AtEndOfStreamEmpty) { - BitstreamCursor Cursor(ArrayRef<uint8_t>{}); - - EXPECT_TRUE(Cursor.AtEndOfStream()); -} - -TEST(BitstreamReaderTest, getCurrentByteNo) { - uint8_t Bytes[] = {0x00, 0x01, 0x02, 0x03}; - SimpleBitstreamCursor Cursor(Bytes); - - for (unsigned I = 0, E = 32; I != E; ++I) { - EXPECT_EQ(I / 8, Cursor.getCurrentByteNo()); - Expected<SimpleBitstreamCursor::word_t> MaybeRead = Cursor.Read(1); - EXPECT_TRUE((bool)MaybeRead); - } - EXPECT_EQ(4u, Cursor.getCurrentByteNo()); -} - -TEST(BitstreamReaderTest, getPointerToByte) { - uint8_t Bytes[] = {0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07}; - SimpleBitstreamCursor Cursor(Bytes); - - for (unsigned I = 0, E = 8; I != E; ++I) { - EXPECT_EQ(Bytes + I, Cursor.getPointerToByte(I, 1)); - } -} - -TEST(BitstreamReaderTest, getPointerToBit) { - uint8_t Bytes[] = {0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07}; - SimpleBitstreamCursor Cursor(Bytes); - - for (unsigned I = 0, E = 8; I != E; ++I) { - EXPECT_EQ(Bytes + I, Cursor.getPointerToBit(I * 8, 1)); - } -} - -TEST(BitstreamReaderTest, readRecordWithBlobWhileStreaming) { - SmallVector<uint8_t, 1> BlobData; - for (unsigned I = 0, E = 1024; I != E; ++I) - BlobData.push_back(I); - - // Try a bunch of different sizes. - const unsigned Magic = 0x12345678; - const unsigned BlockID = bitc::FIRST_APPLICATION_BLOCKID; - const unsigned RecordID = 1; - for (unsigned I = 0, BlobSize = 0, E = BlobData.size(); BlobSize < E; - BlobSize += ++I) { - StringRef BlobIn((const char *)BlobData.begin(), BlobSize); - - // Write the bitcode. - SmallVector<char, 1> Buffer; - unsigned AbbrevID; - { - BitstreamWriter Stream(Buffer); - Stream.Emit(Magic, 32); - Stream.EnterSubblock(BlockID, 3); - - auto Abbrev = std::make_shared<BitCodeAbbrev>(); - Abbrev->Add(BitCodeAbbrevOp(RecordID)); - Abbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Blob)); - AbbrevID = Stream.EmitAbbrev(std::move(Abbrev)); - unsigned Record[] = {RecordID}; - Stream.EmitRecordWithBlob(AbbrevID, makeArrayRef(Record), BlobIn); - - Stream.ExitBlock(); - } - - // Stream the buffer into the reader. - BitstreamCursor Stream( - ArrayRef<uint8_t>((const uint8_t *)Buffer.begin(), Buffer.size())); - - // Header. Included in test so that we can run llvm-bcanalyzer to debug - // when there are problems. - Expected<SimpleBitstreamCursor::word_t> MaybeRead = Stream.Read(32); - ASSERT_TRUE((bool)MaybeRead); - ASSERT_EQ(Magic, MaybeRead.get()); - - // Block. - Expected<BitstreamEntry> MaybeEntry = - Stream.advance(BitstreamCursor::AF_DontAutoprocessAbbrevs); - ASSERT_TRUE((bool)MaybeEntry); - BitstreamEntry Entry = MaybeEntry.get(); - ASSERT_EQ(BitstreamEntry::SubBlock, Entry.Kind); - ASSERT_EQ(BlockID, Entry.ID); - ASSERT_FALSE(Stream.EnterSubBlock(BlockID)); - - // Abbreviation. - MaybeEntry = Stream.advance(); - ASSERT_TRUE((bool)MaybeEntry); - Entry = MaybeEntry.get(); - ASSERT_EQ(BitstreamEntry::Record, Entry.Kind); - ASSERT_EQ(AbbrevID, Entry.ID); - - // Record. - StringRef BlobOut; - SmallVector<uint64_t, 1> Record; - Expected<unsigned> MaybeRecord = - Stream.readRecord(Entry.ID, Record, &BlobOut); - ASSERT_TRUE((bool)MaybeRecord); - ASSERT_EQ(RecordID, MaybeRecord.get()); - EXPECT_TRUE(Record.empty()); - EXPECT_EQ(BlobIn, BlobOut); - } -} - -TEST(BitstreamReaderTest, shortRead) { - uint8_t Bytes[] = {8, 7, 6, 5, 4, 3, 2, 1}; - for (unsigned I = 1; I != 8; ++I) { - SimpleBitstreamCursor Cursor(ArrayRef<uint8_t>(Bytes, I)); - Expected<SimpleBitstreamCursor::word_t> MaybeRead = Cursor.Read(8); - ASSERT_TRUE((bool)MaybeRead); - EXPECT_EQ(8ull, MaybeRead.get()); - } -} - -static_assert(is_trivially_copyable<BitCodeAbbrevOp>::value, - "trivially copyable"); - -} // end anonymous namespace diff --git a/llvm/unittests/Bitcode/BitstreamWriterTest.cpp b/llvm/unittests/Bitcode/BitstreamWriterTest.cpp deleted file mode 100644 index ef4696c8c17..00000000000 --- a/llvm/unittests/Bitcode/BitstreamWriterTest.cpp +++ /dev/null @@ -1,58 +0,0 @@ -//===- BitstreamWriterTest.cpp - Tests for BitstreamWriter ----------------===// -// -// 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/Bitcode/BitstreamWriter.h" -#include "llvm/ADT/STLExtras.h" -#include "llvm/ADT/SmallString.h" -#include "gtest/gtest.h" - -using namespace llvm; - -namespace { - -TEST(BitstreamWriterTest, emitBlob) { - SmallString<64> Buffer; - BitstreamWriter W(Buffer); - W.emitBlob("str", /* ShouldEmitSize */ false); - EXPECT_EQ(StringRef("str\0", 4), Buffer); -} - -TEST(BitstreamWriterTest, emitBlobWithSize) { - SmallString<64> Buffer; - { - BitstreamWriter W(Buffer); - W.emitBlob("str"); - } - SmallString<64> Expected; - { - BitstreamWriter W(Expected); - W.EmitVBR(3, 6); - W.FlushToWord(); - W.Emit('s', 8); - W.Emit('t', 8); - W.Emit('r', 8); - W.Emit(0, 8); - } - EXPECT_EQ(StringRef(Expected), Buffer); -} - -TEST(BitstreamWriterTest, emitBlobEmpty) { - SmallString<64> Buffer; - BitstreamWriter W(Buffer); - W.emitBlob("", /* ShouldEmitSize */ false); - EXPECT_EQ(StringRef(""), Buffer); -} - -TEST(BitstreamWriterTest, emitBlob4ByteAligned) { - SmallString<64> Buffer; - BitstreamWriter W(Buffer); - W.emitBlob("str0", /* ShouldEmitSize */ false); - EXPECT_EQ(StringRef("str0"), Buffer); -} - -} // end namespace diff --git a/llvm/unittests/Bitcode/CMakeLists.txt b/llvm/unittests/Bitcode/CMakeLists.txt index 4d06f8008d3..7e9d1bc43fe 100644 --- a/llvm/unittests/Bitcode/CMakeLists.txt +++ b/llvm/unittests/Bitcode/CMakeLists.txt @@ -8,6 +8,4 @@ set(LLVM_LINK_COMPONENTS add_llvm_unittest(BitcodeTests BitReaderTest.cpp - BitstreamReaderTest.cpp - BitstreamWriterTest.cpp ) |