#pragma once
#include "megbrain/opr/loop.h"
class mgb::opr::intl::LoopImpl::Desc::OutputRecorderBase : public mgb::Hashable {
bool is_same_st(const Hashable&) const override { return true; }
public:
using SubgraphStaticInferHelper = mgb::cg::static_infer::SubgraphStaticInferHelper;
virtual ~OutputRecorderBase() = default;
virtual OutputMode output_mode() const = 0;
size_t hash() const override { return mgb::hash(dyn_typeinfo()); }
virtual void bind_var(VarNode* var_sub, VarNode* var_out) = 0;
virtual bool has_shape_infer_desc() const = 0;
virtual void register_infer_desc(SubgraphStaticInferHelper&) const {
mgb_assert(0);
}
virtual void on_exec_begin() {}
virtual void on_val_produced(const DeviceTensorND& val) { MGB_MARK_USED_VAR(val); }
virtual void on_exec_end() {}
virtual std::string name() const = 0;
virtual SymbolVar get_outgrad_in_iter(
SymbolVar loop_counter_down, SymbolVar loop_counter_up,
SymbolVar outgrad) = 0;
};