void TR::RegDepCopyRemoval::updateSingleRegDep(TR_GlobalRegisterNumber reg, TR::Node *newValueNode) { RegDepInfo &dep = getRegDepInfo(reg); TR_ASSERT(_treetop->getNode()->getOpCodeValue() != TR::BBStart, "attempted to change %s in incoming GlRegDeps on BBStart n%un\n", registerName(reg), _treetop->getNode()->getGlobalIndex()); TR::Node *prevChild = _regDeps->getChild(dep.childIndex); TR_ASSERT(prevChild == dep.node, "childIndex and node inconsistent in RegDepInfo for %s\n", registerName(reg)); TR_ASSERT(prevChild->getGlobalRegisterNumber() == reg, "childIndex and reg inconsistent in RegDepInfo for %s\n", registerName(reg)); if (newValueNode->getOpCode().isLoadReg() && newValueNode->getGlobalRegisterNumber() == reg) { _regDeps->setAndIncChild(dep.childIndex, newValueNode); } else { TR::Node *newOutgoingPassThroughNode = TR::Node::create(TR::PassThrough, 1, newValueNode); newOutgoingPassThroughNode->setGlobalRegisterNumber(reg); _regDeps->setAndIncChild(dep.childIndex, newOutgoingPassThroughNode); } prevChild->recursivelyDecReferenceCount(); rememberNodeChoice(reg, newValueNode); }