[Mlir-commits] [mlir] [mlir][VectorOps] Extend vector.constant_mask to support 'all true' scalable dims (PR #66638)
Andrzej Warzyński
llvmlistbot at llvm.org
Thu Sep 21 01:05:03 PDT 2023
================
@@ -1819,16 +1819,55 @@ func.func @genbool_1d() -> vector<8xi1> {
// -----
-func.func @genbool_1d_scalable() -> vector<[8]xi1> {
+func.func @genbool_1d_scalable_pfalse() -> vector<[8]xi1> {
%0 = vector.constant_mask [0] : vector<[8]xi1>
return %0 : vector<[8]xi1>
}
-// CHECK-LABEL: func @genbool_1d_scalable
+// CHECK-LABEL: func @genbool_1d_scalable_pfalse
// CHECK: %[[VAL_0:.*]] = arith.constant dense<false> : vector<[8]xi1>
// CHECK: return %[[VAL_0]] : vector<[8]xi1>
// -----
+func.func @genbool_1d_scalable_ptrue() -> vector<[8]xi1> {
+ %0 = vector.constant_mask [8] : vector<[8]xi1>
+ return %0 : vector<[8]xi1>
+}
+// CHECK-LABEL: func @genbool_1d_scalable_ptrue
+// CHECK: %[[VAL_0:.*]] = arith.constant dense<true> : vector<[8]xi1>
+// CHECK: return %[[VAL_0]] : vector<[8]xi1>
+
+// -----
+
+func.func @genbool_2d_scalable() -> vector<4x[4]xi1> {
+ %0 = vector.constant_mask [2, 4] : vector<4x[4]xi1>
+ return %0 : vector<4x[4]xi1>
+}
+// CHECK-LABEL: func.func @genbool_2d_scalable() -> vector<4x[4]xi1> {
+// CHECK: %[[VAL_0:.*]] = arith.constant dense<true> : vector<[4]xi1>
+// CHECK: %[[VAL_1:.*]] = arith.constant dense<false> : vector<4x[4]xi1>
+// CHECK: %[[VAL_2:.*]] = builtin.unrealized_conversion_cast %[[VAL_1]] : vector<4x[4]xi1> to !llvm.array<4 x vector<[4]xi1>>
+// CHECK: %[[VAL_3:.*]] = llvm.insertvalue %[[VAL_0]], %[[VAL_2]][0] : !llvm.array<4 x vector<[4]xi1>>
+// CHECK: %[[VAL_4:.*]] = llvm.insertvalue %[[VAL_0]], %[[VAL_3]][1] : !llvm.array<4 x vector<[4]xi1>>
+// CHECK: %[[VAL_5:.*]] = builtin.unrealized_conversion_cast %[[VAL_4]] : !llvm.array<4 x vector<[4]xi1>> to vector<4x[4]xi1>
+// CHECK: return %[[VAL_5]] : vector<4x[4]xi1>
+// CHECK: }
+
+// -----
+
+/// Currently, this is not supported as generating the mask would require
+/// unrolling the leading scalable dimension at compile time.
+func.func @cannot_genbool_2d_leading_scalable() -> vector<[4]x4xi1> {
+ %0 = vector.constant_mask [4, 2] : vector<[4]x4xi1>
+ return %0 : vector<[4]x4xi1>
+}
+// CHECK-LABEL: func.func @cannot_genbool_2d_leading_scalable() -> vector<[4]x4xi1> {
+// CHECK: %[[VAL_0:.*]] = vector.constant_mask [4, 2] : vector<[4]x4xi1>
+// CHECK: return %[[VAL_0]] : vector<[4]x4xi1>
+// CHECK: }
----------------
banach-space wrote:
Yes, meant that final `CHECK`. Sorry, Phabricator would highlight the file line that the comment was meant to be attached to :/
https://github.com/llvm/llvm-project/pull/66638
More information about the Mlir-commits
mailing list