Skip to content

Commit 2b51236

Browse files
committed
[mlir][vector] Add alignment to compressstore
1 parent 12eead5 commit 2b51236

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
@@ -2244,7 +2244,9 @@ def Vector_CompressStoreOp :
22442244
Arguments<(ins Arg<AnyMemRef, "", [MemWrite]>:$base,
22452245
Variadic<Index>:$indices,
22462246
FixedVectorOfNonZeroRankOf<[I1]>:$mask,
2247-
AnyVectorOfNonZeroRank:$valueToStore)> {
2247+
AnyVectorOfNonZeroRank:$valueToStore,
2248+
ConfinedAttr<OptionalAttr<I64Attr>,
2249+
[AllAttrOf<[IntPositive, IntPowerOf2]>]>:$alignment)> {
22482250

22492251
let summary = "writes elements selectively from a vector as defined by a mask";
22502252

@@ -2303,6 +2305,17 @@ def Vector_CompressStoreOp :
23032305
"type($base) `,` type($mask) `,` type($valueToStore)";
23042306
let hasCanonicalizer = 1;
23052307
let hasVerifier = 1;
2308+
let builders = [
2309+
OpBuilder<(ins "Value":$base,
2310+
"ValueRange":$indices,
2311+
"Value":$mask,
2312+
"Value":$valueToStore,
2313+
CArg<"llvm::Align", "llvm::Align()">:$alignment), [{
2314+
return build($_builder, $_state, base, indices, valueToStore, mask,
2315+
alignment != llvm::Align() ? $_builder.getI64IntegerAttr(alignment.value()) :
2316+
nullptr);
2317+
}]>
2318+
];
23062319
}
23072320

23082321
def Vector_ShapeCastOp :

mlir/test/Dialect/Vector/invalid.mlir

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

16001600
// -----
16011601

1602+
func.func @compress_invalid_alignment(%base: memref<?xf32>, %mask: vector<16xi1>, %value: vector<16xf32>, %c0: index) {
1603+
// 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}}
1604+
vector.compressstore %base[%c0], %mask, %value { alignment = -1 } : memref<?xf32>, vector<16xi1>, vector<16xf32>
1605+
}
1606+
1607+
// -----
1608+
1609+
func.func @compress_invalid_alignment(%base: memref<?xf32>, %mask: vector<16xi1>, %value: vector<16xf32>, %c0: index) {
1610+
// 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}}
1611+
vector.compressstore %base[%c0], %mask, %value { alignment = 3 } : memref<?xf32>, vector<16xi1>, vector<16xf32>
1612+
}
1613+
1614+
// -----
1615+
16021616
func.func @scan_reduction_dim_constraint(%arg0: vector<2x3xi32>, %arg1: vector<3xi32>) -> vector<3xi32> {
16031617
// expected-error@+1 {{'vector.scan' op reduction dimension 5 has to be less than 2}}
16041618
%0:2 = vector.scan <add>, %arg0, %arg1 {inclusive = true, reduction_dim = 5} :

0 commit comments

Comments
 (0)