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

    <tr>
        <th>Summary</th>
        <td>
            GlobalOpt breaks !callee metadata
        </td>
    </tr>

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

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

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

<pre>
    Running `opt -passes=globalopt` on the example below changes the !callee metadata to `!0 = distinct !{ptr @test, null}`.

```llvm
declare i8 @test()
declare i8 @test2()
@fptr = external global ptr

define i8 @fn() {
  %p = load ptr, ptr @fptr, align 8
  %ret = call i8 %p(), !callees !0
  ret i8 %ret
}

define i8 @keep_ref() {
 %ret = call i8 @test()
  ret i8 %ret
}

!0 = !{ptr @test, ptr @test2}
```

Discovered by @dnet.
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJx8k9uOnDAMhp_G3EQ7CuY4F1zMLppeVuoLVIEYJt1MEiVmD29fAbO7bTWqFAki-7N_7B-VkpkdUQfVI1R9pha--Ni5xflgfaCUDV6_dz8W54ybBdTSBxYPQaVECYp-tn5Q1geGWgrvBF9I0Ju6BktiIOtfxXhRbqa0RQDzUVlLJK7ESitWgv1aFDCXAopeaJPYuJHXVGgeA0cBpWRKDPgk3GItND3U8gDytJ5a7sfalyvIk6bRqkjCtF9YC3i8G8LPGJRy2loVvaA3puiUFfunicBx76VpMu6Dn9wOC2geQZ6EAKzCxluv9Abhk7jJn25XZc3sRPuRH4k3Yh3JVharcJOET1-zSuur3KCV2BMj8aqq6e9oeyYKPyNNfyu81_CfEf2nweeC7u7ljyvekI_F7Hhv0uhfKJIWw_uaqh3xIdNdoY_FUWXU5U1RFceyyMvs0jWFHFutapU3OA3TUI8SG1UOZamP7diMmelQYpkjtnlRtUV5yKUudH3Ma1SoG6WglHRVxh5WYxx8nDOT0kJdjjnWVWbVQDZtpkd09Cq2KCCu_0DsVuhhWOYEpbQmcfoqw4Ytdd82b3wPLIZI6jndcXa2RNtdmEOC4gR4BjzPhi_LcBj9FfC8OXZ_PITof9HIgOdNRwI834S-dPg7AAD__xkoE0o">