<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/129856>129856</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
Dead calls with convergence token uses are not deleted
</td>
</tr>
<tr>
<th>Labels</th>
<td>
backend:AMDGPU,
missed-optimization
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
arsenm
</td>
</tr>
</table>
<pre>
Calls with convergencectrl bundles appear to never be deleted when unused:
```
; RUN: opt -S -mtriple=amdgcn-amd-amdhsa -O3 %s
; The calls should be deleted
define void @dead_readfirstlane_convergencetoken(<2 x i32> %src) convergent {
%t = call token @llvm.experimental.convergence.entry()
%vec = call <2 x i32> @llvm.amdgcn.readfirstlane.v2i32(<2 x i32> %src) [ "convergencectrl"(token %t) ]
ret void
}
```
In this example, every pass is a no-op. I would expect instcombine or any of the DCE passes to erase the entry token and readfirstlane call
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJx0U0uPszgQ_DXm0gIRG0g4cEjCl9Uc9qHdnfPI2E3wjrGRbTKT_fUrexjNQ_tJRkh-VFVXdXPv1dUgdqQ-kbrP-Bom6zruPJo5G6y8d2eutYcXFSYQ1tzQXdEIFMFpGFYjNXrgy4LcQbBg8IYOBgSJGgNKeJnQwGpWj5KwIynTasptlUfCTvDn42-EHQHsEiD_C_I5OLVoJKzns7wKk_NZxm_yHPLfGRBa-w2JneDvCUEkjX6yq5af2El5lDgqg3CzSgKpSolcPjnkclTOB80NPn0qKthnNIQeCDtTeAXFKGE_Ep0ThLYf9Qcg-xMpjxAPAxDWJwmQACKP1re5wNcFnZrRBK6LTzQFmuDukYe27yA3FB8w3_g3uDczii_qixuNt34umdQnIJR-S47Q-GZTS-vwdrNPYhyGZFe0d9__T2Ll8cFAmJQHfOVzDIqeIeZ-h4V7D8oDB2NzuxTwAC8pk2iFCKCMD8LOQ4zEOuDmDnaEMCH05x_pNfrYRui4x7SfrNp85UbCl-qTW5nsmGxZyzPsdvtqt2v2dXXIpk5WotoPrB1Y1ezqZqxqJquaNoOQDMdmzFRHS1qXrKzLlrXloWj3Y82bsZHyIOR-PJCqxJkrXST_rbtmyvsVux1tD3WTaT6g9ml0KB24eEYTm_z4a__LH4_J4jOhdFbeo8ztEtSs_uVBWRPP6j5zXcTNh_XqY8bKB__BFFTQ2PXI5dbd3ydwM2WNlnGHYGx47_tsdbqbQlh8nDl6IfRyVWFah0LYmdBLJNl--eLsPygCoZdUmyf0spV36-h_AQAA__9bClIO">