| #include <gtest/gtest.h> | |
| #include <torch/csrc/jit/frontend/ir_emitter.h> | |
| #include <torch/csrc/jit/ir/ir.h> | |
| #include <torch/csrc/jit/ir/irparser.h> | |
| #include <torch/csrc/jit/testing/file_check.h> | |
| namespace torch { | |
| namespace jit { | |
| TEST(CleanupPassTest, Basic) { | |
| // Tests stability of clean up passes when dealing with constant pooling | |
| // and constant propagation. | |
| auto graph = std::make_shared<Graph>(); | |
| parseIR( | |
| R"IR( | |
| graph(%cond.1 : Tensor, | |
| %suffix.1 : str): | |
| %3 : bool = aten::Bool(%cond.1) # o.py:6:7 | |
| %25 : str = prim::If(%3) # o.py:6:4 | |
| block0(): | |
| %a.1 : str = prim::Constant[value="same string"]() | |
| %b.1 : str = prim::Constant[value=" with a twist"]() | |
| %7 : str = aten::add(%a.1, %b.1) | |
| %11 : str = aten::add(%7, %suffix.1) # o.py:10:15 | |
| -> (%11) | |
| block1(): | |
| %c.1 : str = prim::Constant[value="same string"]() | |
| %d.1 : str = prim::Constant[value=" with a twist"]() | |
| %12 : str = aten::add(%c.1, %d.1) | |
| -> (%12) | |
| return (%25) | |
| )IR", | |
| &*graph); | |
| runCleanupPasses(graph); | |
| testing::FileCheck() | |
| .check_count( | |
| "prim::Constant[value=\"same string with a twist\"]", | |
| 1, | |
| /*exactly=*/true) | |
| ->run(*graph); | |
| auto graph_after_pass_once = graph->toString(); | |
| runCleanupPasses(graph); | |
| auto graph_after_pass_twice = graph->toString(); | |
| ASSERT_EQ(graph_after_pass_once, graph_after_pass_twice); | |
| } | |
| } // namespace jit | |
| } // namespace torch |