rust/tests/mir-opt/gvn_repeat.repeat_local.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

19 lines
390 B
Diff

- // MIR for `repeat_local` before GVN
+ // MIR for `repeat_local` after GVN
fn repeat_local(_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);
+ _0 = copy _3;
return;
}
}