Issue 134516
Summary [mlir][vector] Error when running `--canonicalize` with out of bounds positions in `vector.extract`
Labels mlir:vector
Assignees math-fehr
Reporter math-fehr
    The following code
```
func.func @extract_poison_idx(%arg0: vector<16xf32>) -> f32 {
  %x = arith.constant -2 : index
  %0 = vector.extract %arg0[%x]: f32 from vector<16xf32>
  return %0 : f32
}
```
raises the following error when running `--canonicalize`
```
<source>:3:8: error: 'vector.extract' op expected position attribute #1 to be a non-negative integer smaller than the corresponding vector dimension or poison (-1)
  %0 = vector.extract %arg0[%x]: f32 from vector<16xf32>
       ^
```

This is due to `-1` being the only accepted static position that is out of bounds in a `vector.extract` or `vector.insert`.

There should be two ways to fix this:
* Either we allow out of bounds static positions that are not `-1` (which are also poison).
* Or the `vector.extract` builders should map out of bounds static positions to `-1`.
* Or it is the role of the users to make sure they do not pass non `-1` out of bounds static positions.

I feel both options come with a cost, and would personally prefer solution 1, as it follows LLVM semantics (`extractelement <4 x i32> %vec, i32 -2` is poison as well), and is roughly more modular. I feel solution 3 is exactly why we have this bug in the first place, and would be quite error-prone overall, because it is really easy to miss. Solution 2 is *okay* for me, but I feel following LLVM would make more sense here.

What do you think? I can write the patch, I just want to make sure we agree on a solution first before going into it. It also applies for `vector.insert` and `vector.shuffle` from what I see.
_______________________________________________
llvm-bugs mailing list
llvm-bugs@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs

Reply via email to