<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">