| #include <torch/csrc/jit/ir.h> | 
 | #include <torch/csrc/jit/irparser.h> | 
 | #include <torch/csrc/jit/passes/constant_pooling.h> | 
 | #include <torch/csrc/jit/passes/constant_propagation.h> | 
 | #include <torch/csrc/jit/testing/file_check.h> | 
 | #include "test/cpp/jit/test_base.h" | 
 |  | 
 | #include <sstream> | 
 | #include <string> | 
 |  | 
 | namespace torch { | 
 | namespace jit { | 
 |  | 
 | void testConstantPooling() { | 
 |   { | 
 |     auto graph = std::make_shared<Graph>(); | 
 |     script::parseIR( | 
 |         R"IR( | 
 | graph(): | 
 |   %8 : int = prim::Constant[value=1]() | 
 |   %10 : int = prim::Constant[value=1]() | 
 |   return (%8, %10) | 
 |   )IR", | 
 |         &*graph); | 
 |     ConstantPooling(graph); | 
 |     testing::FileCheck() | 
 |         .check_count("prim::Constant", 1, /*exactly*/ true) | 
 |         ->run(*graph); | 
 |   } | 
 |   { | 
 |     auto graph = std::make_shared<Graph>(); | 
 |     script::parseIR( | 
 |         R"IR( | 
 | graph(%cond : Tensor): | 
 |   %a : str = prim::Constant[value="bcd"]() | 
 |   %3 : bool = aten::Bool(%cond) | 
 |   %b : str = prim::If(%3) | 
 |     block0(): | 
 |       %b.1 : str = prim::Constant[value="abc"]() | 
 |       -> (%b.1) | 
 |     block1(): | 
 |       %b.2 : str = prim::Constant[value="abc"]() | 
 |       -> (%b.2) | 
 |   %7 : (str, str) = prim::TupleConstruct(%a, %b) | 
 |   return (%7) | 
 |   )IR", | 
 |         &*graph); | 
 |     ConstantPooling(graph); | 
 |     testing::FileCheck() | 
 |         .check_count("prim::Constant[value=\"abc\"]", 1, /*exactly*/ true) | 
 |         ->check_count("prim::Constant[value=\"bcd\"]", 1, /*exactly*/ true) | 
 |         ->run(*graph); | 
 |   } | 
 |   { | 
 |     auto graph = std::make_shared<Graph>(); | 
 |     script::parseIR( | 
 |         R"IR( | 
 | graph(): | 
 |   %2 : int = prim::Constant[value=2]() | 
 |   %1 : int = prim::Constant[value=1]() | 
 |   %5 : int? = prim::Constant() | 
 |   %7 : Device? = prim::Constant() | 
 |   %15: bool = prim::Constant[value=0]() | 
 |   %10 : int = prim::Constant[value=6]() | 
 |   %3 : int[] = prim::ListConstruct(%1, %2) | 
 |   %x : Tensor = aten::tensor(%3, %5, %7, %15) | 
 |   %y : Tensor = aten::tensor(%3, %10, %7, %15) | 
 |   %9 : int[] = prim::ListConstruct(%1, %2) | 
 |   %z : Tensor = aten::tensor(%9, %10, %7, %15) | 
 |   %f = prim::Print(%x, %y, %z) | 
 |   return (%1) | 
 |   )IR", | 
 |         &*graph); | 
 |     // three tensors created - two different devices among the three | 
 |     // don't have good support for parsing tensor constants | 
 |     ConstantPropagation(graph); | 
 |     ConstantPooling(graph); | 
 |     testing::FileCheck() | 
 |         .check_count("Float(2) = prim::Constant", 1, /*exactly*/ true) | 
 |         ->check_count("Long(2) = prim::Constant", 1, /*exactly*/ true) | 
 |         ->run(*graph); | 
 |   } | 
 |   // don't create aliasing of graph outputs in constant pooling | 
 |   { | 
 |     auto graph = std::make_shared<Graph>(); | 
 |     script::parseIR( | 
 |         R"IR( | 
 | graph(%cond : Tensor): | 
 |   %a : Tensor = prim::Constant() | 
 |   %b : Tensor = prim::Constant() | 
 |   %c : Tensor = prim::Constant() | 
 |   %1 = prim::Print(%c) | 
 |   return (%a, %b) | 
 |   )IR", | 
 |         &*graph); | 
 |     ConstantPooling(graph); | 
 |     testing::FileCheck() | 
 |         .check_count("prim::Constant", 2, /*exactly*/ true) | 
 |         ->run(*graph); | 
 |   } | 
 | } | 
 | } // namespace jit | 
 | } // namespace torch |