Skip to content

Commit

Permalink
[luci/logex] Replace SummaryBuilderLet::ABC (#8483)
Browse files Browse the repository at this point in the history
This commit replaces `SummaryBuilderLet::ABC` with `CircleNodeSummaryBuilders`.

ONE-DCO-1.0-Signed-off-by: Seok NamKoong <[email protected]>
  • Loading branch information
llFreetimell authored Feb 22, 2022
1 parent f0a74fa commit 3ce763e
Show file tree
Hide file tree
Showing 6 changed files with 753 additions and 324 deletions.
10 changes: 9 additions & 1 deletion compiler/luci/logex/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
# TODO Find how to test logging-ex utility
file(GLOB_RECURSE SOURCES "src/*.cpp")
file(GLOB_RECURSE TESTS "src/*.test.cpp")
list(REMOVE_ITEM SOURCES ${TESTS})

if (NOT LUCI_LIBRARY_TYPE)
set(LUCI_LIBRARY_TYPE "SHARED")
Expand All @@ -13,7 +15,13 @@ target_link_libraries(luci_logex PRIVATE luci_log)
target_link_libraries(luci_logex PRIVATE luci_lang)
target_link_libraries(luci_logex PRIVATE hermes_std)
target_link_libraries(luci_logex PRIVATE nncc_common)
target_link_libraries(luci_logex PRIVATE pepper_str)
install(TARGETS luci_logex DESTINATION lib)
install(DIRECTORY include/ DESTINATION include
FILES_MATCHING PATTERN "*.h")

nnas_find_package(GTest REQUIRED)

GTest_AddTest(luci_logex_test ${TESTS})
target_include_directories(luci_logex_test PRIVATE src)
target_link_libraries(luci_logex_test luci_logex)
target_link_libraries(luci_logex_test luci_lang)
38 changes: 20 additions & 18 deletions compiler/luci/logex/src/CircleNodeSummaryBuilder.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
*/

#include "CircleNodeSummaryBuilder.h"
#include "CircleNodeSummaryBuilders.h"

#include <luci/IR/CircleDialect.h>

Expand Down Expand Up @@ -118,24 +119,28 @@ CircleNodeSummaryBuilder::create_builder(const luci::CircleNode *node)
return std::make_unique<CLASS>(); \
}

CIRCLE_NODE(ABS, CircleAbsSummaryBuilder)
CIRCLE_NODE(ADD, CircleAddSummaryBuilder)
CIRCLE_NODE(ADD_N, CircleAddNSummaryBuilder)
CIRCLE_NODE(ARG_MAX, CircleArgMaxSummaryBuilder)
CIRCLE_NODE(ARG_MIN, CircleArgMinSummaryBuilder)
CIRCLE_NODE(AVERAGE_POOL_2D, CircleAveragePool2DSummaryBuilder)
CIRCLE_NODE(BATCH_MATMUL, CircleBatchMatMulSummaryBuilder)
CIRCLE_NODE(BATCH_TO_SPACE_ND, CircleBatchToSpaceNDSummaryBuilder)
CIRCLE_NODE(BCQ_FULLY_CONNECTED, CircleBCQFullyConnectedSummaryBuilder)
CIRCLE_NODE(BCQ_GATHER, CircleBCQGatherSummaryBuilder)
CIRCLE_NODE(BIDIRECTIONAL_SEQUENCE_LSTM, CircleBidirectionalSequenceLSTMSummaryBuilder)
CIRCLE_NODE(CAST, CircleCastSummaryBuilder)
CIRCLE_NODE(CEIL, CircleCeilSummaryBuilder)
CIRCLE_NODE(CONCATENATION, CircleConcatenationSummaryBuilder)
CIRCLE_NODE(CIRCLECONST, CircleConstSummaryBuilder)
CIRCLE_NODE(CONV_2D, CircleConv2DSummaryBuilder)
CIRCLE_NODE(COS, CircleCosSummaryBuilder)
CIRCLE_NODE(CUSTOM, CircleCustomSummaryBuilder)

// TODO Implement following builders
// CIRCLE_NODE(ABS, CircleAbsSummaryBuilder)
// CIRCLE_NODE(ADD, CircleAddSummaryBuilder)
// CIRCLE_NODE(ADD_N, CircleAddNSummaryBuilder)
// CIRCLE_NODE(ARG_MAX, CircleArgMaxSummaryBuilder)
// CIRCLE_NODE(ARG_MIN, CircleArgMinSummaryBuilder)
// CIRCLE_NODE(AVERAGE_POOL_2D, CircleAveragePool2DSummaryBuilder)
// CIRCLE_NODE(BATCH_MATMUL, CircleBatchMatMulSummaryBuilder)
// CIRCLE_NODE(BATCH_TO_SPACE_ND, CircleBatchToSpaceNDSummaryBuilder)
// CIRCLE_NODE(BCQ_FULLY_CONNECTED, CircleBCQFullyConnectedSummaryBuilder)
// CIRCLE_NODE(BCQ_GATHER, CircleBCQGatherSummaryBuilder)
// CIRCLE_NODE(BIDIRECTIONAL_SEQUENCE_LSTM, CircleBidirectionalSequenceLSTMSummaryBuilder)
// CIRCLE_NODE(CAST, CircleCastSummaryBuilder)
// CIRCLE_NODE(CEIL, CircleCeilSummaryBuilder)
// CIRCLE_NODE(CONCATENATION, CircleConcatenationSummaryBuilder)
// CIRCLE_NODE(CIRCLEBIDIRECTIONAL_SEQUENCE_LSTM_OUT,
// CircleBidirectionalSequenceLSTMOutSummaryBuilder)
// CIRCLE_NODE(CIRCLECONST, CircleConstSummaryBuilder)
// CIRCLE_NODE(CIRCLECUSTOMOUT, CircleCustomOutSummaryBuilder)
// CIRCLE_NODE(CIRCLEIFOUT, CircleIfOutSummaryBuilder)
// CIRCLE_NODE(CIRCLENONMAXSUPPRESSIONV4OUT, CircleNonMaxSuppressionV4OutSummaryBuilder)
Expand All @@ -147,9 +152,6 @@ CircleNodeSummaryBuilder::create_builder(const luci::CircleNode *node)
// CIRCLE_NODE(CIRCLEUNPACKOUT, CircleUnpackOutSummaryBuilder)
// CIRCLE_NODE(CIRCLEVARIABLE, CircleVariableSummaryBuilder)
// CIRCLE_NODE(CIRCLEWHILEOUT, CircleWhileOutSummaryBuilder)
// CIRCLE_NODE(CONV_2D, CircleConv2DSummaryBuilder)
// CIRCLE_NODE(COS, CircleCosSummaryBuilder)
// CIRCLE_NODE(CUSTOM, CircleCustomSummaryBuilder)
// CIRCLE_NODE(DEPTH_TO_SPACE, CircleDepthToSpaceSummaryBuilder)
// CIRCLE_NODE(DEPTHWISE_CONV_2D, CircleDepthwiseConv2DSummaryBuilder)
// CIRCLE_NODE(DEQUANTIZE, CircleDequantizeSummaryBuilder)
Expand Down
139 changes: 139 additions & 0 deletions compiler/luci/logex/src/CircleNodeSummaryBuilder.test.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,139 @@
/*
* Copyright (c) 2022 Samsung Electronics Co., Ltd. All Rights Reserved
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

#include "CircleNodeSummaryBuilder.h"

#include <luci/IR/CircleNodes.h>
#include <locop/NodeSummary.h>
#include <locop/SymbolTable.h>

#include <gtest/gtest.h>

namespace
{

class MockSymbolTable : public locop::SymbolTable
{
std::string lookup(const loco::Node *) const override
{
return "Do nothing because it is mocking Symbol Table!";
}
};

class CircleNodeSummaryBuilderTest : public ::testing::Test
{
protected:
bool mock_build(const loco::Node *node)
{
return luci::CircleNodeSummaryBuilder().build(node, &_tbl, _s);
}

protected:
MockSymbolTable _tbl;
locop::NodeSummary _s;
};

} // namespace

TEST_F(CircleNodeSummaryBuilderTest, Add_validate)
{
luci::CircleAdd node;
node.fusedActivationFunction(luci::FusedActFunc::RELU);
EXPECT_TRUE(mock_build(&node));
}

TEST_F(CircleNodeSummaryBuilderTest, Add_validate_fused_NEG)
{
luci::CircleAdd node;
node.fusedActivationFunction(luci::FusedActFunc::UNDEFINED);
EXPECT_FALSE(mock_build(&node));
}

TEST_F(CircleNodeSummaryBuilderTest, AveragePool2D_validate)
{
luci::CircleAveragePool2D node;
node.fusedActivationFunction(luci::FusedActFunc::RELU);
node.padding(luci::Padding::SAME);
EXPECT_TRUE(mock_build(&node));
}

TEST_F(CircleNodeSummaryBuilderTest, AveragePool2D_validate_fused_NEG)
{
luci::CircleAveragePool2D node;
node.fusedActivationFunction(luci::FusedActFunc::UNDEFINED);
node.padding(luci::Padding::SAME);
EXPECT_FALSE(mock_build(&node));
}

TEST_F(CircleNodeSummaryBuilderTest, AveragePool2D_validate_padding_NEG)
{
luci::CircleAveragePool2D node;
node.fusedActivationFunction(luci::FusedActFunc::RELU);
node.padding(luci::Padding::UNDEFINED);
EXPECT_FALSE(mock_build(&node));
}

TEST_F(CircleNodeSummaryBuilderTest, BCQFullyConnected_validate)
{
luci::CircleBCQFullyConnected node;
node.fusedActivationFunction(luci::FusedActFunc::RELU);
EXPECT_TRUE(mock_build(&node));
}

TEST_F(CircleNodeSummaryBuilderTest, BCQFullyConnected_validate_fused_NEG)
{
luci::CircleBCQFullyConnected node;
node.fusedActivationFunction(luci::FusedActFunc::UNDEFINED);
EXPECT_FALSE(mock_build(&node));
}

TEST_F(CircleNodeSummaryBuilderTest, Concatenation_validate)
{
luci::CircleConcatenation node(2);
node.fusedActivationFunction(luci::FusedActFunc::RELU);
EXPECT_TRUE(mock_build(&node));
}

TEST_F(CircleNodeSummaryBuilderTest, Concatenation_validate_fused_NEG)
{
luci::CircleConcatenation node(2);
node.fusedActivationFunction(luci::FusedActFunc::UNDEFINED);
EXPECT_FALSE(mock_build(&node));
}

TEST_F(CircleNodeSummaryBuilderTest, Conv2D_validate)
{
luci::CircleConv2D node;
node.fusedActivationFunction(luci::FusedActFunc::RELU);
node.padding(luci::Padding::SAME);
EXPECT_TRUE(mock_build(&node));
}

TEST_F(CircleNodeSummaryBuilderTest, Conv2D_validate_fused_NEG)
{
luci::CircleConv2D node;
node.fusedActivationFunction(luci::FusedActFunc::UNDEFINED);
node.padding(luci::Padding::SAME);
EXPECT_FALSE(mock_build(&node));
}

TEST_F(CircleNodeSummaryBuilderTest, Conv2D_validate_padding_NEG)
{
luci::CircleConv2D node;
node.fusedActivationFunction(luci::FusedActFunc::RELU);
node.padding(luci::Padding::UNDEFINED);
EXPECT_FALSE(mock_build(&node));
}
Loading

0 comments on commit 3ce763e

Please sign in to comment.