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

    <tr>
        <th>Summary</th>
        <td>
            NVPTX Backend crashes when using atomic thread fence builtins
        </td>
    </tr>

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

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

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

<pre>
    Using thread fence atomic builtins causes the backend to crash. Shouldn't we be able to replace these with the NVPTX fence builtins?
```
void foo() {
 __atomic_thread_fence(__ATOMIC_RELEASE);
}
```
```
clang++ foo.cpp --target=nvptx64-nvidia-cuda -march=sm_70
clang++: warning: argument unused during compilation: '--gcc-toolchain=/opt/compiler-explorer/gcc-snapshot' [-Wunused-command-line-argument]
fatal error: error in backend: Cannot select: 0x55aa0f0fcab0: ch = AtomicFence 0x55aa0f013d40, TargetConstant:i64<5>, TargetConstant:i64<1>
  0x55aa0f0fc9d0: i64 = TargetConstant<5>
  0x55aa0f0fca40: i64 = TargetConstant<1>
In function: _Z3foov
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace, preprocessed source, and associated run script.
Stack dump:
0.      Program arguments: /opt/compiler-explorer/clang-trunk/bin/clang++ -gdwarf-4 -g -o /app/output.s -mllvm --x86-asm-syntax=intel -S --gcc-toolchain=/opt/compiler-explorer/gcc-snapshot -fcolor-diagnostics -fno-crash-diagnostics --target=nvptx64-nvidia-cuda -nogpulib -march=sm_70 -g0 -O3 -S <source>
1.      <eof> parser at end of file
2.      Code generation
3.      Running pass 'Function Pass Manager' on module '<source>'.
4.      Running pass 'NVPTX DAG->DAG Pattern Instruction Selection' on function '@_Z3foov'
 #0 0x000055aa072086cf llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x3adc6cf)
 #1 0x000055aa072066fc llvm::sys::CleanupOnSignal(unsigned long) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x3ada6fc)
 #2 0x000055aa07159547 llvm::CrashRecoveryContext::HandleExit(int) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x3a2d547)
 #3 0x000055aa071fe362 llvm::sys::Process::Exit(int, bool) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x3ad2362)
 #4 0x000055aa04acbc8f (/opt/compiler-explorer/clang-trunk/bin/clang+++0x139fc8f)
 #5 0x000055aa071623ca llvm::report_fatal_error(llvm::Twine const&, bool) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x3a363ca)
 #6 0x000055aa08228130 llvm::SelectionDAGISel::CannotYetSelect(llvm::SDNode*) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x4afc130)
 #7 0x000055aa0822d472 llvm::SelectionDAGISel::SelectCodeCommon(llvm::SDNode*, unsigned char const*, unsigned int) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x4b01472)
 #8 0x000055aa082261e7 llvm::SelectionDAGISel::DoInstructionSelection() (/opt/compiler-explorer/clang-trunk/bin/clang+++0x4afa1e7)
 #9 0x000055aa08231c29 llvm::SelectionDAGISel::CodeGenAndEmitDAG() (/opt/compiler-explorer/clang-trunk/bin/clang+++0x4b05c29)
#10 0x000055aa082349ae llvm::SelectionDAGISel::SelectAllBasicBlocks(llvm::Function const&) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x4b089ae)
#11 0x000055aa0823709f llvm::SelectionDAGISel::runOnMachineFunction(llvm::MachineFunction&) (.part.0) SelectionDAGISel.cpp:0:0
#12 0x000055aa066302f0 llvm::MachineFunctionPass::runOnFunction(llvm::Function&) (.part.0) MachineFunctionPass.cpp:0:0
#13 0x000055aa06b48770 llvm::FPPassManager::runOnFunction(llvm::Function&) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x341c770)
#14 0x000055aa06b488e9 llvm::FPPassManager::runOnModule(llvm::Module&) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x341c8e9)
```
Godbolt link https://godbolt.org/z/TWcdb8GTc.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJysWEtv4zgS_jX0pSCDImU9Dj74EWcb2J4OJtmd3b0YFEXJnFCkQFKJe3_9gpKdWO6gMztjoBux-Kj6quqrKpLMOdloIZZosUaL7Yz1_mDs8vdDXwqbzkpTfV_-w0ndgD9YwSqoheYCmDet5FD2UnmpHXDWO-HAHwSUjD8LXYE3wC1zhzk8HkyvKo1I5uFVQCmAlUqEBVZ0inER9jkBr9IfBhG__PPh6V8nTWcViO4Q3iK8Qik-_Rs-X4ysoDYGkRyRAlC2Hsdhvx9B7kfg-0EcIvl-v3r69vXLZv_r3d_vVo93iBSInjahbPuhkqtPrphuEFkjsg6q57zrIIo8s43wiG71S-ePaRLpF1lJFvG-YhC1zPIDolvX7rMfxSC6gldmtdRN-Mls07dCe-h170QFVW9DCLhpO6mYl0aHVYhkUdRwHnljFD8wqRHdIrIznUdkNy4WNhLHThkrLCK7sNhp1rmD8YhkgBbr6LdRR8RN2zJdRUpqEZ0BoMXJITXzTIGw1tigevgBUp-jHcY2TGvjwQkluA8D-LhYMIZrXHNW4jDCD4DoFlZDYHZDfN8WxbRKMCIbeBr8uDHaeaaDIJkmiG4WiN79ZDoO02PkLxUX1aBYpsmg-XrzKPXHbSz5-bZ3bV801L3m55js_0NrY17GuYeBYOD6spUeGJR9EyhvrA_kP3jfOURXiOxCaKQ_9OWcmxaRnVIv5z9RZ83vwaFkJ53rhUNkB0xXIDVXfTXkzphoQyy8ZYHlG-is6KzhwgX-ONPbcTjsZM4ZLpkXFdheg-NWdn4-Qn70jD9D1bddQDYM4TnCxYM1jWXtGzPdSMCfcG1gd-Rtr58R2ZVSn8dOiRM11SuzdZRA1EBkgjDWdUFk77vezx1EbXAARNExTyPm2sh9154dEd1K7YWC6BH-Av8hqrlRxkaVZI02zkvuIKq1iQZvToc_SW5tmq5XsrxKc4gaDNE3GpAiujlF4cycOPgV0Y0wNaJ30DHrhAXmIVRPU0MtlRhXkrByYyoBjdDCjgVgmKFh5tdeh8IBHXMuFIXdiY_wEAa-Ms2aYH0GRkNrql6JsGoCiGSn-CcfCRzr8XZ1HyF6t13dwwPzXlgNX7Tzth-VPQ55H5CNms5ZMehK8DkxSHZKN0QoBnzEGOMh7TKC85TXMHCfrhBdue9u_PFgpfYDM59Geufviyx73RvnrWAtImmguNR-6AShIfx5fiKyxkfKKp7yOrSIN9DxFeg0rflHoDdKMN133_SjbDRTiOS9HnptBcoELTeDyNKaTyCSCcR4USyS7ALiJvD7V8HNi7DfN0Z7cfTjzN-YrpS4O0qPSH5TP5JqkWQTkHQKshY0JR8Hf6hi48cltA2Uxqgb-pHQlEwgJpcQE8ZLntc3URbToub5lFeLqT9SQjm78MfYN_ZDH96PffgyDZ5epRbAQ4c6pcFtnUNTytkEb3qJNyckjym-wPtWDrar-y-PQp2oN5wR_i38OD0x4XH7i6kEIqtboU5YzWOKJ6izK9RVkpFPUY-joQBvTNuGCvcx7A28pTg_MHsOx3TmhmmVlDhOsiln8ysD01hknxq4NReV_KKQ5zcMBYvFtAAUU6Q05qT4nECmEvdCr3R110q_Xd3fEmSJF5wUbyBDscdXIJOCiT_Il5VSa-YkXyvDn92EM28d-j1hb2ZCXjAxMSG-MiHDRf2pCbbX3_RXxg9SizPaiQk_zJ1tmHfM-nnIOrgWHS5KiK7w8P8N36RbpSnFpL4sJFeKwpnmAuKH2H4K6gN5H-OaNKi0TPIsu8S1ewhbz6er_xvRX6_JScyzDE9CnVxDzkXxByB_HQ6F0_Cehm4KNxcXyTW9Ut-bqjTKg5L6-fpmNE7NjW0Q2f0Xkd3Tb7wq8_snPp9VS1oVtGAzsYzTLM_jnGTx7LDkIl6UuChpTEnBOK9JXoqi4BVJSpzm-UwuCSYU0ziJc5LQeJ4STuK4WOBUJHVeMJRg0TKp5sEpQflsuH8t0ziJ45lipVBueDUh5P0SPJyUESFosZ3Z5XB_K_vGoQQr6bx7l-WlV2I5HqzXpxeT4d4hHLwehIZ-eHQ5vbNM3l7OLyKz3qrln79EDnb8LwAA__8E2o3u">