rust/tests/mir-opt/gvn_repeat.repeat_place.GVN.diff
dianqk be5d6c5425
gvn: bail out unavoidable non-ssa locals in repeat
We cannot transform `*elem` to `array[idx1]` in the following code,
as `idx1` has already been modified.

```rust
    mir! {
        let array;
        let elem;
        {
            array = [*val; 5];
            elem = &array[idx1];
            idx1 = idx2;
            RET = *elem;
            Return()
        }
    }
```
2025-05-19 21:35:49 +08:00

17 lines
370 B
Diff

- // MIR for `repeat_place` before GVN
+ // MIR for `repeat_place` after GVN
fn repeat_place(_1: usize, _2: usize, _3: &i32) -> i32 {
let mut _0: i32;
let mut _4: [i32; 5];
let mut _5: &i32;
bb0: {
_4 = [copy (*_3); 5];
_5 = &_4[_1];
_1 = copy _2;
_0 = copy (*_5);
return;
}
}