don't allow cse to clean up nondeterministic nodes
authorMichael Suo <suo@fb.com>
Tue, 4 Dec 2018 23:42:22 +0000 (15:42 -0800)
committerFacebook Github Bot <facebook-github-bot@users.noreply.github.com>
Tue, 4 Dec 2018 23:45:37 +0000 (15:45 -0800)
Summary: Pull Request resolved: https://github.com/pytorch/pytorch/pull/14776

Differential Revision: D13330229

Pulled By: suo

fbshipit-source-id: 6bc88811e1889949f0f079cffccd8cd4270584cc

torch/csrc/jit/passes/common_subexpression_elimination.cpp

index a826dc3..72b1501 100644 (file)
@@ -23,8 +23,9 @@ void EliminateCommonSubexpression(
   std::unordered_set<Node*, HashNode, EqualNode> subexprs;
   for (auto it = block->nodes().begin(); it != block->nodes().end(); ++ it) {
     auto node = *it;
-    if (node->kind() == prim::PythonOp || node->kind() == prim::Print ||
-        aliasDb.hasWriters(node) || aliasDb.hasWildcard(node)) {
+    if (node->isNondeterministic() || node->kind() == prim::PythonOp ||
+        node->kind() == prim::Print || aliasDb.hasWriters(node) ||
+        aliasDb.hasWildcard(node)) {
       // Do NOT have enough information to do CSE on these nodes.
       continue;
     }