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

    <tr>
        <th>Summary</th>
        <td>
            LLVM crash when `@llvm.prefetch` IR on x86
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
      </td>
    </tr>

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

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

<pre>
    Using this IR:

```llvm
define void @prefetch(ptr %a) {
start:
 tail call void @llvm.prefetch.p0(ptr %a, i32 0, i32 0, i32 0)
  ret void
}

declare void @llvm.prefetch.p0(ptr, i32, i32, i32)
```

I get this crash backtrace:

```
warning: overriding the module target triple with x86_64-unknown-linux-gnu [-Woverride-module]
fatal error: error in backend: Cannot select: 0x557bbbeecb50: ch = Prefetch<(load (s8) from %ir.a)> 0x557bbbe8c890, 0x557bbbeeca70, Constant:i32<0>, Constant:i32<0>, Constant:i32<0>
 0x557bbbeeca70: i64,ch = CopyFromReg 0x557bbbe8c890, Register:i64 %0
 0x557bbbeeca00: i64 = Register %0
  0x557bbbeecae0: i32 = Constant<0>
 0x557bbbeecae0: i32 = Constant<0>
  0x557bbbeecae0: i32 = Constant<0>
In function: prefetch
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++ -g -o /app/output.s -masm=intel -S -x ir -fcolor-diagnostics -fno-crash-diagnostics -O3 <source>
1.      Code generation
2.      Running pass 'Function Pass Manager' on module '<source>'.
3.      Running pass 'X86 DAG->DAG Instruction Selection' on function '@prefetch'
 #0 0x0000557bb2645bcf llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x360dbcf)
 #1 0x0000557bb2643bfc llvm::sys::CleanupOnSignal(unsigned long) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x360bbfc)
 #2 0x0000557bb2594d77 llvm::CrashRecoveryContext::HandleExit(int) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x355cd77)
 #3 0x0000557bb263b7f2 llvm::sys::Process::Exit(int, bool) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x36037f2)
 #4 0x0000557bafeda3b6 (/opt/compiler-explorer/clang-trunk/bin/clang+++0xea23b6)
 #5 0x0000557bb259dd6a llvm::report_fatal_error(llvm::Twine const&, bool) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x3565d6a)
 #6 0x0000557bb3665a60 llvm::SelectionDAGISel::CannotYetSelect(llvm::SDNode*) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x462da60)
 #7 0x0000557bb366b2d5 llvm::SelectionDAGISel::SelectCodeCommon(llvm::SDNode*, unsigned char const*, unsigned int) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x46332d5)
 #8 0x0000557bb12e781a (anonymous namespace)::X86DAGToDAGISel::Select(llvm::SDNode*) X86ISelDAGToDAG.cpp:0:0
 #9 0x0000557bb3663007 llvm::SelectionDAGISel::DoInstructionSelection() (/opt/compiler-explorer/clang-trunk/bin/clang+++0x462b007)
#10 0x0000557bb366f909 llvm::SelectionDAGISel::CodeGenAndEmitDAG() (/opt/compiler-explorer/clang-trunk/bin/clang+++0x4637909)
#11 0x0000557bb367269b llvm::SelectionDAGISel::SelectAllBasicBlocks(llvm::Function const&) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x463a69b)
#12 0x0000557bb3674c96 llvm::SelectionDAGISel::runOnMachineFunction(llvm::MachineFunction&) (.part.0) SelectionDAGISel.cpp:0:0
#13 0x0000557bb12f1275 (anonymous namespace)::X86DAGToDAGISel::runOnMachineFunction(llvm::MachineFunction&) X86ISelDAGToDAG.cpp:0:0
#14 0x0000557bb1abc680 llvm::MachineFunctionPass::runOnFunction(llvm::Function&) (.part.0) MachineFunctionPass.cpp:0:0
#15 0x0000557bb1fda42a llvm::FPPassManager::runOnFunction(llvm::Function&) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x2fa242a)
#16 0x0000557bb1fda5b9 llvm::FPPassManager::runOnModule(llvm::Module&) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x2fa25b9)
#17 0x0000557bb1fdb1a0 llvm::legacy::PassManagerImpl::run(llvm::Module&) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x2fa31a0)
#18 0x0000557bb28b75d0 clang::EmitBackendOutput(clang::DiagnosticsEngine&, clang::HeaderSearchOptions const&, clang::CodeGenOptions const&, clang::TargetOptions const&, clang::LangOptions const&, llvm::StringRef, llvm::Module*, clang::BackendAction, llvm::IntrusiveRefCntPtr<llvm::vfs::FileSystem>, std::unique_ptr<llvm::raw_pwrite_stream, std::default_delete<llvm::raw_pwrite_stream>>) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x387f5d0)
#19 0x0000557bb37b3efe clang::CodeGenAction::ExecuteAction() (/opt/compiler-explorer/clang-trunk/bin/clang+++0x477befe)
#20 0x0000557bb309e001 clang::FrontendAction::Execute() (/opt/compiler-explorer/clang-trunk/bin/clang+++0x4066001)
#21 0x0000557bb3022343 clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x3fea343)
#22 0x0000557bb317d2d3 clang::ExecuteCompilerInvocation(clang::CompilerInstance*) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x41452d3)
#23 0x0000557bafedb93c cc1_main(llvm::ArrayRef<char const*>, char const*, void*) (/opt/compiler-explorer/clang-trunk/bin/clang+++0xea393c)
#24 0x0000557bafed703f ExecuteCC1Tool(llvm::SmallVectorImpl<char const*>&, llvm::ToolContext const&) driver.cpp:0:0
#25 0x0000557bb2e7f15d void llvm::function_ref<void ()>::callback_fn<clang::driver::CC1Command::Execute(llvm::ArrayRef<std::optional<llvm::StringRef>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>*, bool*) const::'lambda'()>(long) Job.cpp:0:0
#26 0x0000557bb2594c67 llvm::CrashRecoveryContext::RunSafely(llvm::function_ref<void ()>) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x355cc67)
#27 0x0000557bb2e7f39c clang::driver::CC1Command::Execute(llvm::ArrayRef<std::optional<llvm::StringRef>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>*, bool*) const (.part.0) Job.cpp:0:0
#28 0x0000557bb2e46dde clang::driver::Compilation::ExecuteCommand(clang::driver::Command const&, clang::driver::Command const*&, bool) const (/opt/compiler-explorer/clang-trunk/bin/clang+++0x3e0edde)
#29 0x0000557bb2e477ad clang::driver::Compilation::ExecuteJobs(clang::driver::JobList const&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&, bool) const (/opt/compiler-explorer/clang-trunk/bin/clang+++0x3e0f7ad)
#30 0x0000557bb2e51e7c clang::driver::Driver::ExecuteCompilation(clang::driver::Compilation&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x3e19e7c)
#31 0x0000557bafed953f clang_main(int, char**, llvm::ToolContext const&) (/opt/compiler-explorer/clang-trunk/bin/clang+++0xea153f)
#32 0x0000557bafdd72e5 main (/opt/compiler-explorer/clang-trunk/bin/clang+++0xd9f2e5)
#33 0x00007f48337c3083 __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x24083)
#34 0x0000557bafed331e _start (/opt/compiler-explorer/clang-trunk/bin/clang+++0xe9b31e)
clang++: error: clang frontend command failed with exit code 70 (use -v to see invocation)
ASM generation compiler returned: 70
warning: overriding the module target triple with x86_64-unknown-linux-gnu [-Woverride-module]
fatal error: error in backend: Cannot select: 0x562b297f27f0: ch = Prefetch<(load (s8) from %ir.a)> 0x562b2975e970, 0x562b297f2710, Constant:i32<0>, Constant:i32<0>, Constant:i32<0>
 0x562b297f2710: i64,ch = CopyFromReg 0x562b2975e970, Register:i64 %0
 0x562b297f26a0: i64 = Register %0
  0x562b297f2780: i32 = Constant<0>
 0x562b297f2780: i32 = Constant<0>
  0x562b297f2780: i32 = Constant<0>
In function: prefetch
clang++: error: clang frontend command failed with exit code 70 (use -v to see invocation)
Execution build compiler returned: 70
```

This breaks prefetch intrinsics in other languages, e.g. https://github.com/rust-lang/rust/issues/111823


</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzkWllz2zjy_zT0C0oqEhCvBz_Ikp3xVPJPys5_dvZJBQJNCRsK4AKgY3_7LfCQCFo-kmimamurZmIKR-PXB7obQFNjxFYCXAbxVRCvL2hjd0pf_qGaytJ6B_qiUPzp8v-NkFtkd8Kg27uALINwHYTDv0nY_VdVD_uuiUMpJKAHJTgKFmGtoQTLdgHOaqtRgGMa4BwF6VU33Fiq7YEqslRUiNGqOhBwlOcDlXkdeoRWSBCMwlMfeU8RabAtsR5xuh4zwIFVVMMbq_Vkp3_yiRDGhG_RFmwnNaap2aGCsm9WUwYvibD7-Z1qKeQ2IEukHkBrwTvpA9or3lSALNUtZS3qCtB3YXfoMUs2yWLWyG9SfZezSsjmcbaVDQriq9k_ejIw6wgEcS-AklpaIdBaabda-4GEbIGC5K5tRaVUFhmogDklofAxjtOiKABYEYeuhe1QQNboy6BmsgpwVinKUYAzkzldl1rtnb6EnjvdB-T6SCdjWd5qbUSZpm3LSkljqXTrOmmTVRiQ65_o6MxgQp8skUgWAV71-FeqfrrRan8H2xPg7mArjAUnJ5EsHC_hCbLhQLalOMwZj_aGQzec4B7AgP0l1O8Z_6MTbiUqG8msUNKNPWzWtvPLx-vl_TUyTbEXFlFUNFukoVbaIqvQztraOFvGNwG-2Qq7a4o5U_sA37TOoPszq7X6lzMefCOMacAE-AZRyZGQrGo4tJY93SB45ZDUWjEwBjgyqtFds5tJjVFMUAsc6UYiw7So7byDfG8p-4Z4s68PuyycB2H-RautpntE9bbZg7QOOArwjaodMqb2tahAz-CxrpQG7doqKrczqxv5LcA3hZBDW4CvAnyFZls0U44ErWtHqLF1Y-cGzfbU7AOyFtJChWb3aPaIhEazkqlK6RkXdCuVsYIZNCulmrW8-82fCQrIqmd60FTk2FgpDmgLEjRtVdb2YNdz10jnNlBNjUEBTm96raIvruETlXTr2EqRkoMjCXDqLYPTXojkFME_swStlx9mAbleLz-gW2msbrol7lv34PB09AeLalcYR4C0t9IAkxCFj2EYhq214mQRF6xErd2QZUCW5sl0H1-0kLbV6tfONLLjIE2_b5SxGug-wEnrlaVtgwvOfkW3Ab4KH0kS8oKVxzgSYBJNQJOiZKdAryqgsqk_y3uxlbQKcNbINtRyVCm3ytkgFkXJPIjYgxjnC56mI4grZ213wFxMeFopaeHRdj2_UckruH4UNsDZOeUYx4ynqQeS-HIkRVri08pvPUD3YwxthQqlqjPKkaQl9iAuRhBpCZySIjnLYkAxKRJvrXiiM84TOhJH53I3bbjedOF6vAu-fnfpFnPevd8FZ5VNnMQ8oR7eZIyXJElMk3CE9-AO1ssPt_dQ9ZbXphL_BNt1eyzcr_9PcQjw8lyoFwnmNAk91OkEdYF5_CbqrtW53ZXa752HOw17hQ47nO2oHtTh95xxVy0SQjCPPQazMYMRhjSLqFuMSiWf9qoxSNI9mLp1o3nHwp9Zsl5--KpOMP2yhv7MEjd4mDhntYu2Yfv_AU0-ETcJw_RNca_VKK6Mwkp2RsMowvDojZxTDydIyzzM3zZnxeEDyKXk13th18sPZwVJ0jzMPZCRDzLFSV6803qXVXVFjWBXlWLfjKfWQ5ZwdB9nY4EmeeGxgCcsLFievMmCbuRn-YmynZAwoPVYeNY38DCvqbZz5wPQlPRzi3X4iL9_ygin8U_tn5_E_Oa2ciAXHkhasCQb-94JZZf8jTCdBPOq5E7QO43Li2FRyekCj2PYzRc3dUhDfxjRL9sjLileYOrZYzKFHBf5OyB_6k7Rnj77prPCjQvfA6QTuEVEx5qvYEvZU583HYHf7uujVf7loElEQw-0F5NwVqQxD1E3sUvq9sJedfcNn9sTVICzUff6eCy6llshoc9wRkN-A8pB3wPVbPe5dmZjvGRoNLT32W-M-trer7wx6COV21NDRu7MaiG3d1D6zYPUlxOCvRCWveGPp9xKqxsjHuAOypW0X6wOyOrY_VD2W_xGVHD_ZCzs--sQY3nX00jx7wY29WSmOz_V37WwsBlOUaNJHEraVHbDoQILb0wk1-2aZ8o5s7SMuW9IfjqRFgRKOKHb5XCV0R4YgDUWlmfPIdK0gBLG8LCfQ4Q5hGE0hnej3VnroN8xvnMiC5MkDCMPmZ84hBiTBfEF1611294OdbeTz2X3Mivn8x-kBEoWxEPv5wxRyjH30Pc4j0w8KEafY37G5BmPGtEixtxHTSaHxyInDDEWbfZU-E54qTV9ck6CrPxzQ7eDn50l2nvs84EHSnLCPOzTg28akhINYl5FX9uz5fhksKdV9Qcwq_pYc4KRiWt0NPq7By_x5Fo8gD6ZX2D_jAxpGcW8u7Q_0h3unTa6FWh3pd_urtY_uSGMVlVB2bdNKR3So4V0a_fWsorcaY9KPt2oJxV38JiqDQi08nzlMQ70PnLkYjcb9vgYRd2PwuXozp-2t_-tFL3BrmFjNRXWDN0TcrSqnPUrPep3Q5bHS4HWcjqZt1MCnFZ0X3Aa4PQoKpwN11S_q-K0PpLpPRNL3nfPdNfIe1pC9eSJ83XVnfEqiiXe4Q-nU7siOUP_y3YxOQC8aAB-ZgeLhHN4UXCtwuiz0DdI0_PVk4luwEtZ2CtDl5O7sANvv25FEALnfvjPJ8JIU8p_VBi_q8K8LInfVfFRGPtSsvnMCR-UX1Ph9N5fm75XeL2F_HUiLFPKxyKcPAhAHEH64kZcj769DOBE6H9J9H-jCM_kvSDKIfWCtfcg4YJ1HpOyAzikGgPo1mss-z3_dig-T3IRxaT08GIPL-cphhg5pGdZkOclhthbcMjE0nKREZIyEmYEbTaVKJxLpdpuRqtXogjwTf-YfnhE7zrY3Kh50p1zF2Hm5XvPHgsIiQB19M8jybwg0dHjjLuHh_v2Kd61o7LPzxHrLbKkogLeVQrAo3CK5oDS0EFrDKDZA7IKGQAkRulzv9by_tPowRENHCANttES2iqB9L-ldCHBBc7TEqflr5UudHRiyNOhdOFAOfprShfG9N8oXZiAe7V0YSCb0HeVLhxQZO8rXfih8T864dXShb9zi3QRyO2OohEVf32PnKwV-roTBhUa6Ddz4AMJ6VI-I5hxlq3sDjRy6Bu6BeM0C_Pt_LUqDN0YO-vk0H6PSzCiKMowGWO44JeE5ySnF3AZJdkiybIkji92l8kiLQEyAFzGKSlKniwgxmHOsjxhaZheiEscYhLGOIrScBHFc0LzRcgLnkCUhxTSYBHCnopq3hZXKb29aHFcJjgj-UVFC6jMUIOmL9uqkaLZmmARVsJYc5xmha3g8uPHPz71JSPfdyCRE-akcCtIQnR7h5R0_uWi0dXlz1ertCj_EwAA__9dN9lQ">