Skip to content

Commit 36949d1

Browse files
committed
[mlir][vector] Add alignment to compressstore
1 parent 158b91c commit 36949d1

File tree

2 files changed

+28
-1
lines changed

2 files changed

+28
-1
lines changed

mlir/include/mlir/Dialect/Vector/IR/VectorOps.td

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2295,7 +2295,9 @@ def Vector_CompressStoreOp :
22952295
Arguments<(ins Arg<AnyMemRef, "", [MemWrite]>:$base,
22962296
Variadic<Index>:$indices,
22972297
FixedVectorOfNonZeroRankOf<[I1]>:$mask,
2298-
AnyVectorOfNonZeroRank:$valueToStore)> {
2298+
AnyVectorOfNonZeroRank:$valueToStore,
2299+
ConfinedAttr<OptionalAttr<I64Attr>,
2300+
[AllAttrOf<[IntPositive, IntPowerOf2]>]>:$alignment)> {
22992301

23002302
let summary = "writes elements selectively from a vector as defined by a mask";
23012303

@@ -2354,6 +2356,17 @@ def Vector_CompressStoreOp :
23542356
"type($base) `,` type($mask) `,` type($valueToStore)";
23552357
let hasCanonicalizer = 1;
23562358
let hasVerifier = 1;
2359+
let builders = [
2360+
OpBuilder<(ins "Value":$base,
2361+
"ValueRange":$indices,
2362+
"Value":$mask,
2363+
"Value":$valueToStore,
2364+
CArg<"llvm::Align", "llvm::Align()">:$alignment), [{
2365+
return build($_builder, $_state, base, indices, valueToStore, mask,
2366+
alignment != llvm::Align() ? $_builder.getI64IntegerAttr(alignment.value()) :
2367+
nullptr);
2368+
}]>
2369+
];
23572370
}
23582371

23592372
def Vector_ShapeCastOp :

mlir/test/Dialect/Vector/invalid.mlir

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1639,6 +1639,20 @@ func.func @compress_memref_mismatch(%base: memref<?x?xf32>, %mask: vector<16xi1>
16391639

16401640
// -----
16411641

1642+
func.func @compress_invalid_alignment(%base: memref<?xf32>, %mask: vector<16xi1>, %value: vector<16xf32>, %c0: index) {
1643+
// expected-error @below {{'vector.compressstore' op attribute 'alignment' failed to satisfy constraint: 64-bit signless integer attribute whose value is positive and whose value is a power of two > 0}}
1644+
vector.compressstore %base[%c0], %mask, %value { alignment = -1 } : memref<?xf32>, vector<16xi1>, vector<16xf32>
1645+
}
1646+
1647+
// -----
1648+
1649+
func.func @compress_invalid_alignment(%base: memref<?xf32>, %mask: vector<16xi1>, %value: vector<16xf32>, %c0: index) {
1650+
// expected-error @below {{'vector.compressstore' op attribute 'alignment' failed to satisfy constraint: 64-bit signless integer attribute whose value is positive and whose value is a power of two > 0}}
1651+
vector.compressstore %base[%c0], %mask, %value { alignment = 3 } : memref<?xf32>, vector<16xi1>, vector<16xf32>
1652+
}
1653+
1654+
// -----
1655+
16421656
func.func @scan_reduction_dim_constraint(%arg0: vector<2x3xi32>, %arg1: vector<3xi32>) -> vector<3xi32> {
16431657
// expected-error@+1 {{'vector.scan' op reduction dimension 5 has to be less than 2}}
16441658
%0:2 = vector.scan <add>, %arg0, %arg1 {inclusive = true, reduction_dim = 5} :

0 commit comments

Comments
 (0)