xref: /llvm-project/llvm/unittests/Remarks/BitstreamRemarksSerializerTest.cpp (revision 49e75ebd854dee1fcf5729c264f4cfadf76e952d)
184e80979SFrancis Visoiu Mistrih //===- unittest/Support/BitstreamRemarksSerializerTest.cpp ----------------===//
284e80979SFrancis Visoiu Mistrih //
384e80979SFrancis Visoiu Mistrih // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
484e80979SFrancis Visoiu Mistrih // See https://llvm.org/LICENSE.txt for license information.
584e80979SFrancis Visoiu Mistrih // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
684e80979SFrancis Visoiu Mistrih //
784e80979SFrancis Visoiu Mistrih //===----------------------------------------------------------------------===//
884e80979SFrancis Visoiu Mistrih 
984e80979SFrancis Visoiu Mistrih #include "llvm/Bitcode/BitcodeAnalyzer.h"
1084e80979SFrancis Visoiu Mistrih #include "llvm/Remarks/BitstreamRemarkSerializer.h"
11ed98c1b3Sserge-sans-paille #include "llvm/Remarks/Remark.h"
1284e80979SFrancis Visoiu Mistrih #include "llvm/Support/raw_ostream.h"
1384e80979SFrancis Visoiu Mistrih #include "gtest/gtest.h"
14*49e75ebdSKrzysztof Parzyszek #include <optional>
1584e80979SFrancis Visoiu Mistrih #include <string>
1684e80979SFrancis Visoiu Mistrih 
1784e80979SFrancis Visoiu Mistrih // We need to supprt Windows paths as well. In order to have paths with the same
1884e80979SFrancis Visoiu Mistrih // length, use a different path according to the platform.
1984e80979SFrancis Visoiu Mistrih #ifdef _WIN32
2084e80979SFrancis Visoiu Mistrih #define EXTERNALFILETESTPATH "C:/externalfi"
2184e80979SFrancis Visoiu Mistrih #else
2284e80979SFrancis Visoiu Mistrih #define EXTERNALFILETESTPATH "/externalfile"
2384e80979SFrancis Visoiu Mistrih #endif
2484e80979SFrancis Visoiu Mistrih 
2584e80979SFrancis Visoiu Mistrih using namespace llvm;
2684e80979SFrancis Visoiu Mistrih 
checkAnalyze(StringRef Input,StringRef Expected)2784e80979SFrancis Visoiu Mistrih static void checkAnalyze(StringRef Input, StringRef Expected) {
2884e80979SFrancis Visoiu Mistrih   std::string OutputBuf;
2984e80979SFrancis Visoiu Mistrih   raw_string_ostream OutputOS(OutputBuf);
3084e80979SFrancis Visoiu Mistrih   BCDumpOptions O(OutputOS);
3184e80979SFrancis Visoiu Mistrih   O.ShowBinaryBlobs = true;
3284e80979SFrancis Visoiu Mistrih   BitcodeAnalyzer BA(Input);
3384e80979SFrancis Visoiu Mistrih   EXPECT_FALSE(BA.analyze(O)); // Expect no errors.
3484e80979SFrancis Visoiu Mistrih   EXPECT_EQ(OutputOS.str(), Expected);
3584e80979SFrancis Visoiu Mistrih }
3684e80979SFrancis Visoiu Mistrih 
check(remarks::SerializerMode Mode,const remarks::Remark & R,StringRef ExpectedR,std::optional<StringRef> ExpectedMeta,std::optional<remarks::StringTable> StrTab)3784e80979SFrancis Visoiu Mistrih static void check(remarks::SerializerMode Mode, const remarks::Remark &R,
38*49e75ebdSKrzysztof Parzyszek                   StringRef ExpectedR, std::optional<StringRef> ExpectedMeta,
39*49e75ebdSKrzysztof Parzyszek                   std::optional<remarks::StringTable> StrTab) {
4084e80979SFrancis Visoiu Mistrih   // Emit the remark.
4184e80979SFrancis Visoiu Mistrih   std::string InputBuf;
4284e80979SFrancis Visoiu Mistrih   raw_string_ostream InputOS(InputBuf);
4384e80979SFrancis Visoiu Mistrih   Expected<std::unique_ptr<remarks::RemarkSerializer>> MaybeSerializer = [&] {
4484e80979SFrancis Visoiu Mistrih     if (StrTab)
4584e80979SFrancis Visoiu Mistrih       return createRemarkSerializer(remarks::Format::Bitstream, Mode, InputOS,
4684e80979SFrancis Visoiu Mistrih                                     std::move(*StrTab));
4784e80979SFrancis Visoiu Mistrih     else
4884e80979SFrancis Visoiu Mistrih       return createRemarkSerializer(remarks::Format::Bitstream, Mode, InputOS);
4984e80979SFrancis Visoiu Mistrih   }();
5084e80979SFrancis Visoiu Mistrih   EXPECT_FALSE(errorToBool(MaybeSerializer.takeError()));
5184e80979SFrancis Visoiu Mistrih   std::unique_ptr<remarks::RemarkSerializer> Serializer =
5284e80979SFrancis Visoiu Mistrih       std::move(*MaybeSerializer);
5384e80979SFrancis Visoiu Mistrih   Serializer->emit(R);
5484e80979SFrancis Visoiu Mistrih 
5584e80979SFrancis Visoiu Mistrih   // Analyze the serialized remark.
5684e80979SFrancis Visoiu Mistrih   checkAnalyze(InputOS.str(), ExpectedR);
5784e80979SFrancis Visoiu Mistrih 
5884e80979SFrancis Visoiu Mistrih   // Analyze the serialized metadata if it's not in standalone mode.
5984e80979SFrancis Visoiu Mistrih   if (ExpectedMeta) {
6084e80979SFrancis Visoiu Mistrih     std::string MetaBuf;
6184e80979SFrancis Visoiu Mistrih     raw_string_ostream MetaOS(MetaBuf);
6284e80979SFrancis Visoiu Mistrih     std::unique_ptr<remarks::MetaSerializer> MetaSerializer =
6384e80979SFrancis Visoiu Mistrih         Serializer->metaSerializer(MetaOS, StringRef(EXTERNALFILETESTPATH));
6484e80979SFrancis Visoiu Mistrih     MetaSerializer->emit();
6584e80979SFrancis Visoiu Mistrih     checkAnalyze(MetaOS.str(), *ExpectedMeta);
6684e80979SFrancis Visoiu Mistrih   }
6784e80979SFrancis Visoiu Mistrih }
6884e80979SFrancis Visoiu Mistrih 
check(const remarks::Remark & R,StringRef ExpectedR,StringRef ExpectedMeta,std::optional<remarks::StringTable> StrTab=std::nullopt)6984e80979SFrancis Visoiu Mistrih static void check(const remarks::Remark &R, StringRef ExpectedR,
7084e80979SFrancis Visoiu Mistrih                   StringRef ExpectedMeta,
71*49e75ebdSKrzysztof Parzyszek                   std::optional<remarks::StringTable> StrTab = std::nullopt) {
7284e80979SFrancis Visoiu Mistrih   return check(remarks::SerializerMode::Separate, R, ExpectedR, ExpectedMeta,
7384e80979SFrancis Visoiu Mistrih                std::move(StrTab));
7484e80979SFrancis Visoiu Mistrih }
7584e80979SFrancis Visoiu Mistrih 
76b6a01caaSKazu Hirata static void
checkStandalone(const remarks::Remark & R,StringRef ExpectedR,std::optional<remarks::StringTable> StrTab=std::nullopt)77b6a01caaSKazu Hirata checkStandalone(const remarks::Remark &R, StringRef ExpectedR,
78*49e75ebdSKrzysztof Parzyszek                 std::optional<remarks::StringTable> StrTab = std::nullopt) {
7984e80979SFrancis Visoiu Mistrih   return check(remarks::SerializerMode::Standalone, R, ExpectedR,
80b6a01caaSKazu Hirata                /*ExpectedMeta=*/std::nullopt, std::move(StrTab));
8184e80979SFrancis Visoiu Mistrih }
8284e80979SFrancis Visoiu Mistrih 
TEST(BitstreamRemarkSerializer,SeparateRemarkFileNoOptionals)8384e80979SFrancis Visoiu Mistrih TEST(BitstreamRemarkSerializer, SeparateRemarkFileNoOptionals) {
8484e80979SFrancis Visoiu Mistrih   remarks::Remark R;
8584e80979SFrancis Visoiu Mistrih   R.RemarkType = remarks::Type::Missed;
8684e80979SFrancis Visoiu Mistrih   R.PassName = "pass";
8784e80979SFrancis Visoiu Mistrih   R.RemarkName = "remark";
8884e80979SFrancis Visoiu Mistrih   R.FunctionName = "function";
8984e80979SFrancis Visoiu Mistrih   check(R,
9084e80979SFrancis Visoiu Mistrih         "<BLOCKINFO_BLOCK/>\n"
9184e80979SFrancis Visoiu Mistrih         "<Meta BlockID=8 NumWords=3 BlockCodeSize=3>\n"
9284e80979SFrancis Visoiu Mistrih         "  <Container info codeid=1 abbrevid=4 op0=0 op1=1/>\n"
9384e80979SFrancis Visoiu Mistrih         "  <Remark version codeid=2 abbrevid=5 op0=0/>\n"
9484e80979SFrancis Visoiu Mistrih         "</Meta>\n"
9584e80979SFrancis Visoiu Mistrih         "<Remark BlockID=9 NumWords=1 BlockCodeSize=4>\n"
9684e80979SFrancis Visoiu Mistrih         "  <Remark header codeid=5 abbrevid=4 op0=2 op1=0 op2=1 op3=2/>\n"
9784e80979SFrancis Visoiu Mistrih         "</Remark>\n",
9884e80979SFrancis Visoiu Mistrih         "<BLOCKINFO_BLOCK/>\n"
9984e80979SFrancis Visoiu Mistrih         "<Meta BlockID=8 NumWords=14 BlockCodeSize=3>\n"
10084e80979SFrancis Visoiu Mistrih         "  <Container info codeid=1 abbrevid=4 op0=0 op1=0/>\n"
10184e80979SFrancis Visoiu Mistrih         "  <String table codeid=3 abbrevid=5/> blob data = "
10284e80979SFrancis Visoiu Mistrih         "'remark\\x00pass\\x00function\\x00'\n"
10384e80979SFrancis Visoiu Mistrih         "  <External File codeid=4 abbrevid=6/> blob data = "
10484e80979SFrancis Visoiu Mistrih         "'" EXTERNALFILETESTPATH"'\n"
10584e80979SFrancis Visoiu Mistrih         "</Meta>\n");
10684e80979SFrancis Visoiu Mistrih }
10784e80979SFrancis Visoiu Mistrih 
TEST(BitstreamRemarkSerializer,SeparateRemarkFileNoOptionalsSeparateStrTab)10884e80979SFrancis Visoiu Mistrih TEST(BitstreamRemarkSerializer, SeparateRemarkFileNoOptionalsSeparateStrTab) {
10984e80979SFrancis Visoiu Mistrih   remarks::StringTable StrTab;
11084e80979SFrancis Visoiu Mistrih   StrTab.add("function");
11184e80979SFrancis Visoiu Mistrih   StrTab.add("pass");
11284e80979SFrancis Visoiu Mistrih   StrTab.add("remark");
11384e80979SFrancis Visoiu Mistrih   remarks::Remark R;
11484e80979SFrancis Visoiu Mistrih   R.RemarkType = remarks::Type::Missed;
11584e80979SFrancis Visoiu Mistrih   R.PassName = "pass";
11684e80979SFrancis Visoiu Mistrih   R.RemarkName = "remark";
11784e80979SFrancis Visoiu Mistrih   R.FunctionName = "function";
11884e80979SFrancis Visoiu Mistrih   check(R,
11984e80979SFrancis Visoiu Mistrih         "<BLOCKINFO_BLOCK/>\n"
12084e80979SFrancis Visoiu Mistrih         "<Meta BlockID=8 NumWords=3 BlockCodeSize=3>\n"
12184e80979SFrancis Visoiu Mistrih         "  <Container info codeid=1 abbrevid=4 op0=0 op1=1/>\n"
12284e80979SFrancis Visoiu Mistrih         "  <Remark version codeid=2 abbrevid=5 op0=0/>\n"
12384e80979SFrancis Visoiu Mistrih         "</Meta>\n"
12484e80979SFrancis Visoiu Mistrih         "<Remark BlockID=9 NumWords=1 BlockCodeSize=4>\n"
12584e80979SFrancis Visoiu Mistrih         "  <Remark header codeid=5 abbrevid=4 op0=2 op1=2 op2=1 op3=0/>\n"
12684e80979SFrancis Visoiu Mistrih         "</Remark>\n",
12784e80979SFrancis Visoiu Mistrih         "<BLOCKINFO_BLOCK/>\n"
12884e80979SFrancis Visoiu Mistrih         "<Meta BlockID=8 NumWords=14 BlockCodeSize=3>\n"
12984e80979SFrancis Visoiu Mistrih         "  <Container info codeid=1 abbrevid=4 op0=0 op1=0/>\n"
13084e80979SFrancis Visoiu Mistrih         "  <String table codeid=3 abbrevid=5/> blob data = "
13184e80979SFrancis Visoiu Mistrih         "'function\\x00pass\\x00remark\\x00'\n"
13284e80979SFrancis Visoiu Mistrih         "  <External File codeid=4 abbrevid=6/> blob data = "
13384e80979SFrancis Visoiu Mistrih         "'" EXTERNALFILETESTPATH"'\n"
13484e80979SFrancis Visoiu Mistrih         "</Meta>\n",
13584e80979SFrancis Visoiu Mistrih         std::move(StrTab));
13684e80979SFrancis Visoiu Mistrih }
13784e80979SFrancis Visoiu Mistrih 
TEST(BitstreamRemarkSerializer,SeparateRemarkFileDebugLoc)13884e80979SFrancis Visoiu Mistrih TEST(BitstreamRemarkSerializer, SeparateRemarkFileDebugLoc) {
13984e80979SFrancis Visoiu Mistrih   remarks::Remark R;
14084e80979SFrancis Visoiu Mistrih   R.RemarkType = remarks::Type::Missed;
14184e80979SFrancis Visoiu Mistrih   R.PassName = "pass";
14284e80979SFrancis Visoiu Mistrih   R.RemarkName = "remark";
14384e80979SFrancis Visoiu Mistrih   R.FunctionName = "function";
14484e80979SFrancis Visoiu Mistrih   R.Loc.emplace();
14584e80979SFrancis Visoiu Mistrih   R.Loc->SourceFilePath = "path";
14684e80979SFrancis Visoiu Mistrih   R.Loc->SourceLine = 99;
14784e80979SFrancis Visoiu Mistrih   R.Loc->SourceColumn = 55;
14884e80979SFrancis Visoiu Mistrih   check(R,
14984e80979SFrancis Visoiu Mistrih         "<BLOCKINFO_BLOCK/>\n"
15084e80979SFrancis Visoiu Mistrih         "<Meta BlockID=8 NumWords=3 BlockCodeSize=3>\n"
15184e80979SFrancis Visoiu Mistrih         "  <Container info codeid=1 abbrevid=4 op0=0 op1=1/>\n"
15284e80979SFrancis Visoiu Mistrih         "  <Remark version codeid=2 abbrevid=5 op0=0/>\n"
15384e80979SFrancis Visoiu Mistrih         "</Meta>\n"
15484e80979SFrancis Visoiu Mistrih         "<Remark BlockID=9 NumWords=4 BlockCodeSize=4>\n"
15584e80979SFrancis Visoiu Mistrih         "  <Remark header codeid=5 abbrevid=4 op0=2 op1=0 op2=1 op3=2/>\n"
15684e80979SFrancis Visoiu Mistrih         "  <Remark debug location codeid=6 abbrevid=5 op0=3 op1=99 op2=55/>\n"
15784e80979SFrancis Visoiu Mistrih         "</Remark>\n",
15884e80979SFrancis Visoiu Mistrih         "<BLOCKINFO_BLOCK/>\n"
15984e80979SFrancis Visoiu Mistrih         "<Meta BlockID=8 NumWords=15 BlockCodeSize=3>\n"
16084e80979SFrancis Visoiu Mistrih         "  <Container info codeid=1 abbrevid=4 op0=0 op1=0/>\n"
16184e80979SFrancis Visoiu Mistrih         "  <String table codeid=3 abbrevid=5/> blob data = "
16284e80979SFrancis Visoiu Mistrih         "'remark\\x00pass\\x00function\\x00path\\x00'\n"
16384e80979SFrancis Visoiu Mistrih         "  <External File codeid=4 abbrevid=6/> blob data = "
16484e80979SFrancis Visoiu Mistrih         "'" EXTERNALFILETESTPATH"'\n"
16584e80979SFrancis Visoiu Mistrih         "</Meta>\n");
16684e80979SFrancis Visoiu Mistrih }
16784e80979SFrancis Visoiu Mistrih 
TEST(BitstreamRemarkSerializer,SeparateRemarkFileHotness)16884e80979SFrancis Visoiu Mistrih TEST(BitstreamRemarkSerializer, SeparateRemarkFileHotness) {
16984e80979SFrancis Visoiu Mistrih   remarks::Remark R;
17084e80979SFrancis Visoiu Mistrih   R.RemarkType = remarks::Type::Missed;
17184e80979SFrancis Visoiu Mistrih   R.PassName = "pass";
17284e80979SFrancis Visoiu Mistrih   R.RemarkName = "remark";
17384e80979SFrancis Visoiu Mistrih   R.FunctionName = "function";
17484e80979SFrancis Visoiu Mistrih   R.Hotness.emplace(999999999);
17584e80979SFrancis Visoiu Mistrih   check(R,
17684e80979SFrancis Visoiu Mistrih         "<BLOCKINFO_BLOCK/>\n"
17784e80979SFrancis Visoiu Mistrih         "<Meta BlockID=8 NumWords=3 BlockCodeSize=3>\n"
17884e80979SFrancis Visoiu Mistrih         "  <Container info codeid=1 abbrevid=4 op0=0 op1=1/>\n"
17984e80979SFrancis Visoiu Mistrih         "  <Remark version codeid=2 abbrevid=5 op0=0/>\n"
18084e80979SFrancis Visoiu Mistrih         "</Meta>\n"
18184e80979SFrancis Visoiu Mistrih         "<Remark BlockID=9 NumWords=3 BlockCodeSize=4>\n"
18284e80979SFrancis Visoiu Mistrih         "  <Remark header codeid=5 abbrevid=4 op0=2 op1=0 op2=1 op3=2/>\n"
18384e80979SFrancis Visoiu Mistrih         "  <Remark hotness codeid=7 abbrevid=6 op0=999999999/>\n"
18484e80979SFrancis Visoiu Mistrih         "</Remark>\n",
18584e80979SFrancis Visoiu Mistrih         "<BLOCKINFO_BLOCK/>\n"
18684e80979SFrancis Visoiu Mistrih         "<Meta BlockID=8 NumWords=14 BlockCodeSize=3>\n"
18784e80979SFrancis Visoiu Mistrih         "  <Container info codeid=1 abbrevid=4 op0=0 op1=0/>\n"
18884e80979SFrancis Visoiu Mistrih         "  <String table codeid=3 abbrevid=5/> blob data = "
18984e80979SFrancis Visoiu Mistrih         "'remark\\x00pass\\x00function\\x00'\n"
19084e80979SFrancis Visoiu Mistrih         "  <External File codeid=4 abbrevid=6/> blob data = "
19184e80979SFrancis Visoiu Mistrih         "'" EXTERNALFILETESTPATH"'\n"
19284e80979SFrancis Visoiu Mistrih         "</Meta>\n");
19384e80979SFrancis Visoiu Mistrih }
19484e80979SFrancis Visoiu Mistrih 
TEST(BitstreamRemarkSerializer,SeparateRemarkFileArgNoDebugLoc)19584e80979SFrancis Visoiu Mistrih TEST(BitstreamRemarkSerializer, SeparateRemarkFileArgNoDebugLoc) {
19684e80979SFrancis Visoiu Mistrih   remarks::Remark R;
19784e80979SFrancis Visoiu Mistrih   R.RemarkType = remarks::Type::Missed;
19884e80979SFrancis Visoiu Mistrih   R.PassName = "pass";
19984e80979SFrancis Visoiu Mistrih   R.RemarkName = "remark";
20084e80979SFrancis Visoiu Mistrih   R.FunctionName = "function";
20184e80979SFrancis Visoiu Mistrih   R.Args.emplace_back();
20284e80979SFrancis Visoiu Mistrih   R.Args.back().Key = "key";
20384e80979SFrancis Visoiu Mistrih   R.Args.back().Val = "value";
20484e80979SFrancis Visoiu Mistrih   check(R,
20584e80979SFrancis Visoiu Mistrih         "<BLOCKINFO_BLOCK/>\n"
20684e80979SFrancis Visoiu Mistrih         "<Meta BlockID=8 NumWords=3 BlockCodeSize=3>\n"
20784e80979SFrancis Visoiu Mistrih         "  <Container info codeid=1 abbrevid=4 op0=0 op1=1/>\n"
20884e80979SFrancis Visoiu Mistrih         "  <Remark version codeid=2 abbrevid=5 op0=0/>\n"
20984e80979SFrancis Visoiu Mistrih         "</Meta>\n"
21084e80979SFrancis Visoiu Mistrih         "<Remark BlockID=9 NumWords=2 BlockCodeSize=4>\n"
21184e80979SFrancis Visoiu Mistrih         "  <Remark header codeid=5 abbrevid=4 op0=2 op1=0 op2=1 op3=2/>\n"
21284e80979SFrancis Visoiu Mistrih         "  <Argument codeid=9 abbrevid=8 op0=3 op1=4/>\n"
21384e80979SFrancis Visoiu Mistrih         "</Remark>\n",
21484e80979SFrancis Visoiu Mistrih         "<BLOCKINFO_BLOCK/>\n"
21584e80979SFrancis Visoiu Mistrih         "<Meta BlockID=8 NumWords=16 BlockCodeSize=3>\n"
21684e80979SFrancis Visoiu Mistrih         "  <Container info codeid=1 abbrevid=4 op0=0 op1=0/>\n"
21784e80979SFrancis Visoiu Mistrih         "  <String table codeid=3 abbrevid=5/> blob data = "
21884e80979SFrancis Visoiu Mistrih         "'remark\\x00pass\\x00function\\x00key\\x00value\\x00'\n"
21984e80979SFrancis Visoiu Mistrih         "  <External File codeid=4 abbrevid=6/> blob data = "
22084e80979SFrancis Visoiu Mistrih         "'" EXTERNALFILETESTPATH"'\n"
22184e80979SFrancis Visoiu Mistrih         "</Meta>\n");
22284e80979SFrancis Visoiu Mistrih }
22384e80979SFrancis Visoiu Mistrih 
TEST(BitstreamRemarkSerializer,SeparateRemarkFileArgDebugLoc)22484e80979SFrancis Visoiu Mistrih TEST(BitstreamRemarkSerializer, SeparateRemarkFileArgDebugLoc) {
22584e80979SFrancis Visoiu Mistrih   remarks::Remark R;
22684e80979SFrancis Visoiu Mistrih   R.RemarkType = remarks::Type::Missed;
22784e80979SFrancis Visoiu Mistrih   R.PassName = "pass";
22884e80979SFrancis Visoiu Mistrih   R.RemarkName = "remark";
22984e80979SFrancis Visoiu Mistrih   R.FunctionName = "function";
23084e80979SFrancis Visoiu Mistrih   R.Args.emplace_back();
23184e80979SFrancis Visoiu Mistrih   R.Args.back().Key = "key";
23284e80979SFrancis Visoiu Mistrih   R.Args.back().Val = "value";
23384e80979SFrancis Visoiu Mistrih   R.Args.back().Loc.emplace();
23484e80979SFrancis Visoiu Mistrih   R.Args.back().Loc->SourceFilePath = "path";
23584e80979SFrancis Visoiu Mistrih   R.Args.back().Loc->SourceLine = 99;
23684e80979SFrancis Visoiu Mistrih   R.Args.back().Loc->SourceColumn = 55;
23784e80979SFrancis Visoiu Mistrih   check(R,
23884e80979SFrancis Visoiu Mistrih         "<BLOCKINFO_BLOCK/>\n"
23984e80979SFrancis Visoiu Mistrih         "<Meta BlockID=8 NumWords=3 BlockCodeSize=3>\n"
24084e80979SFrancis Visoiu Mistrih         "  <Container info codeid=1 abbrevid=4 op0=0 op1=1/>\n"
24184e80979SFrancis Visoiu Mistrih         "  <Remark version codeid=2 abbrevid=5 op0=0/>\n"
24284e80979SFrancis Visoiu Mistrih         "</Meta>\n"
24384e80979SFrancis Visoiu Mistrih         "<Remark BlockID=9 NumWords=4 BlockCodeSize=4>\n"
24484e80979SFrancis Visoiu Mistrih         "  <Remark header codeid=5 abbrevid=4 op0=2 op1=0 op2=1 op3=2/>\n"
24584e80979SFrancis Visoiu Mistrih         "  <Argument with debug location codeid=8 abbrevid=7 op0=3 op1=4 op2=5 "
24684e80979SFrancis Visoiu Mistrih         "op3=99 op4=55/>\n"
24784e80979SFrancis Visoiu Mistrih         "</Remark>\n",
24884e80979SFrancis Visoiu Mistrih         "<BLOCKINFO_BLOCK/>\n"
24984e80979SFrancis Visoiu Mistrih         "<Meta BlockID=8 NumWords=17 BlockCodeSize=3>\n"
25084e80979SFrancis Visoiu Mistrih         "  <Container info codeid=1 abbrevid=4 op0=0 op1=0/>\n"
25184e80979SFrancis Visoiu Mistrih         "  <String table codeid=3 abbrevid=5/> blob data = "
25284e80979SFrancis Visoiu Mistrih         "'remark\\x00pass\\x00function\\x00key\\x00value\\x00path\\x00'\n"
25384e80979SFrancis Visoiu Mistrih         "  <External File codeid=4 abbrevid=6/> blob data = "
25484e80979SFrancis Visoiu Mistrih         "'" EXTERNALFILETESTPATH"'\n"
25584e80979SFrancis Visoiu Mistrih         "</Meta>\n");
25684e80979SFrancis Visoiu Mistrih }
25784e80979SFrancis Visoiu Mistrih 
TEST(BitstreamRemarkSerializer,SeparateRemarkFileAll)25884e80979SFrancis Visoiu Mistrih TEST(BitstreamRemarkSerializer, SeparateRemarkFileAll) {
25984e80979SFrancis Visoiu Mistrih   remarks::Remark R;
26084e80979SFrancis Visoiu Mistrih   R.RemarkType = remarks::Type::Missed;
26184e80979SFrancis Visoiu Mistrih   R.PassName = "pass";
26284e80979SFrancis Visoiu Mistrih   R.RemarkName = "remark";
26384e80979SFrancis Visoiu Mistrih   R.FunctionName = "function";
26484e80979SFrancis Visoiu Mistrih   R.Loc.emplace();
26584e80979SFrancis Visoiu Mistrih   R.Loc->SourceFilePath = "path";
26684e80979SFrancis Visoiu Mistrih   R.Loc->SourceLine = 99;
26784e80979SFrancis Visoiu Mistrih   R.Loc->SourceColumn = 55;
26884e80979SFrancis Visoiu Mistrih   R.Hotness.emplace(999999999);
26984e80979SFrancis Visoiu Mistrih   R.Args.emplace_back();
27084e80979SFrancis Visoiu Mistrih   R.Args.back().Key = "key";
27184e80979SFrancis Visoiu Mistrih   R.Args.back().Val = "value";
27284e80979SFrancis Visoiu Mistrih   R.Args.back().Loc.emplace();
27384e80979SFrancis Visoiu Mistrih   R.Args.back().Loc->SourceFilePath = "argpath";
27484e80979SFrancis Visoiu Mistrih   R.Args.back().Loc->SourceLine = 11;
27584e80979SFrancis Visoiu Mistrih   R.Args.back().Loc->SourceColumn = 66;
27684e80979SFrancis Visoiu Mistrih   check(R,
27784e80979SFrancis Visoiu Mistrih         "<BLOCKINFO_BLOCK/>\n"
27884e80979SFrancis Visoiu Mistrih         "<Meta BlockID=8 NumWords=3 BlockCodeSize=3>\n"
27984e80979SFrancis Visoiu Mistrih         "  <Container info codeid=1 abbrevid=4 op0=0 op1=1/>\n"
28084e80979SFrancis Visoiu Mistrih         "  <Remark version codeid=2 abbrevid=5 op0=0/>\n"
28184e80979SFrancis Visoiu Mistrih         "</Meta>\n"
28284e80979SFrancis Visoiu Mistrih         "<Remark BlockID=9 NumWords=8 BlockCodeSize=4>\n"
28384e80979SFrancis Visoiu Mistrih         "  <Remark header codeid=5 abbrevid=4 op0=2 op1=0 op2=1 op3=2/>\n"
28484e80979SFrancis Visoiu Mistrih         "  <Remark debug location codeid=6 abbrevid=5 op0=3 op1=99 op2=55/>\n"
28584e80979SFrancis Visoiu Mistrih         "  <Remark hotness codeid=7 abbrevid=6 op0=999999999/>\n"
28684e80979SFrancis Visoiu Mistrih         "  <Argument with debug location codeid=8 abbrevid=7 op0=4 op1=5 op2=6 "
28784e80979SFrancis Visoiu Mistrih         "op3=11 op4=66/>\n"
28884e80979SFrancis Visoiu Mistrih         "</Remark>\n",
28984e80979SFrancis Visoiu Mistrih         "<BLOCKINFO_BLOCK/>\n"
29084e80979SFrancis Visoiu Mistrih         "<Meta BlockID=8 NumWords=19 BlockCodeSize=3>\n"
29184e80979SFrancis Visoiu Mistrih         "  <Container info codeid=1 abbrevid=4 op0=0 op1=0/>\n"
29284e80979SFrancis Visoiu Mistrih         "  <String table codeid=3 abbrevid=5/> blob data = "
29384e80979SFrancis Visoiu Mistrih         "'remark\\x00pass\\x00function\\x00path\\x00key\\x00value\\x00argpa"
29484e80979SFrancis Visoiu Mistrih         "th\\x00'\n  <External File codeid=4 abbrevid=6/> blob data = "
29584e80979SFrancis Visoiu Mistrih         "'" EXTERNALFILETESTPATH"'\n"
29684e80979SFrancis Visoiu Mistrih         "</Meta>\n");
29784e80979SFrancis Visoiu Mistrih }
29884e80979SFrancis Visoiu Mistrih 
TEST(BitstreamRemarkSerializer,Standalone)29984e80979SFrancis Visoiu Mistrih TEST(BitstreamRemarkSerializer, Standalone) {
30084e80979SFrancis Visoiu Mistrih   // Pre-populate the string table.
30184e80979SFrancis Visoiu Mistrih   remarks::StringTable StrTab;
30284e80979SFrancis Visoiu Mistrih   StrTab.add("pass");
30384e80979SFrancis Visoiu Mistrih   StrTab.add("remark");
30484e80979SFrancis Visoiu Mistrih   StrTab.add("function");
30584e80979SFrancis Visoiu Mistrih   StrTab.add("path");
30684e80979SFrancis Visoiu Mistrih   StrTab.add("key");
30784e80979SFrancis Visoiu Mistrih   StrTab.add("value");
30884e80979SFrancis Visoiu Mistrih   StrTab.add("argpath");
30984e80979SFrancis Visoiu Mistrih   remarks::Remark R;
31084e80979SFrancis Visoiu Mistrih   R.RemarkType = remarks::Type::Missed;
31184e80979SFrancis Visoiu Mistrih   R.PassName = "pass";
31284e80979SFrancis Visoiu Mistrih   R.RemarkName = "remark";
31384e80979SFrancis Visoiu Mistrih   R.FunctionName = "function";
31484e80979SFrancis Visoiu Mistrih   R.Loc.emplace();
31584e80979SFrancis Visoiu Mistrih   R.Loc->SourceFilePath = "path";
31684e80979SFrancis Visoiu Mistrih   R.Loc->SourceLine = 99;
31784e80979SFrancis Visoiu Mistrih   R.Loc->SourceColumn = 55;
31884e80979SFrancis Visoiu Mistrih   R.Hotness.emplace(999999999);
31984e80979SFrancis Visoiu Mistrih   R.Args.emplace_back();
32084e80979SFrancis Visoiu Mistrih   R.Args.back().Key = "key";
32184e80979SFrancis Visoiu Mistrih   R.Args.back().Val = "value";
32284e80979SFrancis Visoiu Mistrih   R.Args.back().Loc.emplace();
32384e80979SFrancis Visoiu Mistrih   R.Args.back().Loc->SourceFilePath = "argpath";
32484e80979SFrancis Visoiu Mistrih   R.Args.back().Loc->SourceLine = 11;
32584e80979SFrancis Visoiu Mistrih   R.Args.back().Loc->SourceColumn = 66;
32684e80979SFrancis Visoiu Mistrih   checkStandalone(
32784e80979SFrancis Visoiu Mistrih       R,
32884e80979SFrancis Visoiu Mistrih       "<BLOCKINFO_BLOCK/>\n"
32984e80979SFrancis Visoiu Mistrih       "<Meta BlockID=8 NumWords=15 BlockCodeSize=3>\n"
33084e80979SFrancis Visoiu Mistrih       "  <Container info codeid=1 abbrevid=4 op0=0 op1=2/>\n"
33184e80979SFrancis Visoiu Mistrih       "  <Remark version codeid=2 abbrevid=5 op0=0/>\n"
33284e80979SFrancis Visoiu Mistrih       "  <String table codeid=3 abbrevid=6/> blob data = "
33384e80979SFrancis Visoiu Mistrih       "'pass\\x00remark\\x00function\\x00path\\x00key\\x00value\\x00argpath\\x0"
33484e80979SFrancis Visoiu Mistrih       "0'\n"
33584e80979SFrancis Visoiu Mistrih       "</Meta>\n"
33684e80979SFrancis Visoiu Mistrih       "<Remark BlockID=9 NumWords=8 BlockCodeSize=4>\n"
33784e80979SFrancis Visoiu Mistrih       "  <Remark header codeid=5 abbrevid=4 op0=2 op1=1 op2=0 op3=2/>\n"
33884e80979SFrancis Visoiu Mistrih       "  <Remark debug location codeid=6 abbrevid=5 op0=3 op1=99 op2=55/>\n"
33984e80979SFrancis Visoiu Mistrih       "  <Remark hotness codeid=7 abbrevid=6 op0=999999999/>\n"
34084e80979SFrancis Visoiu Mistrih       "  <Argument with debug location codeid=8 abbrevid=7 op0=4 op1=5 op2=6 "
34184e80979SFrancis Visoiu Mistrih       "op3=11 op4=66/>\n"
34284e80979SFrancis Visoiu Mistrih       "</Remark>\n",
34384e80979SFrancis Visoiu Mistrih       std::move(StrTab));
34484e80979SFrancis Visoiu Mistrih }
345