1 /** 2 * Copyright 2023 Huawei Technologies Co., Ltd 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 #ifndef MINDSPORE_PI_JIT_ABSTRACT_TYPE_DEDUCER_H_ 17 #define MINDSPORE_PI_JIT_ABSTRACT_TYPE_DEDUCER_H_ 18 19 #include <map> 20 #include <memory> 21 #include <string> 22 #include "pipeline/jit/pi/graph_compiler/pi_ir/custom_nodes.h" 23 #include "pipeline/jit/pi/graph_compiler/pi_ir/ir_visitor.h" 24 25 namespace mindspore { 26 namespace pijit { 27 class AbstractTypeDeducer : public ir::IRVisitor { 28 public: 29 /// \brief The default constructor for Type. AbstractTypeDeducer()30 AbstractTypeDeducer() {} 31 32 /// \brief Destructor. 33 virtual ~AbstractTypeDeducer() = default; 34 35 /// This method will deduce all nodes of function 36 static void Deduce(const ir::FunctionNodePtr &func, const ir::py::tuple &args, const ir::py::dict &kwargs); 37 38 // overloadable visit function. 39 void Visit_(const ir::RefNodePtr &node) override; 40 void Visit_(const ir::ValuePtr &node) override; 41 void Visit_(const ir::CastNodePtr &node) override; 42 void Visit_(const ir::DeleteNodePtr &node) override; 43 void Visit_(const ir::GetNodePtr &node) override; 44 void Visit_(const ir::InvertNodePtr &node) override; 45 void Visit_(const ir::NegativeNodePtr &node) override; 46 void Visit_(const ir::NotNodePtr &node) override; 47 void Visit_(const ir::ReturnNodePtr &node) override; 48 void Visit_(const ir::LoadValueNodePtr &node) override; 49 void Visit_(const ir::UnaryOperationPtr &node) override; 50 void Visit_(const ir::AddNodePtr &node) override; 51 void Visit_(const ir::SubNodePtr &node) override; 52 void Visit_(const ir::MulNodePtr &node) override; 53 void Visit_(const ir::DivNodePtr &node) override; 54 void Visit_(const ir::BitwiseNodePtr &node) override; 55 void Visit_(const ir::CompareNodePtr &node) override; 56 void Visit_(const ir::ContainsNodePtr &node) override; 57 void Visit_(const ir::IsNodePtr &node) override; 58 void Visit_(const ir::JumpNodePtr &node) override; 59 void Visit_(const ir::StoreNodePtr &node) override; 60 void Visit_(const ir::UpdateNodePtr &node) override; 61 void Visit_(const ir::BinaryOperationPtr &node) override; 62 void Visit_(const ir::LoadFieldNodePtr &node) override; 63 void Visit_(const ir::BuildNodePtr &node) override; 64 void Visit_(const ir::CallNodePtr &node) override; 65 void Visit_(const ir::NaryWithFlagNodePtr &node) override; 66 void Visit_(const ir::FormatNodePtr &node) override; 67 void Visit_(const ir::NaryOperationPtr &node) override; 68 void Visit_(const ir::FunctionNodePtr &node) override; 69 void Visit_(const ir::IfNodePtr &node) override; 70 void Visit_(const ir::WhileNodePtr &node) override; 71 void Visit_(const ir::AttrNodePtr &node) override; 72 void Visit_(const ir::PairNodePtr &node) override; 73 void Visit_(const ir::SubscrNodePtr &node) override; 74 75 private: 76 std::map<std::string, ir::NodePtr> assigned_local_vars_; 77 std::map<std::string, ir::NodePtr> assigned_global_vars_; 78 }; 79 80 using AbstractTypeDeducerPtr = std::shared_ptr<AbstractTypeDeducer>; 81 } // namespace pijit 82 } // namespace mindspore 83 84 #endif // MINDSPORE_PI_JIT_ABSTRACT_TYPE_DEDUCER_H_ 85