<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/111205>111205</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[amdgpu] some VOP3 instructions not defined as commutable
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
yxsamliu
</td>
</tr>
</table>
<pre>
some VOP3 instructions are commutable but are not defined as such. e.g.
```
# RUN: llc -mtriple=amdgcn -mcpu=gfx1030 -run-pass=machine-cse -verify-machineinstrs %s -o - 2>&1 | FileCheck --check-prefix=GCN %s
---
name: test_machine_cse_op_sel
body: |
bb.0:
%0:vgpr_32 = IMPLICIT_DEF
%1:vgpr_32 = IMPLICIT_DEF
%2:vgpr_32 = V_ADD_NC_U16_e64 0, %0, 0, %1, 0, 0, implicit $mode, implicit $exec
%3:vgpr_32 = V_ADD_NC_U16_e64 0, %1, 0, %0, 0, 0, implicit $mode, implicit $exec
DS_WRITE2_B32_gfx9 undef %4:vgpr_32, %2, %3, 0, 1, 0, implicit $exec
...
```
V_ADD_NC_U16_e64 is commutable but are not merged by machine-cse.
This issue was found during reviewing https://github.com/llvm/llvm-project/pull/106920
Two changes are needed:
1. td files need to be updated for commutable VOP3 insts
2. SIInstrInfo::commuteInstructionImpl need to be fixed to handle op_sel
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJycVEuP2zYQ_jX0ZSCBD8mODjpsrHVhoN0GySY9ChQ5kthSD4ik1_vvC0lee3ebAGkAYcgZjOYbzuOTzpmmR8xJ-pGkxUYG3w5T_nx2srMmbKpBP-du6BC-_flJgOmdn4LyZugdyAlBDV0XvKwsQhX8YuoHDxpr06MG6cAF1caAcRMTWhB6d5FbevlWlQv4_PWBiDuwVkHU-cmMFokoZKcb1UPUqTEQUTT1mVFBIZpCH43SOSKKTqrW9BgphxCdcDL1c3SxLfk6IDx1EA0QASfinvAtA7Lbw8FY3Leo_oEoUvMZjRPW5kxE8dv-YflrTS-KovXSyw7nJD06X14wSuWwHMbSoV2d5prNTmS3Xw0AVRVTIu5eVJhjz4ZTM06l4EBEAcc_Pv1-3B8fy-L-8MaR_awjf-f4rbwrivJhX35l2xK3CVDC9ys0318VdlUWYbrRGmU8EJ50g8b3NjyjuqASnoqfhWSvIekvQwJA8aX86_Px8Z6XHwUvm_qcQeg11nPg5JbOBerlFFc09l3cG0Ycx9-f0UX-54HG_WgJOpwa1FA9w6sJfbMFj61xYJwLCE_SQT2EXoMOk-kbmPBk8Gm-td6Pbp4efiD80BjfhipWQ0f4wdrTyxGN0_A3Kk_4YQzWEn5gdJvxN8k_Pg2gWtk3uG5vj6hRXwdzlSwGr6E2Ft3iAH6ACiGMWnrUUA_T6wdfaeGyKjyGL8fjvHbHvh7m0OJudcfjjTyO3WhfB6_Neb23stcWYV2njc6FzkQmN5izHf9Ad5xl2abNK7WrRJ1SllBOtyrN0i1PaIJZmkj5AbONyTnlCaM04ZQKlsVM7xTPKsW13HKZUZJQ7KSx8Vy6eJiazdKGnDHGabqxskLrFlLkvMentUmE85kjp3ypdxUaRxJqjfPuFsYbbxc2nYlrDCQt4Af0-Y4nbzXdhMnm_7vpS4Zubvv6hFPO_w0AAP__SfPBeQ">