[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