This transformation, inspired by what is done in
hoist_redundant_transfers, hoists pairs of extract/broadcast operations
out of scf.for loops.
It changes a loop of the form:
```
%res = scf.for _ = _ to _ step _ iter_args(%iarg = %v) -> (t1) {
%e = vector.extract %iarg : t1 to t2
%u = "some_use"(%e) : (t2) -> t2
%b = vector.broadcast %u : t2 to t1
scf.yield %b : t1
}
```
into the following:
```
%e = vector.extract %v: t1 to t2
%res' = scf.for _ = _ to _ step _ iter_args(%iarg = %e) -> (t2) {
%u' = "some_use"(%iarg) : (t2) -> t2
scf.yield %u' : t2
}
%res = vector.broadcast %res' : t2 to t1
```
13 KiB
13 KiB