summaryrefslogtreecommitdiffstats
path: root/mlir/lib/IR/PatternMatch.cpp
diff options
context:
space:
mode:
authorRiver Riddle <riverriddle@google.com>2019-12-06 20:06:48 -0800
committerA. Unique TensorFlower <gardener@tensorflow.org>2019-12-06 20:07:23 -0800
commit9d1a0c72b4ae54b97809966257bd1b9cb3140dfe (patch)
treefcbbbae63f398d3ed68ea4e3c788c4639fc7a15e /mlir/lib/IR/PatternMatch.cpp
parentd27bc1db6a64b6caaf7f64d62a459a595773906b (diff)
downloadbcm5719-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.cpp17
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 &region, 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);
OpenPOWER on IntegriCloud