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

    <tr>
        <th>Summary</th>
        <td>
            [AMDGPU] SDag fails on function in GlobalISel/bswap.ll
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            backend:AMDGPU
      </td>
    </tr>

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

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

<pre>
    The function s_bswap_i64 in the codegen test GlobalISel/bswap.ll fails to compile if you attempt to use SDag instead of GlobalISel.
It happens on  at least gfx900, gfx1010, gfx1100
The error appears after Slot index numbering (slotindexes)
```
Use of %9 does not have a corresponding definition on every path
LLVM ERROR: Use not jointly dominated by defs
```

However, the code looks good after amdgpu-isel and appears to use the undefined instruction after si-fix-sgpr-copies. 
```
# *** IR Dump After AMDGPU DAG->DAG Pattern Instruction Selection (amdgpu-isel) ***:
# Machine code for function s_bswap_i64: IsSSA, TracksLiveness
Function Live Ins: $sgpr0 in %0, $sgpr1 in %1

bb.0 (%ir-block.0):
  liveins: $sgpr0, $sgpr1
  %1:sgpr_32 = COPY $sgpr1
 %0:sgpr_32 = COPY $sgpr0
  %3:sgpr_64 = REG_SEQUENCE %0:sgpr_32, %subreg.sub0, %1:sgpr_32, %subreg.sub1
  %4:sreg_32 = COPY %3.sub0:sgpr_64
  %5:sreg_32 = S_MOV_B32 66051
  %7:vgpr_32 = COPY %5:sreg_32
  %6:vgpr_32 = V_PERM_B32_e64 0, killed %4:sreg_32, %7:vgpr_32, implicit $exec
  %8:sreg_32 = COPY %3.sub1:sgpr_64
  %10:vgpr_32 = COPY %5:sreg_32
  %9:vgpr_32 = V_PERM_B32_e64 0, killed %8:sreg_32, %10:vgpr_32, implicit $exec
  %11:vreg_64 = REG_SEQUENCE killed %9:vgpr_32, %subreg.sub0, killed %6:vgpr_32, %subreg.sub1
  %12:sreg_32 = COPY %11.sub1:vreg_64
  %13:sreg_32 = COPY %11.sub0:vreg_64
  $sgpr0 = COPY %13:sreg_32
  $sgpr1 = COPY %12:sreg_32
  SI_RETURN_TO_EPILOG $sgpr0, $sgpr1

# End machine code for function s_bswap_i64.

Processing ...
1 : %12:sreg_32 = COPY %11.sub1:vreg_64

    S:1
    SV:0
    SP: 1
Score: 0
Sibling:
2 : %13:sreg_32 = COPY %11.sub0:vreg_64

    S:1
 SV:0
    SP: 1
Score: 0
V2S copy %12:sreg_32 = COPY %11.sub1:vreg_64
 is being turned to VALU
Processing ...
2 : %13:sreg_32 = COPY %11.sub0:vreg_64

    S:1
    SV:0
    SP: 1
Score: 0
V2S copy %13:sreg_32 = COPY %11.sub0:vreg_64
 is being turned to VALU
# *** IR Dump After SI Fix SGPR copies (si-fix-sgpr-copies) ***:
# Machine code for function s_bswap_i64: IsSSA, TracksLiveness
Function Live Ins: $sgpr0 in %0, $sgpr1 in %1

bb.0 (%ir-block.0):
  liveins: $sgpr0, $sgpr1
  %1:sgpr_32 = IMPLICIT_DEF
  %0:sgpr_32 = IMPLICIT_DEF
  %16:vgpr_32 = COPY %19:vgpr_32, implicit $exec
  %15:vreg_64 = REG_SEQUENCE killed %16:vgpr_32, %subreg.sub0, %14:vgpr_32, %subreg.sub1
  %18:vgpr_32 = COPY %15.sub0:vreg_64
  %5:sreg_32 = S_MOV_B32 66051
  %7:sgpr_32 = COPY %5:sreg_32
  %6:vgpr_32 = V_PERM_B32_e64 0, killed %18:vgpr_32, %7:sgpr_32, implicit $exec
  %17:vgpr_32 = COPY %15.sub1:vreg_64
 %10:sgpr_32 = COPY %5:sreg_32
  %9:vgpr_32 = V_PERM_B32_e64 0, killed %17:vgpr_32, %10:sgpr_32, implicit $exec
  %11:vreg_64 = REG_SEQUENCE killed %9:vgpr_32, %subreg.sub0, killed %6:vgpr_32, %subreg.sub1
 %14:vgpr_32 = COPY %11.sub1:vreg_64
  %19:vgpr_32 = COPY %11.sub0:vreg_64
  $sgpr0 = IMPLICIT_DEF
  $sgpr1 = IMPLICIT_DEF
 SI_RETURN_TO_EPILOG %19:vgpr_32, %14:vgpr_32
```



</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzsWFuP4jwS_TXmpQRKnAvkgYdMc1mk7mmWdLe0T8hJTPC0saPYYZp_v3ISIM1tYTTSvnwSgsRUHZ9TLpcrIUqxTFA6RN4P5I06pNRrWQwjpnb5uhPLdDd8W1NYlSLRTApQy1j9JvmS-S4wAXpNIZEpzagATZWGKZcx4bOIcoQnlWmPc1gRxhVoCYnc5IxTYCvYyRKI1nSTa_NPqShEI5IBE0pTkoJctcB6yBohK5xpWJM8p0KBFABEA6dEachWX4FlIfxkrmzLPlzallV7GhG0KGQBxp8UCshK0wIiLjUwkdIvEOUmpgUTGSA8UFzqapgqhIMaA_lW86lu3xU1JBH2AkglVSCkobelQCCRRUFVLkVq8FK6YoJV8ZMC6JYWO8iJXtc4z88fLzBeLF4XyAnBoBqgX5IJzXeQyg0TRNMU4p0BUhe51N__kr8NuBG_XxjgUn4qyKRMG8Vkk2Z52WWKciAiPcSjWQPjWIqKMU2rxSjKeulrd8W6K_bVVVledBOZM6p6cJkSdgDhsP7AbAGjcpNDWIGEL6Pp_B1G4bSLnPEonMLcpEIhYNaaMKKc1lcID1q0EQ6OyMgJj_O9kGTNRKN8JYuLeWuiPFNRFJo4vRUk-VTPbEsFVU1sJ3snM2wYGQ-EXaPZMlmPsFdlWDNmN2N2ey3iuGcZ3gh7rOjGXCafPcuk0p4vAGdbyr6jt1H3ZhWyE5qxpYMBOSN4ep3_59SuInXdzGrBOXs7363sFuPpMhr_-33882l8glMT8lQZFzTrqTJuKLYpndm0qZtwq4JmJ5w8pwY7EGm5eCcu0fLl9WP5w8Hg-5bXBu8jJ9yeC24jtKz9E-uP5Xy8eDHAS-q7UCn7ZJzT9IR4I7A1mxlhm5yzhGkTYfpFk9ZMg1ui7YuibeshLcFDWgZnWtrT_Q8xtiG8Nd6X0uU4SfAd8Txrjqb-DdNveY-vBNK295FsiLWdnJtO1iWnZm9_s3YuBb7Z8N8M8blhNFsuxm_vi5_Lt9fleD57fp3e2OPHAjYWKWzuKWK9tue8kAlVyhw1vV7zj-EY_kkM9xIAIuSEduv2Azmh1bqfmxkagyiRBTX3jUHEYs5Edqh2-EDnwdW5TOchLh84gkTmuz_KKKYgpiayuizMiaglfITP79cD_5eVPhr4b2If3Qk3xd460KMZTNgXRNP5AuquoGqiznqFf47u2cv8efY0e1uOxpOW2enRfcXMPj3DDisa3F_PvfvquX2rSh_aAPfeUj64xty7WpUf7AQutD5_pRNoU2-1Auq-aF_rUWrd5wVnfzjfr-axXsDun6mxrfvl_H-agZNMu78XOI3NY73A5V3Y6gEuGFw--s826Oneuf5UV3930qGTBk5AOnRo-wPLd_w-djvrYeI4QRy7lp-6cUoSyyPuyg5iGvT9gU-9pMOG2MKO5VquHTjYcnuxvfKttO-uSN9b-f0-ci26IYz3ON9uerLIOkypkg59O3D8Dicx5ap6P4BxTJJPKlLkhPUjHMIYeaNOMTSu3bjMFHItzpRWRzDNNK_eLzQu3qh-0K9fCkhxrPRMXH5_0CkLPlxrnZuCi_AE4UnG9LqMe4ncIDwxUzU_3byQv2iiEZ5UIhTCk0rHfwMAAP__Dp-8dQ">