From 047bfb42fcf6281a4e59a9a2b2391d957e3acb99 Mon Sep 17 00:00:00 2001 From: Viraj Shah Date: Mon, 4 Aug 2025 16:52:38 +0530 Subject: [PATCH 1/2] Fix bug in `StrAppendList` for `BasicBlockGraphBuilder::DebugString`. --- gematria/granite/graph_builder.cc | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/gematria/granite/graph_builder.cc b/gematria/granite/graph_builder.cc index 30f6c4ab..e4ead92c 100644 --- a/gematria/granite/graph_builder.cc +++ b/gematria/granite/graph_builder.cc @@ -485,9 +485,10 @@ void StrAppendList(std::stringstream& buffer, std::string_view list_name, buffer << list_name << " = ["; bool first = true; for (const auto& item : items) { - if (!first) { - buffer << ","; + if (first) { first = false; + } else { + buffer << ", "; } buffer << item; } From cd4361ebd04ec943436f793855c3af6e6d5c3399 Mon Sep 17 00:00:00 2001 From: Viraj Shah Date: Thu, 7 Aug 2025 18:10:56 +0530 Subject: [PATCH 2/2] Add test for `BasicBlockGraphBuilder::DebugString`. * Add a test to make sure `DebugString` returns something reasonable. --- gematria/granite/graph_builder_test.cc | 32 ++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/gematria/granite/graph_builder_test.cc b/gematria/granite/graph_builder_test.cc index 82cdbca4..60659de2 100644 --- a/gematria/granite/graph_builder_test.cc +++ b/gematria/granite/graph_builder_test.cc @@ -571,5 +571,37 @@ TEST_F(BasicBlockGraphBuilderTest, TwoNops) { )pb")))); } +TEST_F(BasicBlockGraphBuilderTest, DebugString) { + CreateBuilder(OutOfVocabularyTokenBehavior::ReturnError()); + ASSERT_TRUE(builder_->AddBasicBlock(BasicBlockFromProto(ParseTextProto(R"pb( + canonicalized_instructions: { + mnemonic: "LEA" + llvm_mnemonic: "LEA64r" + output_operands: { register_name: "RDI" } + input_operands: { + address: { base_register: "RBX" displacement: 8 scaling: 1 } + } + })pb")))); + + const std::string expected_string = + "num_graphs = 1\n" + "num_nodes = 5\n" + "num_edges = 4\n" + "num_node_tokens = 16\n" + "num_nodes_per_block = [5]\n" + "num_edges_per_block = [4]\n" + "node_types = [NodeType::kInstruction, NodeType::kAddressOperand, " + "NodeType::kRegister, NodeType::kImmediate, NodeType::kRegister]\n" + "edge_senders = [2, 3, 1, 0]\n" + "edge_receivers = [1, 1, 0, 4]\n" + "edge_types = [EdgeType::kAddressBaseRegister, " + "EdgeType::kAddressDisplacement, EdgeType::kInputOperands, " + "EdgeType::kOutputOperands]\n" + "InstructionNodeMask = [1, 0, 0, 0, 0]\n" + "DeltaBlockIndex = [0]\n"; + + EXPECT_EQ(builder_->DebugString(), expected_string); +} + } // namespace } // namespace gematria