| #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); |
| } |