[SimpleLoopUnswtich] Support zext when injecting invariant conditions
authorMax Kazantsev <mkazantsev@azul.com>
Mon, 6 Mar 2023 08:13:55 +0000 (15:13 +0700)
committerMax Kazantsev <mkazantsev@azul.com>
Mon, 6 Mar 2023 08:42:57 +0000 (15:42 +0700)
commit0354463b9e77b909ec54526aa0375750b77c4282
tree9a965bd375be2165407ef58267db630127445895
parent2fbf18b40026b46bd380fae58575cebbd9801ff4
[SimpleLoopUnswtich] Support zext when injecting invariant conditions

This patch handles the following case: turn
```
if (x <u Invariant1) {
  if (zext(x) <u Invariant2) {
    ...
  }
}
```
into
```
if (x <u Invariant1) {
  if (zext(Invariant1) <=u Invariant2) { // Unswitch here
    // No check needed
  } else {
    if (zext(x) <u Invariant2) {
      ...
    }
  }
}
```

Differential Revision: https://reviews.llvm.org/D138015
Reviewed By: skatkov
llvm/lib/Transforms/Scalar/SimpleLoopUnswitch.cpp
llvm/test/Transforms/SimpleLoopUnswitch/inject-invariant-conditions.ll