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

    <tr>
        <th>Summary</th>
        <td>
            Mergefunc removes functions that are on llvm.used / llvm.compiler.used list
        </td>
    </tr>

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

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

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

<pre>
    For example, running:

```llvm
; ModuleID = 'a.ll'
source_filename = "a.38475855-cgu.0"
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

@llvm.compiler.used = appending global [2 x i8*] [
  i8* bitcast (void ()* @f to i8*), 
  i8* bitcast (void ()* @g to i8*)
], section "llvm.metadata"

define void @f() unnamed_addr #0 {
start:
  ret void
}

define internal void @g() unnamed_addr #0 {
start:
  ret void
}

attributes #0 = { "target-cpu"="x86-64" }
```

through `opt -S -mergefunc`, results in `g` being removed, even though it was present on `llvm.compiler.used.list`:

```llvm
; ModuleID = 'a.ll'
source_filename = "a.38475855-cgu.0"
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

@llvm.compiler.used = appending global [2 x i8*] [i8* bitcast (void ()* @f to i8*), i8* bitcast (void ()* @f to i8*)], section "llvm.metadata"

define void @f() unnamed_addr #0 {
start:
  ret void
}

attributes #0 = { "target-cpu"="x86-64" }
```

</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJztVMtunTAQ_RrYWCAwzyxYJLmK1EVW-YDIwMB1Y2zkx83N33dsuEmTdpMqqrqoBMYznjnjeRx6Nb50d0oTOLNlFRDRW6KdlFzOUXEdZYcou6x1tj1CnJZdVdyQezU6Ad8OJCrwpQ1LhcDPZmCU0wM8TlyAZAvsNpSlRVs2VVtVyTC7NEPVZm-ZnsGSkVkm2Ity9uIByYLXgWSlTYabgobFi_l70e_qMiwJv2ym1jvltE1k6zf1xQfPHlD9Mb7VHEtxiX1u60c0dPJJqmeZCC7dOZmle_Xa1zJUJh3UsmK-OnUGxoDB1hXkiBUls1A9EySqbig5E46Br6Pq4OUNg2w60nM7MIPZ0_ak-Oi_Eb3yJxhlIlbtvl53Sz7hO7_z3e5dHTyIgcFyJX3CIY0FLPN9-JDlCBOXQDZkvMuGTnBisL_jIxtHjRBFRqJmz8lgUe3rLBGiscDefUdtDr-B59KCllipS5z5i-Mwiz3unQWzo_hWNzc--20GkmENDS4O2wQkOEuUkjeYCxt-RrVHrdx8JKhWqyXJA0kWQLTJycGbem6BccIazNBbzfiSHvxoaFjUCUZvAyeQxB4DFLfkmRmyoh9IS1Rw-3XOUsGN9SH-c_bvcfZPuPppn3-JnV_NmnjsivGquGKx5VZAd38hy84GQ7zgEzfIB2YJ0-ApEEqwtYrekd900LMhdlp0R2tX49Ojd_jM3B5d721RCJTYPsmq1XesMIrcGAcGN1VF6zI-dgWDoWmhyqCHLJuKHKqK5c2UlVNNs4nFgvUgTOf_4ZRKeCYBwlehOsS8oxmlWZWVeZG3eZkWY9HX9TBMOWv6HI3KDBbGRRqyUHqOdReu1LvZ-PHETMzbITOGzxIghEN85vA_oTu7cGaeVBxCd-HqPwBhFTmA">