[PATCH] D72661: [VectorOps] Fixed typo in lowering code
Aart Bik via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Mon Jan 13 15:44:58 PST 2020
aartbik created this revision.
Herald added subscribers: llvm-commits, liufengdb, lucyrfox, mgester, arpith-jacob, nicolasvasilache, antiagainst, shauheen, burmako, jpienaar, rriddle, mehdi_amini.
Herald added a project: LLVM.
(also first test CL using phabricator)
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D72661
Files:
mlir/lib/Conversion/VectorToLLVM/ConvertVectorToLLVM.cpp
Index: mlir/lib/Conversion/VectorToLLVM/ConvertVectorToLLVM.cpp
===================================================================
--- mlir/lib/Conversion/VectorToLLVM/ConvertVectorToLLVM.cpp
+++ mlir/lib/Conversion/VectorToLLVM/ConvertVectorToLLVM.cpp
@@ -5,7 +5,6 @@
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
-
#include "mlir/Conversion/VectorToLLVM/ConvertVectorToLLVM.h"
#include "mlir/Conversion/StandardToLLVM/ConvertStandardToLLVM.h"
#include "mlir/Conversion/StandardToLLVM/ConvertStandardToLLVMPass.h"
@@ -22,8 +21,10 @@
#include "mlir/IR/Types.h"
#include "mlir/Pass/Pass.h"
#include "mlir/Pass/PassManager.h"
+#include "mlir/Support/MathExtras.h"
#include "mlir/Transforms/DialectConversion.h"
#include "mlir/Transforms/Passes.h"
+#include <iostream>
#include "llvm/IR/DerivedTypes.h"
#include "llvm/IR/Module.h"
@@ -948,13 +949,63 @@
}
};
+class VectorExtractSlicesOpConversion
+ : public OpRewritePattern<ExtractSlicesOp> {
+public:
+ using OpRewritePattern<ExtractSlicesOp>::OpRewritePattern;
+
+ PatternMatchResult matchAndRewrite(ExtractSlicesOp op,
+ PatternRewriter &rewriter) const override {
+ auto loc = op.getLoc();
+
+ VectorType vectorType = op.getSourceVectorType();
+ unsigned rank = vectorType.getRank();
+
+ SmallVector<int64_t, 4> sizes;
+ op.getSizes(sizes);
+ SmallVector<int64_t, 4> strides;
+ op.getStrides(strides);
+
+ // Compute the number of slices in each dimension.
+ auto shape = vectorType.getShape();
+ SmallVector<int64_t, 4> dimSliceCounts(rank);
+ for (unsigned i = 0; i < rank; ++i)
+ dimSliceCounts[i] = ceilDiv(shape[i], sizes[i]);
+
+ // Compute the strides between slices in each dimension.
+ SmallVector<int64_t, 4> sliceStrides(rank);
+ sliceStrides[rank - 1] = 1;
+ for (int i = rank - 2; i >= 0; --i)
+ sliceStrides[i] = sliceStrides[i + 1] * dimSliceCounts[i + 1];
+
+ std::cout << "// Slices in each dim" << std::endl;
+ for (unsigned i = 0; i < rank; ++i)
+ std::cout << "// " << dimSliceCounts[i] << std::endl;
+ std::cout << "// Strides in each dim" << std::endl;
+ for (unsigned i = 0; i < rank; ++i)
+ std::cout << "// " << sliceStrides[i] << std::endl;
+
+ // For each element in the tuple, generate the proper extraction.
+ TupleType tupleType = op.getResultTupleType();
+
+ auto elemType = vectorType.getElementType();
+ Value zero = rewriter.create<ConstantOp>(loc, elemType,
+ rewriter.getZeroAttr(elemType));
+ Value res = rewriter.create<SplatOp>(loc, vectorType, zero);
+ rewriter.replaceOp(op, res);
+ return matchSuccess();
+ }
+};
+
/// Populate the given list with patterns that convert from Vector to LLVM.
void mlir::populateVectorToLLVMConversionPatterns(
LLVMTypeConverter &converter, OwningRewritePatternList &patterns) {
MLIRContext *ctx = converter.getDialect()->getContext();
- patterns.insert<VectorInsertStridedSliceOpDifferentRankRewritePattern,
- VectorInsertStridedSliceOpSameRankRewritePattern,
- VectorStridedSliceOpConversion>(ctx);
+ patterns
+ .insert<VectorInsertStridedSliceOpDifferentRankRewritePattern,
+ VectorInsertStridedSliceOpSameRankRewritePattern,
+ VectorStridedSliceOpConversion, VectorExtractSlicesOpConversion>(
+ ctx);
patterns.insert<VectorBroadcastOpConversion, VectorShuffleOpConversion,
VectorExtractElementOpConversion, VectorExtractOpConversion,
VectorInsertElementOpConversion, VectorInsertOpConversion,
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D72661.237802.patch
Type: text/x-patch
Size: 3754 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20200113/ed20ba39/attachment.bin>
More information about the llvm-commits
mailing list