[Mlir-commits] [mlir] eea8648 - [mlir][vector] Fold broadcast(poison) -> poison (#135677)
llvmlistbot at llvm.org
llvmlistbot at llvm.org
Wed Apr 16 10:12:42 PDT 2025
Author: James Newling
Date: 2025-04-16T13:12:38-04:00
New Revision: eea86489dd3df5b66d75ee2590f4824913c411d5
URL: https://github.com/llvm/llvm-project/commit/eea86489dd3df5b66d75ee2590f4824913c411d5
DIFF: https://github.com/llvm/llvm-project/commit/eea86489dd3df5b66d75ee2590f4824913c411d5.diff
LOG: [mlir][vector] Fold broadcast(poison) -> poison (#135677)
In addition to the new folder, I've also a test for broadcast(splat) ->
splat which I think was missing
Signed-off-by: James Newling <james.newling at gmail.com>
Added:
Modified:
mlir/lib/Dialect/Vector/IR/VectorOps.cpp
mlir/test/Dialect/Vector/canonicalize.mlir
Removed:
################################################################################
diff --git a/mlir/lib/Dialect/Vector/IR/VectorOps.cpp b/mlir/lib/Dialect/Vector/IR/VectorOps.cpp
index 3ef947c7b14a4..4b2fba03ce551 100644
--- a/mlir/lib/Dialect/Vector/IR/VectorOps.cpp
+++ b/mlir/lib/Dialect/Vector/IR/VectorOps.cpp
@@ -2590,6 +2590,8 @@ OpFoldResult BroadcastOp::fold(FoldAdaptor adaptor) {
}
if (auto attr = llvm::dyn_cast<SplatElementsAttr>(adaptor.getSource()))
return DenseElementsAttr::get(vectorType, attr.getSplatValue<Attribute>());
+ if (llvm::dyn_cast<ub::PoisonAttr>(adaptor.getSource()))
+ return ub::PoisonAttr::get(getContext());
return {};
}
diff --git a/mlir/test/Dialect/Vector/canonicalize.mlir b/mlir/test/Dialect/Vector/canonicalize.mlir
index c28afd0dee97e..b24cf93707d8b 100644
--- a/mlir/test/Dialect/Vector/canonicalize.mlir
+++ b/mlir/test/Dialect/Vector/canonicalize.mlir
@@ -1151,6 +1151,28 @@ func.func @bitcast_i8_to_i32() -> (vector<4xi32>, vector<4xi32>) {
// -----
+// CHECK-LABEL: broadcast_poison
+// CHECK: %[[POISON:.*]] = ub.poison : vector<4x6xi8>
+// CHECK: return %[[POISON]] : vector<4x6xi8>
+func.func @broadcast_poison() -> vector<4x6xi8> {
+ %poison = ub.poison : vector<6xi8>
+ %broadcast = vector.broadcast %poison : vector<6xi8> to vector<4x6xi8>
+ return %broadcast : vector<4x6xi8>
+}
+
+// -----
+
+// CHECK-LABEL: broadcast_splat_constant
+// CHECK: %[[CONST:.*]] = arith.constant dense<1> : vector<4x6xi8>
+// CHECK: return %[[CONST]] : vector<4x6xi8>
+func.func @broadcast_splat_constant() -> vector<4x6xi8> {
+ %cst = arith.constant dense<1> : vector<6xi8>
+ %broadcast = vector.broadcast %cst : vector<6xi8> to vector<4x6xi8>
+ return %broadcast : vector<4x6xi8>
+}
+
+// -----
+
// CHECK-LABEL: broadcast_folding1
// CHECK: %[[CST:.*]] = arith.constant dense<42> : vector<4xi32>
// CHECK-NOT: vector.broadcast
More information about the Mlir-commits
mailing list