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

    <tr>
        <th>Summary</th>
        <td>
            clang target bpf crash on __sync_fetch_and_sub
        </td>
    </tr>

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

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

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

<pre>
    source:
```c
int simple_test(void *ctx)
{
    int tmp = 0;
    __sync_fetch_and_sub(&tmp, 1);
    return tmp;
}
```
with cmdline:
```
clang -c test.c -target bpf
```
compile output:
```
fatal error: error in backend: Cannot select: 0x6bbed8: i64,ch = AtomicLoadSub<(load store seq_cst (s32) on %ir.3)> 0x6bbe70, FrameIndex:i64<1>, Constant:i64<1>
  0x6bbac8: i64 = FrameIndex<1>
  0x6bbc68: i64 = Constant<1>
In function: simple_test
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: clang -c test.c -target bpf
1.      <eof> parser at end of file
2.      Code generation
3.      Running pass 'Function Pass Manager' on module 'test.c'.
4.      Running pass 'BPF DAG->DAG Pattern Instruction Selection' on function '@simple_test'
 #0 0x00007fde2f743d01 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/lib/x86_64-linux-gnu/libLLVM-14.so.1+0xe3fd01)
 #1 0x00007fde2f741a3e llvm::sys::RunSignalHandlers() (/lib/x86_64-linux-gnu/libLLVM-14.so.1+0xe3da3e)
 #2 0x00007fde2f7430ab llvm::sys::CleanupOnSignal(unsigned long) (/lib/x86_64-linux-gnu/libLLVM-14.so.1+0xe3f0ab)
 #3 0x00007fde2f66fbea (/lib/x86_64-linux-gnu/libLLVM-14.so.1+0xd6bbea)
 #4 0x00007fde2f66fb8b (/lib/x86_64-linux-gnu/libLLVM-14.so.1+0xd6bb8b)
 #5 0x00007fde2f73e007 llvm::sys::Process::Exit(int, bool) (/lib/x86_64-linux-gnu/libLLVM-14.so.1+0xe3a007)
 #6 0x00000000004136d2 (/usr/lib/llvm-14/bin/clang+0x4136d2)
 #7 0x00007fde2f67e673 llvm::report_fatal_error(llvm::Twine const&, bool) (/lib/x86_64-linux-gnu/libLLVM-14.so.1+0xd7a673)
 #8 0x00007fde2ff64e61 (/lib/x86_64-linux-gnu/libLLVM-14.so.1+0x1660e61)
 #9 0x00007fde2ff64308 llvm::SelectionDAGISel::SelectCodeCommon(llvm::SDNode*, unsigned char const*, unsigned int) (/lib/x86_64-linux-gnu/libLLVM-14.so.1+0x1660308)
#10 0x00007fde318690ed (/lib/x86_64-linux-gnu/libLLVM-14.so.1+0x2f650ed)
#11 0x00007fde2ff5ceff llvm::SelectionDAGISel::DoInstructionSelection() (/lib/x86_64-linux-gnu/libLLVM-14.so.1+0x1658eff)
#12 0x00007fde2ff5c5c4 llvm::SelectionDAGISel::CodeGenAndEmitDAG() (/lib/x86_64-linux-gnu/libLLVM-14.so.1+0x16585c4)
#13 0x00007fde2ff5b9f8 llvm::SelectionDAGISel::SelectAllBasicBlocks(llvm::Function const&) (/lib/x86_64-linux-gnu/libLLVM-14.so.1+0x16579f8)
#14 0x00007fde2ff59587 llvm::SelectionDAGISel::runOnMachineFunction(llvm::MachineFunction&) (/lib/x86_64-linux-gnu/libLLVM-14.so.1+0x1655587)
#15 0x00007fde2faca2be llvm::MachineFunctionPass::runOnFunction(llvm::Function&) (/lib/x86_64-linux-gnu/libLLVM-14.so.1+0x11c62be)
#16 0x00007fde2f87e3c0 llvm::FPPassManager::runOnFunction(llvm::Function&) (/lib/x86_64-linux-gnu/libLLVM-14.so.1+0xf7a3c0)
#17 0x00007fde2f8859b3 llvm::FPPassManager::runOnModule(llvm::Module&) (/lib/x86_64-linux-gnu/libLLVM-14.so.1+0xf819b3)
#18 0x00007fde2f87ef66 llvm::legacy::PassManagerImpl::run(llvm::Module&) (/lib/x86_64-linux-gnu/libLLVM-14.so.1+0xf7af66)
#19 0x00007fde36a2d201 clang::EmitBackendOutput(clang::DiagnosticsEngine&, clang::HeaderSearchOptions const&, clang::CodeGenOptions const&, clang::TargetOptions const&, clang::LangOptions const&, llvm::StringRef, llvm::Module*, clang::BackendAction, std::unique_ptr<llvm::raw_pwrite_stream, std::default_delete<llvm::raw_pwrite_stream> >) (/lib/x86_64-linux-gnu/libclang-cpp.so.14+0x1857201)
#20 0x00007fde36d52855 (/lib/x86_64-linux-gnu/libclang-cpp.so.14+0x1b7c855)
#21 0x00007fde35bda834 clang::ParseAST(clang::Sema&, bool, bool) (/lib/x86_64-linux-gnu/libclang-cpp.so.14+0xa04834)
#22 0x00007fde36d4eb71 clang::CodeGenAction::ExecuteAction() (/lib/x86_64-linux-gnu/libclang-cpp.so.14+0x1b78b71)
#23 0x00007fde376eab57 clang::FrontendAction::Execute() (/lib/x86_64-linux-gnu/libclang-cpp.so.14+0x2514b57)
#24 0x00007fde376423a6 clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) (/lib/x86_64-linux-gnu/libclang-cpp.so.14+0x246c3a6)
#25 0x00007fde3776445b clang::ExecuteCompilerInvocation(clang::CompilerInstance*) (/lib/x86_64-linux-gnu/libclang-cpp.so.14+0x258e45b)
#26 0x000000000041328b cc1_main(llvm::ArrayRef<char const*>, char const*, void*) (/usr/lib/llvm-14/bin/clang+0x41328b)
#27 0x00000000004114bc (/usr/lib/llvm-14/bin/clang+0x4114bc)
#28 0x00007fde372c0ed2 (/lib/x86_64-linux-gnu/libclang-cpp.so.14+0x20eaed2)
#29 0x00007fde2f66fb6d llvm::CrashRecoveryContext::RunSafely(llvm::function_ref<void ()>) (/lib/x86_64-linux-gnu/libLLVM-14.so.1+0xd6bb6d)
#30 0x00007fde372c09c0 clang::driver::CC1Command::Execute(llvm::ArrayRef<llvm::Optional<llvm::StringRef> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >*, bool*) const (/lib/x86_64-linux-gnu/libclang-cpp.so.14+0x20ea9c0)
#31 0x00007fde3728b183 clang::driver::Compilation::ExecuteCommand(clang::driver::Command const&, clang::driver::Command const*&) const (/lib/x86_64-linux-gnu/libclang-cpp.so.14+0x20b5183)
#32 0x00007fde3728b40a clang::driver::Compilation::ExecuteJobs(clang::driver::JobList const&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*> >&) const (/lib/x86_64-linux-gnu/libclang-cpp.so.14+0x20b540a)
#33 0x00007fde372a5507 clang::driver::Driver::ExecuteCompilation(clang::driver::Compilation&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*> >&) (/lib/x86_64-linux-gnu/libclang-cpp.so.14+0x20cf507)
#34 0x0000000000410f26 main (/usr/lib/llvm-14/bin/clang+0x410f26)
#35 0x00007fde2e3d2d90 __libc_start_call_main ./csu/../sysdeps/nptl/libc_start_call_main.h:58:16
#36 0x00007fde2e3d2e40 call_init ./csu/../csu/libc-start.c:128:20
#37 0x00007fde2e3d2e40 __libc_start_main ./csu/../csu/libc-start.c:379:5
#38 0x000000000040e3b5 _start (/usr/lib/llvm-14/bin/clang+0x40e3b5)
clang: error: clang frontend command failed with exit code 70 (use -v to see invocation)
Ubuntu clang version 14.0.0-1ubuntu1
Target: bpf
Thread model: posix
InstalledDir: /usr/bin
clang: note: diagnostic msg:
********************

PLEASE ATTACH THE FOLLOWING FILES TO THE BUG REPORT:
Preprocessed source(s) and associated run script(s) are located at:
clang: note: diagnostic msg: /tmp/test-cd2fd7.c
clang: note: diagnostic msg: /tmp/test-cd2fd7.sh
clang: note: diagnostic msg:

********************
```

</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJy9WVtz46gS_jXOC2WX7pcHPzhOPJNTmU1qnN3zqEKAbJ2VJS2gxPn324BsC8c-SZzZdaUqiEv3x0fT3UDe0NepaDpO2MifjZybkTMbRY75I-a7rCUS5aatWCaZkCMveW5KikbejMjtyEv7UfG1KSD4qSFy06KRf4OckT9oyTLxWpOsYJKsM1zTTHQ5SBx5EfQfeXPkKonDEZzJjtdK3L56FN8cQTWfL6VcI7KhVVmfmI75JBWuV2hMkJrLhKCxxHzFJMrb4nT_ZtOWFUNNJ9tOnpNaYIkrxDhvOHQxBWAB5Zj8yWqq6ua4rhtgklWMKDnI2UZ5zmiiymUUwOTJWjM2k82mJPcNpksgx58DPxV8ICEbzkDAXxkREvhPhO8BW6ip4SMs-cTX3N32kmNH8bngeMPuasq2oEep8ecu9FFN86YWEtfSbuiJ1zIw2aHTwIay3nYmkdX5IH3Q9a5GRVcTWTa16js0K93-eH87W94iMIpNKRFGebcCA2gbDvbUoLWUrVBL4C3gbwWr3eUTWCD4qKrn3b9xy5v_KY69RSlExwQUEJgarAepOsqQXDNEOBZrvTySYzB-oKMFRbwhTAgGXJs9AdVqJBaiISWW0MC7GgnCy1ZODOSlBCGIdso-e-NwJkj_HnmzAsoQWFi3YbVU2NG7Buj2o4E41hRqPVvMBeMISwS2hJoCFWCRprPXd543MLEVqxnHmlzd6PeNP7u6LkFpC_MAU4kX_RKgR1XxA9d4xTjUK0vaNLQDc4cvgw8K_USDM9KuHxfoZvZtDEjhH8iUksGGvYPl553Rs9RGr3AZJTsbUMNHgWN5l7g3qpHnO2BYDvzigjKviAOfOi7SKw1M-zPxKkzhkYPD0evwZBYzOXTi-CVrAAnDYB-RWlDoq3aN9jqLqgT3s9gmURYFY_Ab3Xa8qjvTcH__x4-xG0xEMwGvdO1smV8Agr3LUxDdI4gu9tkpiEDaslzVuPoO9lQxLrT6C1FQUGKh8I6JcnB-CsW8Yrju2oceCyjvagFFsOuqqVeX0wL6LEC-BSiKipzhS0RT5ciwJTp4IzrJLxWd2KhDm0afQfG0vWk3YT5ut6WKidqq5ihvmupiGjHoswBFPSDzC1w_ol4vuhN8r0B7PRciyCIvYYsttIvRMs0QS2Zs8xezKPYHkzTeNtMBLTMBbbidnl4gtiKifHu_nb4wYxpjUG6hSyx0RRSwyL1EtBtFDgy1ZKfHsn0nGcx876TAi93Bx7BWudd5s9koDzZgY3nzGzRAJqSI2G8lssZ8R5HdcrnrUfMBuId0C1zP0D36bhKlDqOXyAYrCGGoJdv2a0VIWFG8y9VNM3D6A59_qadzozABvRYw7xhYSIJ3ganl-8bqWU1vIa-Apq9hApUWJv8IU54WHzWsWVVdY1GS66ohfwrLuPZR-rDbLkUcAyALcXCEOA2T-F3EkPo81D8wWYML2IGzEL9p-wLkEBBZkG3njAn28mGkPdKtMpsB6pNwfwFOl0QAw8IZWTiTmPnEGeBcPCpou5zrH0dYxBj0WwDtAJAkYZr7HwD4QyeG9nr3VReDS1zQbYFLjtmDCD8AV7EVJq99FD7AvIP8cQ_110KMMSCwIA7DiB9hj3qQlZqQaxICcDHX5tz3YA6NXjJovinxqoaMtCTitl6pk6qJo4Mu3xmmjC8Z5mT90CoDEFbIHXTtPds7vZ70EeOdTvdQOtVl4BYkJNqrn6ywq3ccz44E9iTMehOewwGWmpauLv_qWNZKMLC5nau3L7yULNtl7INBlBW4q2RGwTlJ9s5AODXpU-5HFl1DHpO21csemJ2dhLE3yPVVkm3F24iGXhKGl4rPYwKjLfHDkOuHOcUJ5LoDOh_VKXC2fLLNack22MrEPpORnYKGnQAUW8g8e-IBy2P3hBHOdud6nRUz0kk2-1wGcIaqBPRZgIYB148jhvMwHgJa8KaWB9MbIvoSFi90A1BlYQlsLIHn48gmR18g8Tt9HWLu2d7ycx78R13XSbxBRACOhTe08ALgIMwt92WQHWA_NwS_RflmWmr7X85rwgCGhfPN2ceDcx4hbrbBpe3jZ5zjV-WV_LmdeptrrjfpuLq-tOB--CzlJTbG-AgjWAf5pEw1xJKZWOvjEcjMvUtpdRhmg-OfEp--OT5HdODL5-pe7CcjzTPjr3NliFt5uMHABateLe53NzkZ1_z3N8OJuYi89FgIJ_PIOo5YN0GalBSSqoE1Ul4-77KV-dxVRzVc0-ONf9JkDpUm-OHKqjzEvF1IGYSkLCNbSALNR67yeBV_SoVKm6LVWVVkkuNS3QOa5iNxuKrUXlN3yLt2o3J2cOvabLU1f8EoUjsltG6xgN4kdxP_LL164-M3jnXHueUljgaqDufSj__TddY7wa9NOw9hVta0veNpBw7-7LT_0-Ti_Jyh9b4EzGfyqQ2s-B9w0mr6DHa-N4UWl8oK-lulj9K0s5dfwhaQYbFlB10Ph6ETn0N2MyhbAeVEJDnH8r_L1qU8kSJ0rIRgf0G5CwpOAbFMBa1PRgY1zhJsnYCZTz2aOijLFDRwO5jLjABDOj6iiRImFPKJKopXQVmrXkLqVlb9fI4HTdbAUqgecdzooDU61soCcL1qTFmX8liRKSrpYy19QpQ4Twn1nIPQ-JRQayqnZnFSuB-nCvZBdmLz7zA_D5GR-rkV0CP3K7CzqsMrn3nJKfp0DezK2FeBIS-iSD9Gsm2pNj9lKHaU8k4wNH5Wb1mCMVQOcqtey-95V8uuFw2mK9QFEARHZ-KM3U43uqanOdMpHPuXo6c1nH2oesLRVzaobUS53T28AQEV4LopNfY9C2rW9vzqRp2uZojuD6poI_R-6in-wp-RMHzqmz09zebf0dP3W7R4uL9_-O_db9_Q4u7-domeHnT19e_f0M_bx4efT3sMj6ee6hKh9vHZ57p9B86QDrPQig8Puu9PX3GmH6kX6qFqTKhX0HhCvjZcrD_J_q9aA_v9-opN3ShK4cTrBekVnfo09VN8JUtZsakxxsMzZf94CoZ56jX_quPV9PKX2jB1Q-dqPQ1SnGOf-DSnSRqGaUEx9nIndSA5hEScXFU4Z5WYjsLrkefV7AVpEVAehTdX5dRzPM911U02-AB_ElMSh0VEnTTxMI6LEexucDHVROGYNHx1xacaUt6tBDRWELXFoREsSt3gM60O5ONOrhs-fWH1toRMrV5dae1Tjf5v8LzQVA">