diff options
| author | Joshua Cao <cao.joshua@yahoo.com> | 2023-04-15 16:04:58 -0700 |
|---|---|---|
| committer | Joshua Cao <cao.joshua@yahoo.com> | 2023-05-10 00:40:28 -0700 |
| commit | 21f226fc4591db6e98faf380137a42067c909582 (patch) | |
| tree | e22c7b218ff0b80ea08b7d78bf2705597a8565a7 /lldb/source/Plugins/ScriptInterpreter/Python/ScriptInterpreterPythonImpl.h | |
| parent | 99f933b6346b0afcafa3c1ea0972136d7b441a86 (diff) | |
| download | llvm-21f226fc4591db6e98faf380137a42067c909582.zip llvm-21f226fc4591db6e98faf380137a42067c909582.tar.gz llvm-21f226fc4591db6e98faf380137a42067c909582.tar.bz2 | |
[SimpleLoopUnswitch] unswitch selects
The old LoopUnswitch pass unswitched selects, but the changes were never
ported to the new SimpleLoopUnswitch.
We unswitch by turning:
```
S = select %cond, %a, %b
```
into:
```
head:
br %cond, label %then, label %tail
then:
br label %tail
tail:
S = phi [ %a, %then ], [ %b, %head ]
```
Unswitch selects are always nontrivial, since the successors do not exit
the loop and the loop body always needs to be cloned.
Unswitch selects always need to freeze the conditional if the
conditional could be poison or undef. Selects don't propagate
poison/undef, and branches on poison/undef causes UB.
Reviewed By: nikic, kachkov98, vitalybuka
Differential Revision: https://reviews.llvm.org/D138526
Diffstat (limited to 'lldb/source/Plugins/ScriptInterpreter/Python/ScriptInterpreterPythonImpl.h')
0 files changed, 0 insertions, 0 deletions
