[all-commits] [llvm/llvm-project] 380fa8: [InstCombine] Replace all dominated uses of condi...

Yingwei Zheng via All-commits all-commits at lists.llvm.org
Sat Aug 31 18:49:45 PDT 2024


  Branch: refs/heads/main
  Home:   https://github.com/llvm/llvm-project
  Commit: 380fa875ab050293be6c8723d770700100b10b8f
      https://github.com/llvm/llvm-project/commit/380fa875ab050293be6c8723d770700100b10b8f
  Author: Yingwei Zheng <dtcxzyw2333 at gmail.com>
  Date:   2024-09-01 (Sun, 01 Sep 2024)

  Changed paths:
    M llvm/lib/Transforms/InstCombine/InstructionCombining.cpp
    M llvm/test/Transforms/InstCombine/assume.ll
    M llvm/test/Transforms/InstCombine/branch.ll
    M llvm/test/Transforms/InstCombine/compare-unescaped.ll
    M llvm/test/Transforms/InstCombine/icmp-dom.ll
    M llvm/test/Transforms/InstCombine/indexed-gep-compares.ll
    M llvm/test/Transforms/InstCombine/known-bits.ll
    M llvm/test/Transforms/InstCombine/phi-known-bits-operand-order.ll
    M llvm/test/Transforms/InstCombine/phi.ll
    M llvm/test/Transforms/InstCombine/pr44245.ll
    M llvm/test/Transforms/InstCombine/sink-into-ncd.ll
    M llvm/test/Transforms/InstCombine/sink_to_unreachable.ll
    M llvm/test/Transforms/InstCombine/zext-phi.ll
    M llvm/test/Transforms/LoopVectorize/AArch64/uniform-args-call-variants.ll
    M llvm/test/Transforms/PhaseOrdering/AArch64/constraint-elimination-placement.ll
    A llvm/test/Transforms/PhaseOrdering/branch-dom-cond.ll

  Log Message:
  -----------
   [InstCombine] Replace all dominated uses of condition with constants (#105510)

This patch replaces all dominated uses of condition with true/false to
improve context-sensitive optimizations. It eliminates a bunch of
branches in llvm-opt-benchmark.

As a side effect, it may introduce new phi nodes in some corner cases.
See the following case:
```
define i1 @test(i1 %cmp, i1 %cond) {
entry:
   br i1 %cond, label %bb1, label %bb2
bb1:
   br i1 %cmp, label %if.then, label %if.else
if.then:
   br %bb2
if.else:
   br %bb2
bb2:
  %res = phi i1 [%cmp, %entry], [%cmp, %if.then], [%cmp, %if.else]
  ret i1 %res
}
```
It will be simplified into:
```
define i1 @test(i1 %cmp, i1 %cond) {
entry:
   br i1 %cond, label %bb1, label %bb2
bb1:
   br i1 %cmp, label %if.then, label %if.else
if.then:
   br %bb2
if.else:
   br %bb2
bb2:
  %res = phi i1 [%cmp, %entry], [true, %if.then], [false, %if.else]
  ret i1 %res
}
```

I am planning to fix this in late pipeline/CGP since this problem exists
before the patch.



To unsubscribe from these emails, change your notification settings at https://github.com/llvm/llvm-project/settings/notifications


More information about the All-commits mailing list