diff options
Diffstat (limited to 'mlir/lib/Transforms/SymbolDCE.cpp')
| -rw-r--r-- | mlir/lib/Transforms/SymbolDCE.cpp | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/mlir/lib/Transforms/SymbolDCE.cpp b/mlir/lib/Transforms/SymbolDCE.cpp index 56997b6d2af7..5d94245489c0 100644 --- a/mlir/lib/Transforms/SymbolDCE.cpp +++ b/mlir/lib/Transforms/SymbolDCE.cpp @@ -24,6 +24,7 @@ struct SymbolDCE : public SymbolDCEBase<SymbolDCE> { /// `symbolTableIsHidden` is true if this symbol table is known to be /// unaccessible from operations in its parent regions. LogicalResult computeLiveness(Operation *symbolTableOp, + SymbolTableCollection &symbolTable, bool symbolTableIsHidden, DenseSet<Operation *> &liveSymbols); }; @@ -49,7 +50,9 @@ void SymbolDCE::runOnOperation() { // Compute the set of live symbols within the symbol table. DenseSet<Operation *> liveSymbols; - if (failed(computeLiveness(symbolTableOp, symbolTableIsHidden, liveSymbols))) + SymbolTableCollection symbolTable; + if (failed(computeLiveness(symbolTableOp, symbolTable, symbolTableIsHidden, + liveSymbols))) return signalPassFailure(); // After computing the liveness, delete all of the symbols that were found to @@ -71,6 +74,7 @@ void SymbolDCE::runOnOperation() { /// `symbolTableIsHidden` is true if this symbol table is known to be /// unaccessible from operations in its parent regions. LogicalResult SymbolDCE::computeLiveness(Operation *symbolTableOp, + SymbolTableCollection &symbolTable, bool symbolTableIsHidden, DenseSet<Operation *> &liveSymbols) { // A worklist of live operations to propagate uses from. @@ -104,7 +108,7 @@ LogicalResult SymbolDCE::computeLiveness(Operation *symbolTableOp, // symbol, or if it is a private symbol. SymbolOpInterface symbol = dyn_cast<SymbolOpInterface>(op); bool symIsHidden = symbolTableIsHidden || !symbol || symbol.isPrivate(); - if (failed(computeLiveness(op, symIsHidden, liveSymbols))) + if (failed(computeLiveness(op, symbolTable, symIsHidden, liveSymbols))) return failure(); } @@ -120,7 +124,7 @@ LogicalResult SymbolDCE::computeLiveness(Operation *symbolTableOp, for (const SymbolTable::SymbolUse &use : *uses) { // Lookup the symbols referenced by this use. resolvedSymbols.clear(); - if (failed(SymbolTable::lookupSymbolIn( + if (failed(symbolTable.lookupSymbolIn( op->getParentOp(), use.getSymbolRef(), resolvedSymbols))) { return use.getUser()->emitError() << "unable to resolve reference to symbol " |
