58 lines
1.5 KiB
C++
58 lines
1.5 KiB
C++
#include "caffe2/core/common.h"
|
|
#include "caffe2/opt/converter.h"
|
|
#include "caffe2/opt/passes.h"
|
|
|
|
#include <gtest/gtest.h>
|
|
|
|
TEST(DeadCodeElim, BasicElim) {
|
|
caffe2::NetDef net;
|
|
{
|
|
caffe2::OperatorDef* def = net.add_op();
|
|
def->set_type("Fake");
|
|
def->add_input("X");
|
|
def->add_output("Y");
|
|
}
|
|
|
|
auto nn = caffe2::convertToNNModule(net);
|
|
auto pass = caffe2::OptimizationPassRegistry()->Create("DeadCodeElim", &nn);
|
|
pass->run();
|
|
auto optimized_net = caffe2::convertToCaffe2Proto(nn, net);
|
|
EXPECT_EQ(optimized_net.op().size(), 0);
|
|
}
|
|
|
|
TEST(DeadCodeElim, BasicNoElim) {
|
|
caffe2::NetDef net;
|
|
{
|
|
caffe2::OperatorDef* def = net.add_op();
|
|
def->set_type("Fake");
|
|
def->add_input("X");
|
|
def->add_output("Y");
|
|
}
|
|
net.add_external_output("Y");
|
|
|
|
auto nn = caffe2::convertToNNModule(net);
|
|
auto pass = caffe2::OptimizationPassRegistry()->Create("DeadCodeElim", &nn);
|
|
pass->run();
|
|
auto optimized_net = caffe2::convertToCaffe2Proto(nn, net);
|
|
EXPECT_EQ(optimized_net.op().size(), 1);
|
|
}
|
|
|
|
TEST(DeadCodeElim, PartiallyUsedNoElim) {
|
|
caffe2::NetDef net;
|
|
{
|
|
caffe2::OperatorDef* def = net.add_op();
|
|
def->set_type("Fake");
|
|
def->add_input("X");
|
|
def->add_output("Y");
|
|
def->add_output("Z");
|
|
}
|
|
net.add_external_output("Y");
|
|
// Z is unused, but we should keep Fake because Y is
|
|
|
|
auto nn = caffe2::convertToNNModule(net);
|
|
auto pass = caffe2::OptimizationPassRegistry()->Create("DeadCodeElim", &nn);
|
|
pass->run();
|
|
auto optimized_net = caffe2::convertToCaffe2Proto(nn, net);
|
|
EXPECT_EQ(optimized_net.op().size(), 1);
|
|
}
|