onnxruntime/onnxruntime/core/optimizer/common_subexpression_elimination.h
Dmitri Smirnov 2679711bee
Refactor transformers and other code to reduce memory allocation calls (#10523)
Work on minimizing memory management calls by
  reducing number of allocations and copies.
  Replace std::unordered_set to InlinedHashSet
  and add usage of InlinedVector.
  Employ std::move() to minimize copying and memory allocations.
  Remove copying of the const shared data into each of the
  PropagateCast transformer instances.
  Move inlined_containers.h header to include/common
  Adjust AsSpan imlementation for C++ < 17
2022-02-24 16:17:14 -08:00

36 lines
1.2 KiB
C++

// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
#pragma once
#include "core/optimizer/graph_transformer.h"
namespace onnxruntime {
/**
@Class CommonSubexpressionElimination
Merge nodes that always evaluate to the same result.
*/
class CommonSubexpressionElimination : public GraphTransformer {
public:
CommonSubexpressionElimination(const InlinedHashSet<std::string_view>& compatible_execution_providers = {}) noexcept
: GraphTransformer("CommonSubexpressionElimination", compatible_execution_providers) {
}
Status ApplyImpl(Graph& graph, bool& modified, int graph_level, const logging::Logger& logger) const override;
};
/**
@Class CommonSubexpressionEliminationApplyOnce
Same as CommonSubexpressionElimination, but with ShouldOnlyApplyOnce.
*/
class CommonSubexpressionEliminationApplyOnce : public CommonSubexpressionElimination {
public:
CommonSubexpressionEliminationApplyOnce(const InlinedHashSet<std::string_view>& compatible_execution_providers = {}) noexcept
: CommonSubexpressionElimination(compatible_execution_providers) {
}
bool ShouldOnlyApplyOnce() const override { return true; }
};
} // namespace onnxruntime