<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/84342>84342</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            [InstCombine] Missed optimization: fold `min` in `phi`
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            new issue
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          XChy
      </td>
    </tr>
</table>

<pre>
    Alive2 proof: https://alive2.llvm.org/ce/z/IAXE_-

### Motivating example 

```llvm
define i1 @src(i32 %a, i32 %b, i1 %c) #0 {
entry:
 br i1 %c, label %then, label %loop

then:
  call void @dummy()
 %min = call i32 @llvm.umin.i32(i32 %a, i32 6)
  br label %loop

loop:                                                
  %ind = phi i32 [ %min, %then ], [ %b, %entry ]
  %cmp = icmp ult i32 %ind, 6 
  ret i1 %cmp
}
```
can be folded to:

```llvm
define i1 @tgt(i32 %a, i32 %b, i1 %c) #0 {
entry:
  br i1 %c, label %then, label %loop

then:
  call void @dummy()
  br label %loop

loop: 
  %ind = phi i32 [ %a, %then ], [ %b, %entry ]
  %cmp = icmp ult i32 %ind, 6                                    
  ret i1 %cmp
}
```

### Real-world motivation

This snippet of IR is derived from [linux/kernel/power/snapshot@snapshot_read_next](https://github.com/torvalds/linux/blob/67be068d31d423b857ffd8c34dbcc093f8dfff76/kernel/power/snapshot.c#L2244)(IR from llvm-opt-benchmark).
The example above is a reduced version. If you're interested in the original suboptimal IR and optimal IR, see also:https://godbolt.org/z/135zx6s3K

**Let me know if you can confirm that it's an optimization opportunity, thanks.**
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJy8VcFu4zgPfhrlQjRwKNuxDzlkmt9A8c9cij3MrZAtOtZWlgxJTps-_UJy0k6L3dkpsLuBkJAmQ38kP5HCe3U0RDtWfGHFYSXmMFi3-347nFetlefdXqsTIUzO2p7xPQwhTJ7xPcOGYSOSda31aVxbd2TYdMSweWHY3O2__-_hhmUHlu0v38iXA99sUCcRlDkCPYtx0gTvHMtsOTHu8khSrwyB2gDLM-86hpXiCAwLwfAWLnKb5E0UO4Y1MOQZsO2XJQaZ4M4RetKgdW-ut6BFSzpqYSDz7oG2dvoRXXJ4jQKd0BpOVsmITM7jeGZYMawvdobFqAwwflg8E9I8ZbaeR2XWiuOfJFO-RYhA_xJM0vkePvm5hmZYKCMTumlQC7jiywV0xHIpCLDikNTF2F5MqaLJ9havG6cUT0Vh1uHaG2Vk_Ff5-m5H4dqA8ZrT9vCBAYvaCQMtQW-1JAnBvpb_1_gSjuEf4Mt_RJhfavff90_8S937BLk-0eCPA-KehL55sk5LGC-zwpofXX8blAdv1DRRANvD3T0oD5KcOpGE3tkxZquVmZ8ZNo_kDGmGzWSfyDFsvBGTH2yIw-QiPjgS8sHQc0jVqt4PuqMKw9yuOzsybIJ1J6GlZ9hc39Bq2zJsym1LWVlJvpE58rYqtn0vq47nsu26rOZ9Jfu-35Y_w7TuGPKviHkeSYHV3f2STyT3jZ3CTUumG0bhHhnW62s56HWSitaeKFZDgCM5dyThRM4ra9Zw18PZzgy3jkCZQI58IAnKQBgIrFNHZYQGP7d2CmoUOhZWGAlvaqSBJwKhfbyHH8pkZWt1uOyCuAY2vHh5Lj3___tGx_OVAowEj8Y-gUrAIF70zppeuRHCIAKowHDrQZgFgXpJTAA7TdaF2ahwjnjCIMyjXy9hV3LHZc1rsaLdZpvVFc_Kiq-GHXVYZ7wlqmUvZEebPM-o7vK-79say26ldphhnvFsuymLKuPrbc6xlUVX9gVhXRHLMxqF0q8Lb6W8n2lX5TzHVbq1Pm1SRENPkIwMMS5Wt0v9a-ejj-Nf-eDfogQVdFrBd8aHWzu2yhArDvBNeU_yXerx9sc5CKzM4owus9g9VmbToFiZrWandz-hbpqQy8_N5Ozv1AWGTQIa6ZwS-SMAAP__V3xMug">