This revision supports to fold vector.extractelement (splat X) -> X.
Details
Diff Detail
- Repository
 - rG LLVM Github Monorepo
 
Event Timeline
| mlir/lib/Dialect/Vector/IR/VectorOps.cpp | ||
|---|---|---|
| 954–956 | But if the position exceeds the range of the vector, the result should be a poison value? Could we ignore this possibility?  | |
| mlir/lib/Dialect/Vector/IR/VectorOps.cpp | ||
|---|---|---|
| 954–956 | Good question. There is no poison semantics in MLIR. I would interpret accessing out of bounds as C-style UB, at which point folding it to the splat value is as valid as any other behavior.  | |
| mlir/lib/Dialect/Vector/IR/VectorOps.cpp | ||
|---|---|---|
| 954–956 | I agree. Note that llvm also does this optimization in this case:  | |
Can't we? If we are extracting the element from a splat, isn't it always the same regardless of the position?