// Copyright (c) 2019 PaddlePaddle Authors. All Rights Reserved. // // 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. #include "lite/kernels/bm/bridges/utility.h" #include //NOLINT #include namespace paddle { namespace lite { namespace subgraph { namespace bm { std::string UniqueName(const std::string& prefix) { static std::mutex counter_mtx; static std::unordered_map counter_map; std::unique_lock counter_lck(counter_mtx); int counter = 1; auto it = counter_map.find(prefix); if (it == counter_map.end()) { counter_map[prefix] = counter; } else { counter = ++(it->second); } return prefix + "_" + paddle::lite::to_string(counter); } bool HasInputArg(const OpInfo* op_info, const Scope* scope, const std::string& argname) { auto iarg_names = op_info->input_argnames(); if (std::find(iarg_names.begin(), iarg_names.end(), argname) != iarg_names.end()) { auto inputs = op_info->Input(argname); if (inputs.empty()) { return false; } auto var_name = inputs.front(); auto var = scope->FindVar(var_name); return var != nullptr; } else { return false; } } } // namespace bm } // namespace subgraph } // namespace lite } // namespace paddle