[all-commits] [llvm/llvm-project] 2a7f19: [InstCombine] Fix replace select with Phis when br...

max-azul via All-commits all-commits at lists.llvm.org
Mon Jul 20 06:31:27 PDT 2020


  Branch: refs/heads/release/11.x
  Home:   https://github.com/llvm/llvm-project
  Commit: 2a7f1931d7272051592155619f21b338b5735734
      https://github.com/llvm/llvm-project/commit/2a7f1931d7272051592155619f21b338b5735734
  Author: Max Kazantsev <mkazantsev at azul.com>
  Date:   2020-07-20 (Mon, 20 Jul 2020)

  Changed paths:
    M llvm/lib/Transforms/InstCombine/InstCombineSelect.cpp

  Log Message:
  -----------
  [InstCombine] Fix replace select with Phis when branch has the same labels

```
define i32 @test(i1 %cond) {
entry:
  br i1 %cond, label %exit, label %exit
exit:
  %result = select i1 %cond, i32 123, i32 456
  ret i32 %result
}
```
In this test, after applying transformation of replacing select with Phis,
the result will be:

```
define i32 @test(i1 %cond) {
entry:
  br i1 %cond, label %exit, label %exit
exit:
  %result = i32 phi [123, %exit], [123, %exit]
  ret i32 %result
}
```
That is, select is transformed into an invalid Phi, which will then be
reduced to 123 and the second value will be lost. But it is worth
noting that this problem will arise only if select is in the InstCombine
worklist will be before the branch. Otherwise, InstCombine will replace
the branch condition with false and transformation will not be applied.

The fix is to check the target labels in the branch condition for equality.

Patch By: Kirill Polushin
Differential Revision: https://reviews.llvm.org/D84003
Reviewed By: mkazantsev

(cherry picked from commit c98988107868db41c12b9d782fae25dea2a81c87)


  Commit: 7421cbd7a5a74b48a173f60763b9b78ecd3aec09
      https://github.com/llvm/llvm-project/commit/7421cbd7a5a74b48a173f60763b9b78ecd3aec09
  Author: Max Kazantsev <mkazantsev at azul.com>
  Date:   2020-07-20 (Mon, 20 Jul 2020)

  Changed paths:
    M llvm/test/Transforms/InstCombine/select.ll

  Log Message:
  -----------
  [InstCombine][Test] Test for fix of replacing select with Phis when branch has the same labels

An additional test that allows to check the correctness of handling the case of the same
branch labels in the dominator when trying to replace select with phi-node.

Patch By: Kirill Polushin
Differential Revision: https://reviews.llvm.org/D84006
Reviewed By: mkazantsev

(cherry picked from commit df6e185e8f895686510117301e568e5043909b66)


Compare: https://github.com/llvm/llvm-project/compare/96313d2de45a...7421cbd7a5a7


More information about the All-commits mailing list