!65 fix bug of global variable initialization order is not guaranteed during compilation

Merge pull request !65 from mxm/for_prim_map_init
pull/65/MERGE
mindspore-ci-bot 5 years ago committed by Gitee
commit 086edc133f

File diff suppressed because it is too large Load Diff

@ -296,38 +296,35 @@ EvaluatorPtr GetPrimEvaluator(const PrimitivePtr &prim, const AnalysisEnginePtr
if (prim->HasPyEvaluator()) {
auto prim_py = dyn_cast<PrimitivePy>(prim);
if (prim_py != nullptr) {
evaluator = std::make_shared<PythonPrimEvaluator>(prim_py);
} else {
MS_LOG(EXCEPTION) << "The primitive with python evaluator should be a python primitive.";
return std::make_shared<PythonPrimEvaluator>(prim_py);
}
MS_LOG(EXCEPTION) << "The primitive with python evaluator should be a python primitive.";
}
if (prim->isa<PrimitivePy>() || prim->HasAttr()) {
if (engine == nullptr) {
(void)GetPrimEvaluatorConstructors();
}
} else if (prim->isa<PrimitivePy>() || prim->HasAttr()) {
// If a primitive may have attr, try to create a new evaluator.
StandardPrimitiveEvalImpl eval_impl = GetPrimitiveInferImpl(prim);
if (eval_impl != nullptr) {
std::shared_ptr<StandardPrimEvaluator> standard_evaluator =
std::make_shared<StandardPrimEvaluator>(prim, eval_impl);
evaluator = standard_evaluator;
return std::make_shared<StandardPrimEvaluator>(prim, eval_impl);
}
}
if (evaluator == nullptr) {
if (engine == nullptr) {
// If engine is nullptr, get constructor from default.
const PrimEvaluatorMap &prim_evaluator_map = GetPrimEvaluatorConstructors();
auto iter = prim_evaluator_map.find(prim);
if (iter == prim_evaluator_map.end()) {
evaluator = nullptr;
} else {
evaluator = iter->second;
}
} else {
// If engine is given, get constructor from engine resource.
const PrimEvaluatorMap &prim_evaluator_map = engine->PrimConstructors();
auto iter = prim_evaluator_map.find(prim);
if (iter == prim_evaluator_map.end()) {
evaluator = nullptr;
} else {
evaluator = iter->second;
}
if (engine == nullptr) {
// If engine is nullptr, get constructor from default.
const PrimEvaluatorMap &prim_evaluator_map = GetPrimEvaluatorConstructors();
auto iter = prim_evaluator_map.find(prim);
if (iter != prim_evaluator_map.end()) {
evaluator = iter->second;
}
} else {
// If engine is given, get constructor from engine resource.
const PrimEvaluatorMap &prim_evaluator_map = engine->PrimConstructors();
auto iter = prim_evaluator_map.find(prim);
if (iter != prim_evaluator_map.end()) {
evaluator = iter->second;
}
}
if (evaluator == nullptr) {

Loading…
Cancel
Save