| 214 | } |
| 215 | |
| 216 | void OperatorNodeBase::add_input( |
| 217 | std::initializer_list<VarNode*> list, AddInputSortType sort_type) { |
| 218 | mgb_assert( |
| 219 | !m_inserted_in_graph && !m_node_prop.valid(), |
| 220 | "add input on an opr that has been inserted into graph"); |
| 221 | auto start_size = m_input.size(); |
| 222 | for (auto ptr : list) { |
| 223 | mgb_assert( |
| 224 | ptr && ptr->owner_graph() == owner_graph(), |
| 225 | "input(%s) does not belong to same graph", ptr->cname()); |
| 226 | mgb_assert( |
| 227 | !ptr->contain_flag(VarNode::Flag::VOLATILE_CONTENT), |
| 228 | "use input of volatile content: %s", cg::dump_var_info({ptr}).c_str()); |
| 229 | m_input.push_back(ptr); |
| 230 | } |
| 231 | if (sort_type != AddInputSortType::NONE) { |
| 232 | auto begin = m_input.begin(), end = m_input.end(); |
| 233 | if (sort_type == AddInputSortType::CUR_ADDED) |
| 234 | begin += start_size; |
| 235 | auto cmp = [](VarNode* a, VarNode* b) { return a->id() < b->id(); }; |
| 236 | small_sort(begin, end, cmp); |
| 237 | } |
| 238 | } |
| 239 | |
| 240 | VarNode* OperatorNodeBase::add_output(const Maybe<std::string>& name) { |
| 241 | mgb_assert( |