diff options
| author | Diego Caballero <diegocaballero@google.com> | 2023-05-19 19:45:06 +0000 |
|---|---|---|
| committer | Diego Caballero <diegocaballero@google.com> | 2023-05-19 21:03:18 +0000 |
| commit | 14726cd691517f8d03491a3bf6ad0b338fabba1b (patch) | |
| tree | cd22ead49a450a947e493740e19f9de7ae8d7210 /mlir/test/lib/Dialect/Vector/TestVectorTransforms.cpp | |
| parent | 31511900c68df693b38decaa99dd9f8dba61ef65 (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.cpp | 14 |
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 ®istry) 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)); } }; |
