/** * Copyright 2019 Huawei Technologies Co., Ltd * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef MINDSPORE_CCSRC_DEBUG_TRACE_INFO_H_ #define MINDSPORE_CCSRC_DEBUG_TRACE_INFO_H_ #include #include #include #include #include #include #include "ir/base.h" namespace mindspore { class TraceInfo; using TraceInfoPtr = std::shared_ptr; class Location; using LocationPtr = std::shared_ptr; class DebugInfo; using DebugInfoPtr = std::shared_ptr; // namespace to support intermediate representation definition class TraceInfo : public Base { public: TraceInfo(const DebugInfoPtr &info, const std::string &full_name, const std::string &symbol) { symbol_ = symbol; full_name_ = full_name; name_ = full_name_; debug_info_ = info; } TraceInfo(const TraceInfo &info) : Base(), debug_info_(info.debug_info_), symbol_(info.symbol_), full_name_(info.full_name_), name_(info.name_) {} ~TraceInfo() override = default; MS_DECLARE_PARENT(TraceInfo, Base); virtual std::string name() { return name_; } virtual std::string symbol() { return symbol_; } virtual std::string full_name() { return full_name_; } virtual TraceInfoPtr clone() { return shared_from_base(); } virtual std::string action_name() { return ""; } virtual std::string GetActionBetweenNode(const DebugInfoPtr &info); void set_debug_info(const DebugInfoPtr &info) { debug_info_ = info; } DebugInfoPtr debug_info() { return debug_info_; } DebugInfoPtr DebugInfoHasLoc(); std::vector> GetSourceCodeDebugInfo(); protected: DebugInfoPtr debug_info_; std::string symbol_; std::string full_name_; std::string name_; }; class TracePhi : public TraceInfo { public: explicit TracePhi(const DebugInfoPtr &info) : TraceInfo(info, "phi", "Φ") {} MS_DECLARE_PARENT(TracePhi, TraceInfo); ~TracePhi() override = default; TraceInfoPtr clone() override { return std::make_shared(*shared_from_base()); } }; class TraceIfStmtTrueBranch : public TraceInfo { public: TraceIfStmtTrueBranch(const TraceIfStmtTrueBranch &) = default; explicit TraceIfStmtTrueBranch(const DebugInfoPtr &info) : TraceInfo(info, "if_true", "✓") {} MS_DECLARE_PARENT(TraceIfStmtTrueBranch, TraceInfo); ~TraceIfStmtTrueBranch() override = default; TraceInfoPtr clone() override { return std::make_shared(*shared_from_base()); } }; class TraceIfStmtFalseBranch : public TraceInfo { public: TraceIfStmtFalseBranch(const TraceIfStmtFalseBranch &) = default; explicit TraceIfStmtFalseBranch(const DebugInfoPtr &info) : TraceInfo(info, "if_false", "✗") {} MS_DECLARE_PARENT(TraceIfStmtFalseBranch, TraceInfo); ~TraceIfStmtFalseBranch() override = default; TraceInfoPtr clone() override { return std::make_shared(*shared_from_base()); } }; class TraceIfStmtAfterBranch : public TraceInfo { public: explicit TraceIfStmtAfterBranch(const DebugInfoPtr &info) : TraceInfo(info, "if_after", "↓") {} MS_DECLARE_PARENT(TraceIfStmtAfterBranch, TraceInfo); ~TraceIfStmtAfterBranch() override = default; TraceInfoPtr clone() override { return std::make_shared(*shared_from_base()); } }; class TraceIfExpTrueBranch : public TraceInfo { public: explicit TraceIfExpTrueBranch(const DebugInfoPtr &info) : TraceInfo(info, "ifexp_true", "↰") {} MS_DECLARE_PARENT(TraceIfExpTrueBranch, TraceInfo); ~TraceIfExpTrueBranch() override = default; TraceInfoPtr clone() override { return std::make_shared(*shared_from_base()); } }; class TraceIfExpFalseBranch : public TraceInfo { public: explicit TraceIfExpFalseBranch(const DebugInfoPtr &info) : TraceInfo(info, "ifexp_false", "↱") {} MS_DECLARE_PARENT(TraceIfExpFalseBranch, TraceInfo); ~TraceIfExpFalseBranch() override = default; TraceInfoPtr clone() override { return std::make_shared(*shared_from_base()); } }; class TraceCopy : public TraceInfo { public: TraceCopy() : TraceInfo(nullptr, "copy", "") {} explicit TraceCopy(const DebugInfoPtr &info) : TraceInfo(info, "copy", "") {} MS_DECLARE_PARENT(TraceCopy, TraceInfo); ~TraceCopy() override = default; TraceInfoPtr clone() override { return std::make_shared(*shared_from_base()); } }; class TraceIterator : public TraceInfo { public: explicit TraceIterator(const DebugInfoPtr &info) : TraceInfo(info, "iterator", "@") {} MS_DECLARE_PARENT(TraceIterator, TraceInfo); ~TraceIterator() override = default; TraceInfoPtr clone() override { return std::make_shared(*shared_from_base()); } }; class TraceWhileHeader : public TraceInfo { public: explicit TraceWhileHeader(const DebugInfoPtr &info) : TraceInfo(info, "while_header", "⤾") {} MS_DECLARE_PARENT(TraceWhileHeader, TraceInfo); ~TraceWhileHeader() override = default; TraceInfoPtr clone() override { return std::make_shared(*shared_from_base()); } }; class TraceWhileBody : public TraceInfo { public: explicit TraceWhileBody(const DebugInfoPtr &info) : TraceInfo(info, "while_body", "⥁") {} MS_DECLARE_PARENT(TraceWhileBody, TraceInfo); ~TraceWhileBody() override = default; TraceInfoPtr clone() override { return std::make_shared(*shared_from_base()); } }; class TraceWhileAfter : public TraceInfo { public: explicit TraceWhileAfter(const DebugInfoPtr &info) : TraceInfo(info, "while_after", "↓") {} MS_DECLARE_PARENT(TraceWhileAfter, TraceInfo); ~TraceWhileAfter() override = default; TraceInfoPtr clone() override { return std::make_shared(*shared_from_base()); } }; class TraceForHeader : public TraceInfo { public: explicit TraceForHeader(const DebugInfoPtr &info) : TraceInfo(info, "for_header", "⤾") {} MS_DECLARE_PARENT(TraceForHeader, TraceInfo); ~TraceForHeader() override = default; TraceInfoPtr clone() override { return std::make_shared(*shared_from_base()); } }; class TraceForBody : public TraceInfo { public: explicit TraceForBody(const DebugInfoPtr &info) : TraceInfo(info, "for_body", "⥁") {} MS_DECLARE_PARENT(TraceForBody, TraceInfo); ~TraceForBody() override = default; TraceInfoPtr clone() override { return std::make_shared(*shared_from_base()); } }; class TraceForAfter : public TraceInfo { public: explicit TraceForAfter(const DebugInfoPtr &info) : TraceInfo(info, "for_after", "↓") {} MS_DECLARE_PARENT(TraceForAfter, TraceInfo); ~TraceForAfter() override = default; TraceInfoPtr clone() override { return std::make_shared(*shared_from_base()); } }; class TraceLoopEnd : public TraceInfo { public: explicit TraceLoopEnd(const DebugInfoPtr &info) : TraceInfo(info, "loop_end", "↓↓") {} MS_DECLARE_PARENT(TraceLoopEnd, TraceInfo); ~TraceLoopEnd() override = default; TraceInfoPtr clone() override { return std::make_shared(*shared_from_base()); } }; class TraceEquiv : public TraceInfo { public: explicit TraceEquiv(const DebugInfoPtr &info) : TraceInfo(info, "equiv", "equiv") {} MS_DECLARE_PARENT(TraceEquiv, TraceInfo); ~TraceEquiv() override = default; TraceInfoPtr clone() override { return std::make_shared(*shared_from_base()); } }; class TraceGradFpropApp : public TraceInfo { public: TraceGradFpropApp() : TraceInfo(nullptr, "grad_fprop_app", "▲") {} explicit TraceGradFpropApp(const DebugInfoPtr &info) : TraceInfo(info, "grad_fprop_app", "▲") {} MS_DECLARE_PARENT(TraceGradFpropApp, TraceInfo); ~TraceGradFpropApp() override = default; TraceInfoPtr clone() override { return std::make_shared(*shared_from_base()); } }; class TraceGradBpropApp : public TraceInfo { public: TraceGradBpropApp() : TraceInfo(nullptr, "grad_bprop_app", "▼") {} explicit TraceGradBpropApp(const DebugInfoPtr &info) : TraceInfo(info, "grad_bprop_app", "▼") {} MS_DECLARE_PARENT(TraceGradBpropApp, TraceInfo); ~TraceGradBpropApp() override = default; TraceInfoPtr clone() override { return std::make_shared(*shared_from_base()); } }; class TraceGradFprop : public TraceInfo { public: TraceGradFprop() : TraceInfo(nullptr, "grad_fprop", "▶") {} explicit TraceGradFprop(const DebugInfoPtr &info) : TraceInfo(info, "grad_fprop", "▶") {} MS_DECLARE_PARENT(TraceGradFprop, TraceInfo); ~TraceGradFprop() override = default; TraceInfoPtr clone() override { return std::make_shared(*shared_from_base()); } }; class TraceGradBprop : public TraceInfo { public: TraceGradBprop() : TraceInfo(nullptr, "grad_bprop", "◀") {} explicit TraceGradBprop(const DebugInfoPtr &info) : TraceInfo(info, "grad_bprop", "◀") {} MS_DECLARE_PARENT(TraceGradBprop, TraceInfo); ~TraceGradBprop() override = default; TraceInfoPtr clone() override { return std::make_shared(*shared_from_base()); } }; class TraceGradSens : public TraceInfo { public: TraceGradSens() : TraceInfo(nullptr, "grad_sens", "∇") {} explicit TraceGradSens(const DebugInfoPtr &info) : TraceInfo(info, "grad_sens", "∇") {} MS_DECLARE_PARENT(TraceGradSens, TraceInfo); ~TraceGradSens() override = default; TraceInfoPtr clone() override { return std::make_shared(*shared_from_base()); } }; class TraceSpecialize : public TraceInfo { public: explicit TraceSpecialize(const std::string &counter) : TraceInfo(nullptr, "specialize", "") { counter_ = counter; } MS_DECLARE_PARENT(TraceSpecialize, TraceInfo); std::string name() override { return full_name_ + counter_; } std::string symbol() override { return counter_ + "_"; } std::string full_name() override { return full_name_ + counter_ + "_"; } ~TraceSpecialize() override = default; TraceInfoPtr clone() override { return std::make_shared(*shared_from_base()); } std::string counter_; }; class TraceGradOperation : public TraceInfo { public: explicit TraceGradOperation(const DebugInfoPtr &info) : TraceInfo(info, "grad_ops", "") {} MS_DECLARE_PARENT(TraceGradOperation, TraceInfo); ~TraceGradOperation() override = default; TraceInfoPtr clone() override { return std::make_shared(*shared_from_base()); } }; class TraceForceBool : public TraceInfo { public: explicit TraceForceBool(const DebugInfoPtr &info) : TraceInfo(info, "force_bool", "") {} MS_DECLARE_PARENT(TraceForceBool, TraceInfo); ~TraceForceBool() override = default; TraceInfoPtr clone() override { return std::make_shared(*shared_from_base()); } }; class TraceForceWhileCond : public TraceInfo { public: explicit TraceForceWhileCond(const DebugInfoPtr &info) : TraceInfo(info, "force_while_cond", "") {} MS_DECLARE_PARENT(TraceForceWhileCond, TraceInfo); ~TraceForceWhileCond() override = default; TraceInfoPtr clone() override { return std::make_shared(*shared_from_base()); } }; class TraceExpandJ : public TraceInfo { public: explicit TraceExpandJ(const DebugInfoPtr &info) : TraceInfo(info, "expand_j", "") {} MS_DECLARE_PARENT(TraceExpandJ, TraceInfo); ~TraceExpandJ() override = default; TraceInfoPtr clone() override { return std::make_shared(*shared_from_base()); } }; class TraceGenMetaFuncGraph : public TraceInfo { public: explicit TraceGenMetaFuncGraph(const DebugInfoPtr &info) : TraceInfo(info, "GenMetaFuncGraph", "") {} MS_DECLARE_PARENT(TraceGenMetaFuncGraph, TraceInfo); ~TraceGenMetaFuncGraph() override = default; TraceInfoPtr clone() override { return std::make_shared(*shared_from_base()); } }; class TraceEvaluatorGenGraph : public TraceInfo { public: explicit TraceEvaluatorGenGraph(const DebugInfoPtr &info) : TraceInfo(info, "GenEvaluatorGraph", "") {} MS_DECLARE_PARENT(TraceEvaluatorGenGraph, TraceInfo); ~TraceEvaluatorGenGraph() override = default; TraceInfoPtr clone() override { return std::make_shared(*shared_from_base()); } }; class TraceResolve : public TraceInfo { public: explicit TraceResolve(const DebugInfoPtr &info) : TraceInfo(info, "resolve", "") {} MS_DECLARE_PARENT(TraceResolve, TraceInfo); ~TraceResolve() override = default; TraceInfoPtr clone() override { return std::make_shared(*shared_from_base()); } }; class TraceTransform : public TraceInfo { public: TraceTransform() : TraceInfo(nullptr, "transform", "") { transform_name_ = ""; } explicit TraceTransform(const std::string &transform_name) : TraceInfo(nullptr, "transform", "") { transform_name_ = transform_name; } std::string full_name() override { return full_name_ + transform_name_; } MS_DECLARE_PARENT(TraceTransform, TraceInfo); std::string symbol() override { if (transform_name_.empty()) { return ""; } return transform_name_ + "_"; } ~TraceTransform() override = default; TraceInfoPtr clone() override { return std::make_shared(*shared_from_base()); } std::string transform_name_; }; class TraceGenerateVarArg : public TraceInfo { public: explicit TraceGenerateVarArg(const DebugInfoPtr &info) : TraceInfo(info, "GenerateVarArg", "") {} MS_DECLARE_PARENT(TraceGenerateVarArg, TraceInfo); ~TraceGenerateVarArg() override = default; TraceInfoPtr clone() override { return std::make_shared(*shared_from_base()); } }; class TraceGenerateKwArg : public TraceInfo { public: explicit TraceGenerateKwArg(const DebugInfoPtr &info) : TraceInfo(info, "GenerateKwArg", "") {} MS_DECLARE_PARENT(TraceGenerateKwArg, TraceInfo); ~TraceGenerateKwArg() override = default; TraceInfoPtr clone() override { return std::make_shared(*shared_from_base()); } }; class TraceTrasformK : public TraceInfo { public: explicit TraceTrasformK(const DebugInfoPtr &info) : TraceInfo(info, "TraceTrasformK", "") {} MS_DECLARE_PARENT(TraceTrasformK, TraceInfo); ~TraceTrasformK() override = default; TraceInfoPtr clone() override { return std::make_shared(*shared_from_base()); } }; class TracePartialTransform : public TraceInfo { public: explicit TracePartialTransform(const DebugInfoPtr &info) : TraceInfo(info, "PartialTransform", "") {} MS_DECLARE_PARENT(TracePartialTransform, TraceInfo); ~TracePartialTransform() override = default; TraceInfoPtr clone() override { return std::make_shared(*shared_from_base()); } }; class TraceGetEnv : public TraceInfo { public: explicit TraceGetEnv(const DebugInfoPtr &info) : TraceInfo(info, "get_env", "") {} MS_DECLARE_PARENT(TraceGetEnv, TraceInfo); ~TraceGetEnv() override = default; TraceInfoPtr clone() override { return std::make_shared(*shared_from_base()); } }; class TraceDoSignature : public TraceInfo { public: explicit TraceDoSignature(const DebugInfoPtr &info) : TraceInfo(info, "DoSignature", "") {} MS_DECLARE_PARENT(TraceDoSignature, TraceInfo); ~TraceDoSignature() override = default; TraceInfoPtr clone() override { return std::make_shared(*shared_from_base()); } }; class TraceCombileLikeGraphs : public TraceInfo { public: TraceCombileLikeGraphs() : TraceInfo(nullptr, "CombileLike", "L-") {} explicit TraceCombileLikeGraphs(const DebugInfoPtr &info) : TraceInfo(info, "CombileLike", "L-") {} MS_DECLARE_PARENT(TraceCombileLikeGraphs, TraceInfo); ~TraceCombileLikeGraphs() override = default; TraceInfoPtr clone() override { return std::make_shared(*shared_from_base()); } }; } // namespace mindspore #endif // MINDSPORE_CCSRC_DEBUG_TRACE_INFO_H_