llvm-project
0572ad60 - [mlir][shape] Fix crash when folding tensor.extract(shape_of(memref)) (#186270)

Commit
205 days ago
[mlir][shape] Fix crash when folding tensor.extract(shape_of(memref)) (#186270) The `ExtractFromShapeOfExtentTensor` canonicalization pattern was unconditionally rewriting: tensor.extract(shape.shape_of(%arg), %idx) -> tensor.dim(%arg, %idx) even when `%arg` is a memref. This produced an invalid `tensor.dim` (whose source operand must be a tensor), which then caused an assertion failure in `DimOp::getSource()` when subsequent canonicalization patterns tried to match the op: Assertion `isa<To>(Val) && "cast<Ty>() argument of incompatible type\!"' failed. [To = TypedValue<TensorType>, From = Value] Fix: add an `IsTensorType` constraint to `ExtractFromShapeOfExtentTensor` in `ShapeCanonicalization.td` so the pattern only fires when `%arg` is a tensor type. The memref case is intentionally left unfolded (the correct lowering to `memref.dim` would require adding a MemRef dependency to the Shape dialect, which is not desirable). Tests cover both the positive case (tensor arg folds to tensor.dim) and the negative case (memref arg is left unmodified). Fixes #185248 Assisted-by: Claude Code
Author
Parents
Loading