Esempio n. 1
0
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);
}
Esempio n. 2
0
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();
}