[Mlir-commits] [mlir] [mlir][vector] Fix crash in vector.from_elements folding with poison values (PR #158528)
llvmlistbot at llvm.org
llvmlistbot at llvm.org
Thu Sep 18 12:32:45 PDT 2025
github-actions[bot] wrote:
<!--LLVM CODE FORMAT COMMENT: {clang-format}-->
:warning: C/C++ code formatter, clang-format found issues in your code. :warning:
<details>
<summary>
You can test this locally with the following command:
</summary>
``````````bash
git-clang-format --diff origin/main HEAD --extensions cpp -- mlir/lib/Dialect/Vector/IR/VectorOps.cpp
``````````
:warning:
The reproduction instructions above might return results for more than one PR
in a stack if you are using a stacked PR workflow. You can limit the results by
changing `origin/main` to the base branch/commit you want to compare against.
:warning:
</details>
<details>
<summary>
View the diff from clang-format here.
</summary>
``````````diff
diff --git a/mlir/lib/Dialect/Vector/IR/VectorOps.cpp b/mlir/lib/Dialect/Vector/IR/VectorOps.cpp
index 13378f7ac..347141e27 100644
--- a/mlir/lib/Dialect/Vector/IR/VectorOps.cpp
+++ b/mlir/lib/Dialect/Vector/IR/VectorOps.cpp
@@ -397,7 +397,7 @@ std::optional<int64_t> vector::getConstantVscaleMultiplier(Value value) {
}
/// Converts an IntegerAttr to have the specified type if needed.
-/// This handles cases where integer constant attributes have a different type
+/// This handles cases where integer constant attributes have a different type
/// than the target element type.
static IntegerAttr convertIntegerAttr(IntegerAttr intAttr, Type expectedType) {
if (intAttr.getType() == expectedType)
@@ -2462,9 +2462,9 @@ static OpFoldResult foldFromElementsToElements(FromElementsOp fromElementsOp) {
static OpFoldResult foldFromElementsToConstant(FromElementsOp fromElementsOp,
ArrayRef<Attribute> elements) {
// Check for null or poison attributes before any processing.
- if (llvm::any_of(elements, [](Attribute attr) {
- return !attr || isa<ub::PoisonAttrInterface>(attr);
- }))
+ if (llvm::any_of(elements, [](Attribute attr) {
+ return !attr || isa<ub::PoisonAttrInterface>(attr);
+ }))
return {};
// DenseElementsAttr only supports int/index/float/complex types.
@@ -2473,13 +2473,16 @@ static OpFoldResult foldFromElementsToConstant(FromElementsOp fromElementsOp,
if (!destEltType.isIntOrIndexOrFloat() && !isa<ComplexType>(destEltType))
return {};
- // Convert integer attributes to the target type if needed, leave others unchanged.
- auto convertedElements = llvm::map_to_vector(elements, [&](Attribute attr) -> Attribute {
- if (auto intAttr = dyn_cast<IntegerAttr>(attr)) {
- return convertIntegerAttr(intAttr, destEltType);
- }
- return attr; // Non-integer attributes (FloatAttr, etc.) returned unchanged
- });
+ // Convert integer attributes to the target type if needed, leave others
+ // unchanged.
+ auto convertedElements =
+ llvm::map_to_vector(elements, [&](Attribute attr) -> Attribute {
+ if (auto intAttr = dyn_cast<IntegerAttr>(attr)) {
+ return convertIntegerAttr(intAttr, destEltType);
+ }
+ return attr; // Non-integer attributes (FloatAttr, etc.) returned
+ // unchanged
+ });
return DenseElementsAttr::get(destVecType, convertedElements);
}
``````````
</details>
https://github.com/llvm/llvm-project/pull/158528
More information about the Mlir-commits
mailing list