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

    <tr>
        <th>Summary</th>
        <td>
            Optimizations don't exploit `llvm.range` metadata if it has more than 1 pair
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            missed-optimization
      </td>
    </tr>

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

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

<pre>
    `f1` is optimised to `ret i1 false`, but `f2` is not:
https://godbolt.org/z/jbhYKEsTx
```llvm
define noundef i1 @f1(ptr %arg) {
  %load = load i8, ptr %arg, align 1, !range !1
  %cmp = icmp eq i8 %load, 5
  ret i1 %cmp
}

define noundef i1 @f2(ptr %arg) {
  %load = load i8, ptr %arg, align 1, !range !2
  %cmp = icmp eq i8 %load, 5
  ret i1 %cmp
}

!1 = !{i8 1, i8 5}
!2 = !{i8 1, i8 5, i8 6, i8 9}
```

Comparing to a value less than all the pairs (eg `0`) or greater than all the pairs (eg `10`) does optimize as expected.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJy0Uz1v4zgQ_TWjZhCDHH0XKpzk3KS45porKXMkMUeJOpIKsvn1C8oyNlggW-0ChjmQ3hu-Gb2nQjDjwtxB-Qjlc6a2ODnfvcys_jNL1jv9rYNKDBIqgSagW6OZTWCN0SFUwnNEI3FQNjBUAugJ-y2mNwMdlMVFyM8gzlOMa0glXYAuo9O9s_Hk_Ah0-QC6vPbTvy9_hX_eQZxTr_1n7dsM4qx5MAvj4rZF85CuhCKpomaNHoFKldq0CPUjiDOmJ9YpjZA_416YJmn7DH5CZc24oEwlkPRqGTkV8t7hOq97A5MK_h9Nc--bKOUOOxZwQyfh9XP6_0ox_RHF9FsUp9F3NpCE-tE0t4tMg-WBIUlfAW5ndZztQbh_xdsFT25elTfLmMyj8E3ZjdFyCBgntaCyFuPEuCrjAwI1PCYj7Xxq0XkcPavI_pdwecdrx3e_fjCqgPy-8jWyPmW6y3WbtyrjTtZ5npeyKGQ2dfVAvaaBmEkWbaOGoriqXl7zoaiFrnVmOhJUSBIFUS7y6qR1WbZC9pVqdCGLFgrBszL2lHybvJ2ZEDbupGxqUWVW9WzDHjai2YTA-uGQqKJxCxClFPou0R_6bQxQCGtCDD8aRhMtd39_YgXUiVrHNKJ1Zs_fjt8dknI4c1RaRYVmQBNxUgFn5_m2SbnvMNu87X7KqInT1p-ubga67Em8HQ-rd698jUCXfbwAdDkmfOvoewAAAP__7tBEpQ">