void YEqUCGs::insert(VariablePtr auxvar, CGraphPtr cg) { VariablePtr x; assert(auxvar && cg); x = *(cg->varsBegin()); op_.push_back(cg->getOut()->getOp()); hash_.push_back(evalHash_(cg->getOut(), 1)); y_.push_back(auxvar); x_.push_back(x); cg_.push_back(cg); }
VariablePtr YEqUCGs::findY(CGraphPtr cg) { double hash = evalHash_(cg->getOut(), 1); OpCode op = cg->getOut()->getOp(); VariablePtr x = *(cg->varsBegin()); for (UInt i=0; i<y_.size(); ++i) { if (fabs(hash-hash_[i])<1e-10 && op == op_[i] && x == x_[i] && cg->isIdenticalTo(cg_[i])) { return y_[i]; } } return VariablePtr(); }