Integrate llvm/llvm-project@c33fd3b47faa (#12320)
* Reset third_party/llvm-project:
c33fd3b47faae130518d2217c66da75af0e969b3 (2023-02-22 11:26:41 +0000):
[AArch64] Lower all fp zero buildvectors through BUILD_VECTOR.
* mlir-hlo: 23fc8f581bc602786091ffe711c99ee5339f3e18
* tensorflow: e22c3226477d309aa591cc858f4d1c01fa598721
benchmarks: x86_64, cuda, comp-stats
---------
Co-authored-by: Matthias Springer <me@m-sp.org>
diff --git a/compiler/src/iree/compiler/Dialect/Flow/IR/FlowOpFolders.cpp b/compiler/src/iree/compiler/Dialect/Flow/IR/FlowOpFolders.cpp
index b7d26bd..c5b22c9 100644
--- a/compiler/src/iree/compiler/Dialect/Flow/IR/FlowOpFolders.cpp
+++ b/compiler/src/iree/compiler/Dialect/Flow/IR/FlowOpFolders.cpp
@@ -318,9 +318,12 @@
mixedOffsets.assign(op.getMixedOffsets());
mixedSizes.assign(op.getMixedSizes());
mixedStrides.assign(op.getMixedStrides());
- canonicalizeSubViewPart(mixedOffsets, ShapedType::isDynamic);
- canonicalizeSubViewPart(mixedSizes, ShapedType::isDynamic);
- canonicalizeSubViewPart(mixedStrides, ShapedType::isDynamic);
+ Builder builder(op.getContext());
+ if (failed(foldDynamicIndexList(builder, mixedOffsets)) &&
+ failed(foldDynamicIndexList(builder, mixedSizes)) &&
+ failed(foldDynamicIndexList(builder, mixedStrides))) {
+ return failure();
+ }
// Drop out the same dimensions form before.
llvm::SmallVector<int64_t> newShape;
diff --git a/compiler/src/iree/compiler/Dialect/Flow/Transforms/FormDispatchRegions.cpp b/compiler/src/iree/compiler/Dialect/Flow/Transforms/FormDispatchRegions.cpp
index ec723cb..79a62b2 100644
--- a/compiler/src/iree/compiler/Dialect/Flow/Transforms/FormDispatchRegions.cpp
+++ b/compiler/src/iree/compiler/Dialect/Flow/Transforms/FormDispatchRegions.cpp
@@ -63,6 +63,7 @@
TensorDimTrackingRewriter::TensorDimTrackingRewriter(Operation *op)
: IRRewriter(op->getContext()) {
+ setListener(this);
op->walk([&](tensor::DimOp dimOp) { dimOps.insert(dimOp.getOperation()); });
}
SmallVector<tensor::DimOp> TensorDimTrackingRewriter::getTensorDimOps() {
@@ -71,12 +72,12 @@
return result;
}
void TensorDimTrackingRewriter::notifyOperationRemoved(Operation *op) {
- IRRewriter::notifyOperationRemoved(op);
+ IRRewriter::Listener::notifyOperationRemoved(op);
if (isa<tensor::DimOp>(op)) dimOps.erase(op);
}
void TensorDimTrackingRewriter::notifyOperationInserted(Operation *op) {
- IRRewriter::notifyOperationInserted(op);
+ IRRewriter::Listener::notifyOperationInserted(op);
if (isa<tensor::DimOp>(op)) dimOps.insert(op);
}
diff --git a/compiler/src/iree/compiler/Dialect/Flow/Transforms/FormDispatchRegions.h b/compiler/src/iree/compiler/Dialect/Flow/Transforms/FormDispatchRegions.h
index ccac135..f39035f 100644
--- a/compiler/src/iree/compiler/Dialect/Flow/Transforms/FormDispatchRegions.h
+++ b/compiler/src/iree/compiler/Dialect/Flow/Transforms/FormDispatchRegions.h
@@ -14,7 +14,7 @@
namespace mlir {
class Operation;
/// A rewriter that keeps track of all tensor::DimOps.
-class TensorDimTrackingRewriter : public IRRewriter {
+class TensorDimTrackingRewriter : public IRRewriter, IRRewriter::Listener {
public:
/// Create a new rewriter: Scan the given op for tensor::DimOps.
TensorDimTrackingRewriter(Operation *op);
diff --git a/integrations/tensorflow/WORKSPACE b/integrations/tensorflow/WORKSPACE
index 63367a2..9f6d690 100644
--- a/integrations/tensorflow/WORKSPACE
+++ b/integrations/tensorflow/WORKSPACE
@@ -7,7 +7,7 @@
load("@bazel_tools//tools/build_defs/repo:git.bzl", "git_repository")
-TENSORFLOW_COMMIT = "0ffcf238aaf7db5ad5e4448efbb32109a994711a"
+TENSORFLOW_COMMIT = "e22c3226477d309aa591cc858f4d1c01fa598721"
git_repository(
name = "org_tensorflow",
diff --git a/llvm-external-projects/iree-dialects/include/iree-dialects/Dialect/LinalgTransform/StructuredTransformOpsExt.h b/llvm-external-projects/iree-dialects/include/iree-dialects/Dialect/LinalgTransform/StructuredTransformOpsExt.h
index e8e6d30..3151aa3 100644
--- a/llvm-external-projects/iree-dialects/include/iree-dialects/Dialect/LinalgTransform/StructuredTransformOpsExt.h
+++ b/llvm-external-projects/iree-dialects/include/iree-dialects/Dialect/LinalgTransform/StructuredTransformOpsExt.h
@@ -58,7 +58,7 @@
#endif // LLVM_ENABLE_ABI_BREAKING_CHECKS
}
- void notifyRootReplaced(Operation *op, ValueRange newValues) override;
+ void notifyOperationReplaced(Operation *op, ValueRange newValues) override;
void notifyOperationRemoved(Operation *op) override;
diff --git a/llvm-external-projects/iree-dialects/include/iree-dialects/Transforms/Listener.h b/llvm-external-projects/iree-dialects/include/iree-dialects/Transforms/Listener.h
index 41a0972..562c99d 100644
--- a/llvm-external-projects/iree-dialects/include/iree-dialects/Transforms/Listener.h
+++ b/llvm-external-projects/iree-dialects/include/iree-dialects/Transforms/Listener.h
@@ -11,53 +11,7 @@
namespace mlir {
-//===----------------------------------------------------------------------===//
-// RewriteListener
-//===----------------------------------------------------------------------===//
-
-/// This class represents a listener that can be used to hook on to various
-/// rewrite events in an `OpBuilder` or `PatternRewriter`. The class is notified
-/// by when:
-///
-/// - an operation is removed
-/// - an operation is inserted
-/// - an operation is replaced
-/// - a block is created
-///
-/// Listeners can be used to track IR mutations throughout pattern rewrites.
-struct RewriteListener {
- virtual ~RewriteListener();
-
- /// These are the callback methods that subclasses can choose to implement if
- /// they would like to be notified about certain types of mutations.
-
- /// Notification handler for when an operation is inserted into the builder.
- /// op` is the operation that was inserted.
- virtual void notifyOperationInserted(Operation *op) {}
-
- /// Notification handler for when a block is created using the builder.
- /// `block` is the block that was created.
- virtual void notifyBlockCreated(Block *block) {}
-
- /// Notification handler for when the specified operation is about to be
- /// replaced with another set of operations. This is called before the uses of
- /// the operation have been replaced with the specific values.
- virtual void notifyRootReplaced(Operation *op, ValueRange newValues) {}
-
- /// Notification handler for when an the specified operation is about to be
- /// deleted. At this point, the operation has zero uses.
- virtual void notifyOperationRemoved(Operation *op) {}
-
- /// Notify the listener that a pattern failed to match the given operation,
- /// and provide a callback to populate a diagnostic with the reason why the
- /// failure occurred. This method allows for derived listeners to optionally
- /// hook into the reason why a rewrite failed, and display it to users.
- virtual LogicalResult
- notifyMatchFailure(Location loc,
- function_ref<void(Diagnostic &)> reasonCallback) {
- return failure();
- }
-};
+using RewriteListener = RewriterBase::Listener;
//===----------------------------------------------------------------------===//
// ListenerList
@@ -74,7 +28,9 @@
/// Send notification of a block being created to all listeners.
void notifyBlockCreated(Block *block) override;
/// Send notification that an operation has been replaced to all listeners.
- void notifyRootReplaced(Operation *op, ValueRange newValues) override;
+ void notifyOperationReplaced(Operation *op, ValueRange newValues) override;
+ /// Send notification that an operation was modified in-place.
+ void notifyOperationModified(Operation *op) override;
/// Send notification that an operation is about to be deleted to all
/// listeners.
void notifyOperationRemoved(Operation *op) override;
@@ -96,15 +52,20 @@
/// events are forwarded to the provided rewrite listener.
class PatternRewriterListener : public PatternRewriter, public ListenerList {
public:
- PatternRewriterListener(MLIRContext *context) : PatternRewriter(context) {}
+ PatternRewriterListener(MLIRContext *context) : PatternRewriter(context) {
+ setListener(this);
+ }
/// When an operation is about to be replaced, send out an event to all
/// attached listeners.
void replaceOp(Operation *op, ValueRange newValues) override {
- ListenerList::notifyRootReplaced(op, newValues);
+ ListenerList::notifyOperationReplaced(op, newValues);
PatternRewriter::replaceOp(op, newValues);
}
+ void notifyOperationModified(Operation *op) override {
+ ListenerList::notifyOperationModified(op);
+ }
void notifyOperationInserted(Operation *op) override {
ListenerList::notifyOperationInserted(op);
}
diff --git a/llvm-external-projects/iree-dialects/include/iree-dialects/Transforms/ListenerGreedyPatternRewriteDriver.h b/llvm-external-projects/iree-dialects/include/iree-dialects/Transforms/ListenerGreedyPatternRewriteDriver.h
index 2c0adf6..a8c0912 100644
--- a/llvm-external-projects/iree-dialects/include/iree-dialects/Transforms/ListenerGreedyPatternRewriteDriver.h
+++ b/llvm-external-projects/iree-dialects/include/iree-dialects/Transforms/ListenerGreedyPatternRewriteDriver.h
@@ -12,7 +12,6 @@
// The following are iree-dialects extensions to MLIR.
namespace mlir {
struct GreedyRewriteConfig;
-struct RewriteListener;
/// Applies the specified patterns on `op` alone while also trying to fold it,
/// by selecting the highest benefits patterns in a greedy manner. Returns
diff --git a/llvm-external-projects/iree-dialects/lib/Dialect/LinalgTransform/IR/StructuredTransformOpsExt.cpp b/llvm-external-projects/iree-dialects/lib/Dialect/LinalgTransform/IR/StructuredTransformOpsExt.cpp
index 4fd5b1c..59057a0 100644
--- a/llvm-external-projects/iree-dialects/lib/Dialect/LinalgTransform/IR/StructuredTransformOpsExt.cpp
+++ b/llvm-external-projects/iree-dialects/lib/Dialect/LinalgTransform/IR/StructuredTransformOpsExt.cpp
@@ -444,8 +444,8 @@
});
}
-void mlir::TrackingListener::notifyRootReplaced(Operation *op,
- ValueRange newValues) {
+void mlir::TrackingListener::notifyOperationReplaced(Operation *op,
+ ValueRange newValues) {
// Bail out if in error state.
if (hadErrors)
return;
diff --git a/llvm-external-projects/iree-dialects/lib/Transforms/Listener.cpp b/llvm-external-projects/iree-dialects/lib/Transforms/Listener.cpp
index 58bde22..b71ef2e 100644
--- a/llvm-external-projects/iree-dialects/lib/Transforms/Listener.cpp
+++ b/llvm-external-projects/iree-dialects/lib/Transforms/Listener.cpp
@@ -9,12 +9,6 @@
namespace mlir {
//===----------------------------------------------------------------------===//
-// RewriteListener
-//===----------------------------------------------------------------------===//
-
-RewriteListener::~RewriteListener() = default;
-
-//===----------------------------------------------------------------------===//
// ListenerList
//===----------------------------------------------------------------------===//
@@ -28,9 +22,15 @@
listener->notifyBlockCreated(block);
}
-void ListenerList::notifyRootReplaced(Operation *op, ValueRange newValues) {
+void ListenerList::notifyOperationReplaced(Operation *op,
+ ValueRange newValues) {
for (RewriteListener *listener : listeners)
- listener->notifyRootReplaced(op, newValues);
+ listener->notifyOperationReplaced(op, newValues);
+}
+
+void ListenerList::notifyOperationModified(Operation *op) {
+ for (RewriteListener *listener : listeners)
+ listener->notifyOperationModified(op);
}
void ListenerList::notifyOperationRemoved(Operation *op) {
diff --git a/llvm-external-projects/iree-dialects/lib/Transforms/ListenerCSE.cpp b/llvm-external-projects/iree-dialects/lib/Transforms/ListenerCSE.cpp
index 866b6d8..b8fc3e1 100644
--- a/llvm-external-projects/iree-dialects/lib/Transforms/ListenerCSE.cpp
+++ b/llvm-external-projects/iree-dialects/lib/Transforms/ListenerCSE.cpp
@@ -194,7 +194,7 @@
// END copied from mlir/lib/Transforms/CSE.cpp
//===----------------------------------------------------------------------===//
if (listener)
- listener->notifyRootReplaced(op, existing->getResults());
+ listener->notifyOperationReplaced(op, existing->getResults());
//===----------------------------------------------------------------------===//
// BEGIN copied from mlir/lib/Transforms/CSE.cpp
//===----------------------------------------------------------------------===//
diff --git a/llvm-external-projects/iree-dialects/lib/Transforms/ListenerGreedyPatternRewriteDriver.cpp b/llvm-external-projects/iree-dialects/lib/Transforms/ListenerGreedyPatternRewriteDriver.cpp
index 922c4a3..cfcdbe3 100644
--- a/llvm-external-projects/iree-dialects/lib/Transforms/ListenerGreedyPatternRewriteDriver.cpp
+++ b/llvm-external-projects/iree-dialects/lib/Transforms/ListenerGreedyPatternRewriteDriver.cpp
@@ -57,6 +57,8 @@
// inserted ops are added to the worklist for processing.
void notifyOperationInserted(Operation *op) override;
+ void notifyOperationModified(Operation *op) override;
+
// Look over the provided operands for any defining operations that should
// be re-added to the worklist. This function should be called when an
// operation is modified or removed, as it may trigger further
@@ -70,7 +72,7 @@
// When the root of a pattern is about to be replaced, it can trigger
// simplifications to its users - make sure to add them to the worklist
// before the root is changed.
- void notifyRootReplaced(Operation *op, ValueRange replacement) override;
+ void notifyOperationReplaced(Operation *op, ValueRange replacement) override;
//===--------------------------------------------------------------------===//
// END copied from mlir/lib/Transforms/Utils/GreedyPatternRewriteDriver.cpp
@@ -380,6 +382,14 @@
addToWorklist(op);
}
+void GreedyPatternRewriteDriver::notifyOperationModified(Operation *op) {
+ LLVM_DEBUG({
+ logger.startLine() << "** Modified: '" << op->getName() << "'(" << op
+ << ")\n";
+ });
+ addToWorklist(op);
+}
+
void GreedyPatternRewriteDriver::addOperandsToWorklist(ValueRange operands) {
for (Value operand : operands) {
// If the use count of this operand is now < 2, we re-add the defining
@@ -402,8 +412,8 @@
});
}
-void GreedyPatternRewriteDriver::notifyRootReplaced(Operation *op,
- ValueRange replacement) {
+void GreedyPatternRewriteDriver::notifyOperationReplaced(
+ Operation *op, ValueRange replacement) {
LLVM_DEBUG({
logger.startLine() << "** Replace : '" << op->getName() << "'(" << op
<< ")\n";
diff --git a/llvm-external-projects/iree-dialects/test/lib/Transforms/TestListenerPasses.cpp b/llvm-external-projects/iree-dialects/test/lib/Transforms/TestListenerPasses.cpp
index 68f2103..04fc13a 100644
--- a/llvm-external-projects/iree-dialects/test/lib/Transforms/TestListenerPasses.cpp
+++ b/llvm-external-projects/iree-dialects/test/lib/Transforms/TestListenerPasses.cpp
@@ -17,7 +17,7 @@
/// The test listener prints stuff to `stdout` so that it can be checked by lit
/// tests.
struct TestListener : public RewriteListener {
- void notifyRootReplaced(Operation *op, ValueRange newValues) override {
+ void notifyOperationReplaced(Operation *op, ValueRange newValues) override {
llvm::outs() << "REPLACED " << op->getName() << "\n";
}
void notifyOperationRemoved(Operation *op) override {
diff --git a/third_party/llvm-project b/third_party/llvm-project
index 8b3091b..0a836ff 160000
--- a/third_party/llvm-project
+++ b/third_party/llvm-project
@@ -1 +1 @@
-Subproject commit 8b3091b4b485ddaa64a69fbaf8d85f21d37a61f2
+Subproject commit 0a836ffb391e1aa9af84429298c8b7c93c805527
diff --git a/third_party/mlir-hlo b/third_party/mlir-hlo
index 9665c2b..23fc8f5 160000
--- a/third_party/mlir-hlo
+++ b/third_party/mlir-hlo
@@ -1 +1 @@
-Subproject commit 9665c2bd170a03f503f8177bb908ac9cafe63446
+Subproject commit 23fc8f581bc602786091ffe711c99ee5339f3e18