[all-commits] [llvm/llvm-project] ad7c49: [mlir][linalg] Fix padding size calculation for Co...

Jerry Wu via All-commits all-commits at lists.llvm.org
Mon May 9 08:46:16 PDT 2022


  Branch: refs/heads/main
  Home:   https://github.com/llvm/llvm-project
  Commit: ad7c49bef774191304b804e60821c0cdb6a390cb
      https://github.com/llvm/llvm-project/commit/ad7c49bef774191304b804e60821c0cdb6a390cb
  Author: Jerry Wu <cheyuw at google.com>
  Date:   2022-05-09 (Mon, 09 May 2022)

  Changed paths:
    M mlir/include/mlir/Dialect/Affine/Analysis/AffineStructures.h
    M mlir/include/mlir/Dialect/Linalg/Utils/Utils.h
    M mlir/lib/Dialect/Affine/Analysis/AffineStructures.cpp
    M mlir/lib/Dialect/Linalg/Utils/Utils.cpp
    M mlir/test/Dialect/Linalg/pad.mlir

  Log Message:
  -----------
  [mlir][linalg] Fix padding size calculation for Conv2d ops.

This patch fixed the padding size calculation for Conv2d ops when the stride > 1. It contains the changes below:

- Use addBound to add constraint for AffineApplyOp in getUpperBoundForIndex. So the result value can be mapped and retrieved later.

- Fixed the bound from AffineMinOp by adding as a closed bound. Originally the bound was added as an open upper bound, which results in the incorrect bounds when we multiply the values. For example:

```
%0 = affine.min affine_map<()[s0] -> (4, -s0 + 11)>()[iv0]
%1 = affine.apply affine_map<()[s0] -> (s0 * 2)>()[%0]

If we add the affine.min as an open bound, addBound will internally transform it into the close bound "%0 <= 3". The following sliceBounds will derive the bound of %1 as "%1 <= 6" and return the open bound "%1 < 7", while the correct bound should be "%1 <= 8".
```

- In addition to addBound, I also changed sliceBounds to support returning closed upper bound, since for the size computation, we usually care about the closed bounds.

- Change the getUpperBoundForIndex to favor constant bounds when required. The sliceBounds will return a tighter but non-constant bounds, which can't be used for padding. The constantRequired option requires getUpperBoundForIndex to get the constant bounds when possible.

Reviewed By: hanchung

Differential Revision: https://reviews.llvm.org/D124821




More information about the All-commits mailing list