forked from OSchip/llvm-project
[mlir][AsmPrinter] Change value numbering for local scope to be the next isolated operation.
Summary: This revision updates the value numbering when printing to number from the next parent operation that is isolated from above. This is the highest level to number from that still ensures thread-safety. This revision also changes the behavior of Operator::operator<< to use local scope to avoid thread races when numbering operations. Differential Revision: https://reviews.llvm.org/D77525
This commit is contained in:
parent
0731132888
commit
ae9edbcea2
|
@ -605,7 +605,7 @@ private:
|
|||
};
|
||||
|
||||
inline raw_ostream &operator<<(raw_ostream &os, Operation &op) {
|
||||
op.print(os);
|
||||
op.print(os, OpPrintingFlags().useLocalScope());
|
||||
return os;
|
||||
}
|
||||
|
||||
|
|
|
@ -2344,23 +2344,23 @@ void Value::printAsOperand(raw_ostream &os, AsmState &state) {
|
|||
}
|
||||
|
||||
void Operation::print(raw_ostream &os, OpPrintingFlags flags) {
|
||||
// Handle top-level operations or local printing.
|
||||
if (!getParent() || flags.shouldUseLocalScope()) {
|
||||
AsmState state(this);
|
||||
OperationPrinter(os, flags, state.getImpl()).print(this);
|
||||
return;
|
||||
}
|
||||
// Find the operation to number from based upon the provided flags.
|
||||
Operation *printedOp = this;
|
||||
bool shouldUseLocalScope = flags.shouldUseLocalScope();
|
||||
do {
|
||||
// If we are printing local scope, stop at the first operation that is
|
||||
// isolated from above.
|
||||
if (shouldUseLocalScope && printedOp->isKnownIsolatedFromAbove())
|
||||
break;
|
||||
|
||||
Operation *parentOp = getParentOp();
|
||||
if (!parentOp) {
|
||||
os << "<<UNLINKED OPERATION>>\n";
|
||||
return;
|
||||
}
|
||||
// Get the top-level op.
|
||||
while (auto *nextOp = parentOp->getParentOp())
|
||||
parentOp = nextOp;
|
||||
// Otherwise, traverse up to the next parent.
|
||||
Operation *parentOp = printedOp->getParentOp();
|
||||
if (!parentOp)
|
||||
break;
|
||||
printedOp = parentOp;
|
||||
} while (true);
|
||||
|
||||
AsmState state(parentOp);
|
||||
AsmState state(printedOp);
|
||||
print(os, state, flags);
|
||||
}
|
||||
void Operation::print(raw_ostream &os, AsmState &state, OpPrintingFlags flags) {
|
||||
|
|
Loading…
Reference in New Issue