void NodeValue::replaceAllUsesOfWith(NodeValue v) { if (v.getNode()) { assert(getType() == v.getType() && "Replacing value with the wrong type"); } auto &users = node_->getUsers(); llvm::SmallVector<NodeUse, 4> usersVec(users.begin(), users.end()); for (auto &U : usersVec) { NodeValue *site = U.get(); assert(site->getNode() == node_ && "Invalid user"); if (site->getResNo() == getResNo()) { site->setOperand(v.getNode(), v.getResNo()); } } }
void NodeUse::setOperand(NodeValue &other) { if (other && site_->getNode()) { assert(site_->getType() == other.getType() && "Setting operand to a node with a different type"); } site_->setOperand(other.getNode(), other.getResNo()); }
bool UnownedNodeValueMap::count(NodeValue from) { for (auto &E : entries_) { auto &F = E.first; if (F.first == from.getNode() && F.second == from.getResNo()) { return true; } } return false; }
NodeValue UnownedNodeValueMap::get(NodeValue from) { for (auto &E : entries_) { auto &F = E.first; auto &T = E.second; if (F.first == from.getNode() && F.second == from.getResNo()) { return NodeValue(T.first, T.second); } } llvm_unreachable("Invalid node"); return NodeValue(nullptr, 0); }
void UnownedNodeValueMap::insert(NodeValue from, NodeValue to) { entries_.push_front( {{from.getNode(), from.getResNo()}, {to.getNode(), to.getResNo()}}); }