diff options
author | Bernhard Urban <bernhard.urban@xamarin.com> | 2019-03-21 01:45:47 +0300 |
---|---|---|
committer | monojenkins <jo.shields+jenkins@xamarin.com> | 2019-03-21 01:45:47 +0300 |
commit | 00d871d103fc418c358c2a3589b88dbd5b1101f2 (patch) | |
tree | 7ec316444a45555d7b8cfdfafaf57d24a16f1bb4 /msvc | |
parent | 4e13c53451b60f08562edadd0cdd049e6834d6e6 (diff) |
[ssa] avoid code motion to try-blocks (#13555)
[ssa] avoid code motion to try-blocks
Consider
```
BB4: // successor BB5, BB9
[...]
br [B9]
BB5: // catch handler block for BB4
[...]
br BB9
BB9:
aotconst R90
gc_safe_point R90
[...]
```
Previously, our invariant code motion pass would move `aotconst R90` to the end of BB4. Unfortunately, BB4 contains instructions that can cause an exception and thus control flow is broken and continues to BB5. `aotconst R90` wouldn't be loaded correctly in this scenario.
When lowered to LLVM IR this is more obvious, and the verification pass of LLVM catches this.
Fixes https://github.com/mono/mono/issues/13460
Diffstat (limited to 'msvc')
0 files changed, 0 insertions, 0 deletions