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

    <tr>
        <th>Summary</th>
        <td>
            [InstCombine] `range` attribute should be dropped in `foldIsPowerOf2OrZero`
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            miscompilation,
            llvm:instcombine
      </td>
    </tr>

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

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

<pre>
    Reproducer: https://alive2.llvm.org/ce/z/u62KKP (Please use latest alive2 with https://github.com/AliveToolkit/alive2/pull/1097)
```
define i1 @src(i32 %x) {
  %t0 = tail call range(i32 1, 33) i32 @llvm.ctpop.i32(i32 %x)
  %cmp = icmp ne i32 %t0, 1
  %notzero = icmp ne i32 %x, 0
  %r = select i1 %notzero, i1 %cmp, i1 false
  ret i1 %r
}

define i1 @tgt(i32 %x) {
  %t0 = tail call range(i32 1, 33) i32 @llvm.ctpop.i32(i32 %x)
  %r = icmp ugt i32 %t0, 1
  ret i1 %r
}
```
```
----------------------------------------
define i1 @src(i32 %x) {
#0:
  %t0 = ctpop i32 %x
  %#range_0_%t0 = !range i32 %t0, i32 1, i32 33
  %cmp = icmp ne i32 %#range_0_%t0, 1
  %notzero = icmp ne i32 %x, 0
  %r = select i1 %notzero, i1 %cmp, i1 0
  ret i1 %r
}
=>
define i1 @tgt(i32 %x) {
#0:
  %t0 = ctpop i32 %x
 %#range_0_%t0 = !range i32 %t0, i32 1, i32 33
  %r = icmp ugt i32 %#range_0_%t0, 1
  ret i1 %r
}
Transformation doesn't verify!

ERROR: Target is more poisonous than source

Example:
i32 %x = #x00000000 (0)

Source:
i32 %t0 = #x00000000 (0)
i32 %#range_0_%t0 = poison
i1 %cmp = poison
i1 %notzero = #x0 (0)
i1 %r = #x0 (0)

Target:
i32 %t0 = #x00000000 (0)
i32 %#range_0_%t0 = poison
i1 %r = poison
Source value: #x0 (0)
Target value: poison
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzEVl1v6ygQ_TXjF9QIhtixH_yQ29xIV_ehVbdP-3KFbZKwi40FOE3761dgN0nTj22l_bCiBIZzBuYwGY9wTm07KUtIvwFi4-vD0-MDIEK6SsTgd8aWkzGpTPNY3snemmaopQW-JDvvewd8CbgGXAut9hJnWu_bmbFbwHUtAddPgOshw58_bwlgfqulcJIMThItvHSejDTyoPzuwuFW-d1QzWrTAq6XAXZvjP5T-eNmgOt-0BpwzWixACyAroAuIaPTJ04buVGdJIoRmFNna8BccSSA6QGwILD4NuJIMHlKgK-IF0qTWmhNrOi2cqIwwGvCeWBFD3Mao619b_qZ4vjS85nXuu2jWxUG4SwjytPgkJ0BO-OfpDVvgQ8BS8-wNqKc1LL2MbojPSBHQ93202QjtJPPbCufGXaSbLGaBq8l81v_P0hmTxoMW_-OYh_E8TIHLqZXn3y-lkCAnIbsfSVNjPZ0j6d1QB7F-kV_ndCALBpfxnwUMww4__vkuvT936Ua_cT18BXw719Ltq_J-0-p-3Yefiju-2HfW9G5jbGt8Mp0pDHSdYALT_bSqs0jIDv_F36_u7u5C4X2Xtht8OlIa6wkvVHOdGZwxO9ER5wZbC1fEA-i7bU8ivUszSQAP9DpCSWZnupm_P5tdHfBPar3HvkdYSJrPPCEY-c5-3rlPC3jbhfbsNOlvLE8yRz1-pdDsK_so3JkL_QQ9HvrfNNNHiHn9GONSpqSNwUvRCJLtsB8QTPGabIrsWpyWjDZFFmB9TydVyyraF7l6SadV6lIVIkU54wypHOap3RWF4wt8iJrkLKsEhuYU9kKpY-v6UQ5N8iSMaSLPNGiktpN7UCrXG3aXumYrKErwGtADEzgS9U5X5u2Up2cGgZbhqWrati6UOaV8-60jVdexz7jR-f89cRLVwQyOr4uMkqE91ZVg5fE7cygG1JJ0ljT97IhqgvQjdHND3drHqS92eCN_T1UoIwmg9XlB81DPPL4c9Vb84esQw8RI3eheRiD35f4VwAAAP__JsVxGg">