void handleChangedOperand(void *Ref, Metadata *New);
void resolve();
+ void resolveAfterOperandChange(Metadata *Old, Metadata *New);
};
/// \brief Forward declaration of metadata.
Uses->resolveAllUses();
}
+void GenericMDNode::resolveAfterOperandChange(Metadata *Old, Metadata *New) {
+ assert(SubclassData32 != 0 && "Expected unresolved operands");
+
+ // Check if the last unresolved operand has just been resolved; if so,
+ // resolve this as well.
+ if (isOperandUnresolved(Old)) {
+ if (!isOperandUnresolved(New)) {
+ if (!--SubclassData32)
+ resolve();
+ }
+ } else {
+ // Operands shouldn't become unresolved.
+ assert(isOperandUnresolved(New) && "Operand just became unresolved");
+ }
+}
+
void GenericMDNode::resolveCycles() {
if (isResolved())
return;
if (I == Store.end()) {
Store.insert(this);
- if (!isResolved()) {
- assert(SubclassData32 != 0 && "Expected unresolved operands");
-
- // Check if the last unresolved operand has just been resolved; if so,
- // resolve this as well.
- if (isOperandUnresolved(Old)) {
- if (!isOperandUnresolved(New)) {
- if (!--SubclassData32)
- resolve();
- }
- } else {
- // Operands shouldn't become unresolved.
- assert(isOperandUnresolved(New) && "Operand just became unresolved");
- }
- }
+ if (!isResolved())
+ resolveAfterOperandChange(Old, New);
return;
}