summaryrefslogtreecommitdiff
path: root/mlir/test/lib/Dialect/Vector/TestVectorTransforms.cpp
diff options
context:
space:
mode:
authorDiego Caballero <diegocaballero@google.com>2023-05-19 19:45:06 +0000
committerDiego Caballero <diegocaballero@google.com>2023-05-19 21:03:18 +0000
commit14726cd691517f8d03491a3bf6ad0b338fabba1b (patch)
treecd22ead49a450a947e493740e19f9de7ae8d7210 /mlir/test/lib/Dialect/Vector/TestVectorTransforms.cpp
parent31511900c68df693b38decaa99dd9f8dba61ef65 (diff)
[mlir][Vector] Extend xfer_read(extract)->scalar load to support multiple uses
This patch extends the vector.extract(vector.transfer_read) -> scalar load patterns to support vector.transfer_read with multiple uses. For now, we check that all the uses are vector.extract operations. Supporting multiple uses is predicated under a flag. Reviewed By: hanchung Differential Revision: https://reviews.llvm.org/D150812
Diffstat (limited to 'mlir/test/lib/Dialect/Vector/TestVectorTransforms.cpp')
-rw-r--r--mlir/test/lib/Dialect/Vector/TestVectorTransforms.cpp14
1 files changed, 12 insertions, 2 deletions
diff --git a/mlir/test/lib/Dialect/Vector/TestVectorTransforms.cpp b/mlir/test/lib/Dialect/Vector/TestVectorTransforms.cpp
index 50dfeff635cc..3b0cf2f83f19 100644
--- a/mlir/test/lib/Dialect/Vector/TestVectorTransforms.cpp
+++ b/mlir/test/lib/Dialect/Vector/TestVectorTransforms.cpp
@@ -298,23 +298,33 @@ struct TestScalarVectorTransferLoweringPatterns
MLIR_DEFINE_EXPLICIT_INTERNAL_INLINE_TYPE_ID(
TestScalarVectorTransferLoweringPatterns)
+ TestScalarVectorTransferLoweringPatterns() = default;
+ TestScalarVectorTransferLoweringPatterns(
+ const TestScalarVectorTransferLoweringPatterns &pass)
+ : PassWrapper(pass) {}
+
StringRef getArgument() const final {
return "test-scalar-vector-transfer-lowering";
}
StringRef getDescription() const final {
return "Test lowering of scalar vector transfers to memref loads/stores.";
}
- TestScalarVectorTransferLoweringPatterns() = default;
void getDependentDialects(DialectRegistry &registry) const override {
registry.insert<affine::AffineDialect, memref::MemRefDialect,
tensor::TensorDialect, vector::VectorDialect>();
}
+ Option<bool> allowMultipleUses{
+ *this, "allow-multiple-uses",
+ llvm::cl::desc("Fold transfer operations with multiple uses"),
+ llvm::cl::init(false)};
+
void runOnOperation() override {
MLIRContext *ctx = &getContext();
RewritePatternSet patterns(ctx);
- vector::populateScalarVectorTransferLoweringPatterns(patterns);
+ vector::populateScalarVectorTransferLoweringPatterns(
+ patterns, /*benefit=*/1, allowMultipleUses.getValue());
(void)applyPatternsAndFoldGreedily(getOperation(), std::move(patterns));
}
};