diff options
| author | River Riddle <riverriddle@google.com> | 2019-12-06 20:06:48 -0800 |
|---|---|---|
| committer | A. Unique TensorFlower <gardener@tensorflow.org> | 2019-12-06 20:07:23 -0800 |
| commit | 9d1a0c72b4ae54b97809966257bd1b9cb3140dfe (patch) | |
| tree | fcbbbae63f398d3ed68ea4e3c788c4639fc7a15e /mlir/lib/IR/PatternMatch.cpp | |
| parent | d27bc1db6a64b6caaf7f64d62a459a595773906b (diff) | |
| download | bcm5719-llvm-9d1a0c72b4ae54b97809966257bd1b9cb3140dfe.tar.gz bcm5719-llvm-9d1a0c72b4ae54b97809966257bd1b9cb3140dfe.zip | |
Add a new ValueRange class.
This class represents a generic abstraction over the different ways to represent a range of Values: ArrayRef<Value *>, operand_range, result_range. This class will allow for removing the many instances of explicit SmallVector<Value *, N> construction. It has the same memory cost as ArrayRef, and only suffers cost from indexing(if+elsing the different underlying representations).
This change only updates a few of the existing usages, with more to be changed in followups; e.g. 'build' API.
PiperOrigin-RevId: 284307996
Diffstat (limited to 'mlir/lib/IR/PatternMatch.cpp')
| -rw-r--r-- | mlir/lib/IR/PatternMatch.cpp | 17 |
1 files changed, 7 insertions, 10 deletions
diff --git a/mlir/lib/IR/PatternMatch.cpp b/mlir/lib/IR/PatternMatch.cpp index b8ecab97552..3887a0308b0 100644 --- a/mlir/lib/IR/PatternMatch.cpp +++ b/mlir/lib/IR/PatternMatch.cpp @@ -85,8 +85,8 @@ PatternRewriter::~PatternRewriter() { /// clients can specify a list of other nodes that this replacement may make /// (perhaps transitively) dead. If any of those ops are dead, this will /// remove them as well. -void PatternRewriter::replaceOp(Operation *op, ArrayRef<Value *> newValues, - ArrayRef<Value *> valuesToRemoveIfDead) { +void PatternRewriter::replaceOp(Operation *op, ValueRange newValues, + ValueRange valuesToRemoveIfDead) { // Notify the rewriter subclass that we're about to replace this root. notifyRootReplaced(op); @@ -114,7 +114,7 @@ void PatternRewriter::eraseOp(Operation *op) { /// 'argValues' is used to replace the block arguments of 'source' after /// merging. void PatternRewriter::mergeBlocks(Block *source, Block *dest, - ArrayRef<Value *> argValues) { + ValueRange argValues) { assert(llvm::all_of(source->getPredecessors(), [dest](Block *succ) { return succ == dest; }) && "expected 'source' to have no predecessors or only 'dest'"); @@ -141,15 +141,12 @@ Block *PatternRewriter::splitBlock(Block *block, Block::iterator before) { /// op and newOp are known to have the same number of results, replace the /// uses of op with uses of newOp void PatternRewriter::replaceOpWithResultsOfAnotherOp( - Operation *op, Operation *newOp, ArrayRef<Value *> valuesToRemoveIfDead) { + Operation *op, Operation *newOp, ValueRange valuesToRemoveIfDead) { assert(op->getNumResults() == newOp->getNumResults() && "replacement op doesn't match results of original op"); if (op->getNumResults() == 1) return replaceOp(op, newOp->getResult(0), valuesToRemoveIfDead); - - SmallVector<Value *, 8> newResults(newOp->getResults().begin(), - newOp->getResults().end()); - return replaceOp(op, newResults, valuesToRemoveIfDead); + return replaceOp(op, newOp->getResults(), valuesToRemoveIfDead); } /// Move the blocks that belong to "region" before the given position in @@ -190,8 +187,8 @@ void PatternRewriter::cloneRegionBefore(Region ®ion, Block *before) { /// The opsToRemoveIfDead list is an optional list of nodes that the rewriter /// should remove if they are dead at this point. /// -void PatternRewriter::updatedRootInPlace( - Operation *op, ArrayRef<Value *> valuesToRemoveIfDead) { +void PatternRewriter::updatedRootInPlace(Operation *op, + ValueRange valuesToRemoveIfDead) { // Notify the rewriter subclass that we're about to replace this root. notifyRootUpdated(op); |

