[Mlir-commits] [mlir] [MLIR] Fix VectorEmulateNarrowType constant op mask bug (PR #116064)
Han-Chung Wang
llvmlistbot at llvm.org
Wed Nov 13 12:00:16 PST 2024
================
@@ -129,6 +132,45 @@ static FailureOr<Operation *> getCompressedMaskOp(OpBuilder &rewriter,
auto denseAttr = DenseElementsAttr::get(newMaskType, newMaskValues);
newMask = rewriter.create<arith::ConstantOp>(loc, newMaskType, denseAttr);
}
+ } else if (constantOp) {
+ assert(shape.size() == 1 && "expected 1-D mask");
+ // Rearrange the original mask values to cover the whole potential loading
+ // region. For example, in the case of using byte-size for emulation, given
+ // the following mask:
+ //
+ // %mask = vector.constant_mask [0, 1, 0, 1, 0, 0] : vector<6xi2>
+ //
+ // with front offset of 1, the mask will be padded zeros in the front and
+ // back so that its length is multiple of `scale` (and the total coverage
+ // size is mulitiple of bytes):
+ // %new_mask = vector.constant_mask [0, 0, 1, 0, 1, 0, 0, 0] :
+ // vector<8xi2>
+ //
+ // The %new_mask is now aligned with the effective loading area and can now
+ // be compressed.
+ SmallVector<bool> maskValues(intraDataOffset, false);
+ if (auto denseAttr =
+ mlir::dyn_cast<DenseIntElementsAttr>(constantOp.getValue())) {
----------------
hanhanW wrote:
nit: drop `mlir::`
style nit: prefer using early-exit to simplify the code, so it can be something like:
```cpp
auto denseAttr = dyn_cast...
if (!denseAttr)
return failure();
// The rest code in the if branch..
```
https://llvm.org/docs/CodingStandards.html#use-early-exits-and-continue-to-simplify-code
https://github.com/llvm/llvm-project/pull/116064
More information about the Mlir-commits
mailing list