[PATCH] D79062: [mlir][Vector] Provide progressive lowering of masked n-D vector transfers

Nicolas Vasilache via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Tue Apr 28 20:31:25 PDT 2020


nicolasvasilache created this revision.
nicolasvasilache added reviewers: ftynse, aartbik.
Herald added subscribers: llvm-commits, Kayjukh, frgossen, grosul1, Joonsoo, liufengdb, lucyrfox, mgester, arpith-jacob, antiagainst, shauheen, jpienaar, rriddle, mehdi_amini, mgorny.
Herald added a reviewer: rriddle.
Herald added a project: LLVM.
rriddle resigned from this revision.
rriddle added inline comments.


================
Comment at: mlir/lib/Conversion/VectorToLoops/ConvertVectorToLoops.cpp:71
+///   %res = load(%tmp, %0): memref<(major_dims) x vector<minor_dim x type>>):
+//      vector<(major_dims) x (minor_dims) x type>
+/// ```
----------------
///?


================
Comment at: mlir/lib/Conversion/VectorToLoops/ConvertVectorToLoops.cpp:137
+  AffineLoopNestBuilder(majorIvs, majorLbs, majorUbs, majorSteps)([&] {
+    SmallVector<Value, 8> indices(xferOp.indices());
+    loopBody(
----------------
Why are you building a vector here? Is it because AffineLoopNestBuilder takes an ArrayRef<Value> instead of ValueRange?


================
Comment at: mlir/lib/Conversion/VectorToLoops/ConvertVectorToLoops.cpp:159
+    Value inBounds2 = majorIvsPlusOffsets.back() < ub;
+    inBounds = inBounds && inBounds2;
+  }
----------------
inbounds &= inBounds2;?


This revision allows masked vector transfers with m-D buffers and n-D vectors to
progressively lower to m-D buffer and 1-D vector transfers.

For a vector.transfer_read, assuming a `memref<leading_dims) x (major_dims) x (minor_dims) x type>` and a `vector<(minor_dims) x type>` are involved in the transfer, this generates pseudo-IR resembling:

  if (any_of(%ivs_major + %offsets, <, major_dims)) {
    %v = vector_transfer_read(
      {%offsets_leading, %ivs_major + %offsets_major, %offsets_minor},
       %ivs_minor):
      memref<leading_dims) x (major_dims) x (minor_dims) x type>,
      vector<(minor_dims) x type>;
  } else {
    %v = splat(vector<(minor_dims) x type>, %fill)
  }


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D79062

Files:
  mlir/include/mlir/Conversion/VectorToLoops/ConvertVectorToLoops.h
  mlir/include/mlir/Dialect/StandardOps/EDSC/Builders.h
  mlir/include/mlir/Dialect/StandardOps/EDSC/Intrinsics.h
  mlir/include/mlir/Dialect/Vector/EDSC/Intrinsics.h
  mlir/include/mlir/Dialect/Vector/VectorOps.td
  mlir/include/mlir/Dialect/Vector/VectorTransforms.h
  mlir/include/mlir/EDSC/Builders.h
  mlir/include/mlir/IR/AffineMap.h
  mlir/lib/Conversion/LinalgToLLVM/CMakeLists.txt
  mlir/lib/Conversion/LinalgToLLVM/LinalgToLLVM.cpp
  mlir/lib/Conversion/VectorToLoops/ConvertVectorToLoops.cpp
  mlir/lib/Dialect/Affine/EDSC/Builders.cpp
  mlir/lib/Dialect/Linalg/EDSC/Builders.cpp
  mlir/lib/Dialect/LoopOps/EDSC/Builders.cpp
  mlir/lib/Dialect/StandardOps/EDSC/Builders.cpp
  mlir/lib/Dialect/Vector/VectorOps.cpp
  mlir/lib/IR/AffineMap.cpp
  mlir/test/Conversion/VectorToLoops/vector-to-loops.mlir
  mlir/test/EDSC/builder-api-test.cpp
  mlir/test/lib/Transforms/TestVectorToLoopsConversion.cpp

-------------- next part --------------
A non-text attachment was scrubbed...
Name: D79062.260828.patch
Type: text/x-patch
Size: 35430 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20200429/794d3f37/attachment-0001.bin>


More information about the llvm-commits mailing list