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

    <tr>
        <th>Summary</th>
        <td>
            Crash in instruction selection when targeting x86-64 freestanding with soft float and without SIMD
        </td>
    </tr>

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

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

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

<pre>
    Hello,
I got this issue when trying to compile for x86-64 freestanding with LLVM. All LLVM programs used here were using the 13.0.1 version.
Could you please take a look at it? Let me know if you have any questions or need any more specific information. Thank you very much.

This reduced LLVM IR is crashing with:

```
clang -c reduced.ll
llc reduced.ll
```

The stack trace for the clang command:

```
fatal error: error in backend: Do not know how to scalarize this operator's operand!

PLEASE submit a bug report to https://bugs.llvm.org/ and include the crash backtrace, preprocessed source, and associated run script.
Stack dump:
0.      Program arguments: clang -c reduced.ll
1.      Code generation
2.      Running pass 'Function Pass Manager' on module 'reduced.ll'.
3.      Running pass 'X86 DAG->DAG Instruction Selection' on function '@compiler_rt.addf3.addf3.64'
 #0 0x00007faacf797fda (/usr/lib/libLLVM-13.so+0xb97fda)
 #1 0x00007faacf79565f llvm::sys::RunSignalHandlers() (/usr/lib/libLLVM-13.so+0xb9565f)
 #2 0x00007faacf69931f llvm::CrashRecoveryContext::HandleExit(int) (/usr/lib/libLLVM-13.so+0xa9931f)
 #3 0x00007faacf78f5e4 llvm::sys::Process::Exit(int, bool) (/usr/lib/libLLVM-13.so+0xb8f5e4)
 #4 0x000056315d8e2743 (/usr/bin/clang-13+0x10743)
 #5 0x00007faacf6af795 llvm::report_fatal_error(llvm::Twine const&, bool) (/usr/lib/libLLVM-13.so+0xaaf795)
 #6 0x00007faacf6af960 llvm::install_bad_alloc_error_handler(void (*)(void*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, bool), void*) (/usr/lib/libLLVM-13.so+0xaaf960)
 #7 0x00007faad003d092 (/usr/lib/libLLVM-13.so+0x143d092)
 #8 0x00007faacfff61a6 (/usr/lib/libLLVM-13.so+0x13f61a6)
 #9 0x00007faacfff67d3 llvm::SelectionDAG::LegalizeTypes() (/usr/lib/libLLVM-13.so+0x13f67d3)
#10 0x00007faad0116299 llvm::SelectionDAGISel::CodeGenAndEmitDAG() (/usr/lib/libLLVM-13.so+0x1516299)
#11 0x00007faad0119420 llvm::SelectionDAGISel::SelectAllBasicBlocks(llvm::Function const&) (/usr/lib/libLLVM-13.so+0x1519420)
#12 0x00007faad011bc4a (/usr/lib/libLLVM-13.so+0x151bc4a)
#13 0x00007faad289d69f (/usr/lib/libLLVM-13.so+0x3c9d69f)
#14 0x00007faacfbc63be llvm::MachineFunctionPass::runOnFunction(llvm::Function&) (/usr/lib/libLLVM-13.so+0xfc63be)
#15 0x00007faacf8fac40 llvm::FPPassManager::runOnFunction(llvm::Function&) (/usr/lib/libLLVM-13.so+0xcfac40)
#16 0x00007faacf8fad84 llvm::FPPassManager::runOnModule(llvm::Module&) (/usr/lib/libLLVM-13.so+0xcfad84)
#17 0x00007faacf8fc61b llvm::legacy::PassManagerImpl::run(llvm::Module&) (/usr/lib/libLLVM-13.so+0xcfc61b)
#18 0x00007faad7c441ed (/usr/lib/libclang-cpp.so.13+0x26441ed)
#19 0x00007faad6cbb4af 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> >) (/usr/lib/libclang-cpp.so.13+0x16bb4af)
#20 0x00007faad6f8eaad clang::CodeGenAction::ExecuteAction() (/usr/lib/libclang-cpp.so.13+0x198eaad)
#21 0x00007faad7577f79 clang::FrontendAction::Execute() (/usr/lib/libclang-cpp.so.13+0x1f77f79)
#22 0x00007faad751e2cf clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) (/usr/lib/libclang-cpp.so.13+0x1f1e2cf)
#23 0x00007faad75c35f0 clang::ExecuteCompilerInvocation(clang::CompilerInstance*) (/usr/lib/libclang-cpp.so.13+0x1fc35f0)
#24 0x000056315d8e884c cc1_main(llvm::ArrayRef<char const*>, char const*, void*) (/usr/bin/clang-13+0x1684c)
#25 0x000056315d8eac2d (/usr/bin/clang-13+0x18c2d)
#26 0x00007faad7287a99 (/usr/lib/libclang-cpp.so.13+0x1c87a99)
#27 0x00007faacf6991b7 llvm::CrashRecoveryContext::RunSafely(llvm::function_ref<void ()>) (/usr/lib/libLLVM-13.so+0xa991b7)
#28 0x00007faad728e030 (/usr/lib/libclang-cpp.so.13+0x1c8e030)
#29 0x00007faad72a6694 clang::driver::Compilation::ExecuteCommand(clang::driver::Command const&, clang::driver::Command const*&) const (/usr/lib/libclang-cpp.so.13+0x1ca6694)
#30 0x00007faad72a6ac9 clang::driver::Compilation::ExecuteJobs(clang::driver::JobList const&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*> >&) const (/usr/lib/libclang-cpp.so.13+0x1ca6ac9)
#31 0x00007faad72a9a42 clang::driver::Driver::ExecuteCompilation(clang::driver::Compilation&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*> >&) (/usr/lib/libclang-cpp.so.13+0x1ca9a42)
#32 0x000056315d8e061b main (/usr/bin/clang-13+0xe61b)
#33 0x00007faace429290 (/usr/lib/libc.so.6+0x29290)
#34 0x00007faace42934a __libc_start_main (/usr/lib/libc.so.6+0x2934a)
#35 0x000056315d8e1485 _start (/usr/bin/clang-13+0xf485)
clang-13: error: clang frontend command failed with exit code 70 (use -v to see invocation)
clang version 13.0.1
Target: x86_64-pc-linux-gnu
Thread model: posix
InstalledDir: /usr/bin
clang-13: note: diagnostic msg: Error generating preprocessed source(s) - no preprocessable inputs.
```

The actual reduced IR ("reduced.ll" used in the examples):

```
; ModuleID = 'llvm.ir'
source_filename = "compiler_rt"
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-unknown-eabi"

define internal fastcc fp128 @compiler_rt.addf3.addf3.64() unnamed_addr #0 {
Entry:
  %aAbs = alloca i128, align 16
  br label %BoolOrTrue

BoolOrTrue:                                       ; preds = %Entry
  br label %Then

Then:                                             ; preds = %BoolOrTrue
  br label %Else

Else:                                             ; preds = %Then
  br label %EndIf

EndIf:                                            ; preds = %Else
  br label %Else3

Else3:                                            ; preds = %EndIf
  br label %EndIf4

EndIf4:                                           ; preds = %Else3
  %0 = load i128, i128* %aAbs, align 16
  %1 = load i128, i128* undef, align 16
  %2 = icmp eq i128 %0, %1
  br i1 %2, label %Then5, label %Else8

Then5:                                            ; preds = %EndIf4
  ret fp128 undef

Else8:                                            ; preds = %EndIf4
  ret fp128 undef
}

; Function Attrs: nofree nosync nounwind readnone speculatable willreturn
declare i128 @llvm.ctlz.i128(i128, i1 immarg) #1

attributes #0 = { "target-features"="-16bit-mode,-32bit-mode,-3dnow,-3dnowa,+64bit,-adx,-aes,-amx-bf16,-amx-int8,-amx-tile,-avx,-avx2,-avx512bf16,-avx512bitalg,-avx512bw,-avx512cd,-avx512dq,-avx512er,-avx512f,-avx512ifma,-avx512pf,-avx512vbmi,-avx512vbmi2,-avx512vl,-avx512vnni,-avx512vp2intersect,-avx512vpopcntdq,-avxvnni,-bmi,-bmi2,-branchfusion,-cldemote,-clflushopt,-clwb,-clzero,+cmov,-cx16,+cx8,-enqcmd,-ermsb,-f16c,-false-deps-lzcnt-tzcnt,-false-deps-popcnt,-fast-11bytenop,-fast-15bytenop,-fast-7bytenop,-fast-bextr,-fast-gather,-fast-hops,-fast-lzcnt,-fast-movbe,-fast-scalar-fsqrt,-fast-scalar-shift-masks,-fast-shld-rotate,-fast-variable-crosslane-shuffle,-fast-variable-perlane-shuffle,-fast-vector-fsqrt,-fast-vector-shift-masks,-fma,-fma4,-fsgsbase,-fsrm,+fxsr,-gfni,-hreset,-idivl-to-divb,+idivq-to-divl,-invpcid,-kl,-lea-sp,-lea-uses-ag,-lvi-cfi,-lvi-load-hardening,-lwp,-lzcnt,+macrofusion,+mmx,-movbe,-movdir64b,-movdiri,-mwaitx,+nopl,-pad-short-functions,-pclmul,-pconfig,-pku,-popcnt,-prefer-128-bit,-prefer-256-bit,-prefer-mask-registers,-prefetchwt1,-prfchw,-ptwrite,-rdpid,-rdrnd,-rdseed,-retpoline,-retpoline-external-thunk,-retpoline-indirect-branches,-retpoline-indirect-calls,-rtm,-sahf,-serialize,-seses,-sgx,-sha,-shstk,+slow-3ops-lea,+slow-incdec,-slow-lea,-slow-pmaddwd,-slow-pmulld,-slow-shld,-slow-two-mem-ops,-slow-unaligned-mem-16,-slow-unaligned-mem-32,+soft-float,+sse,+sse2,-sse3,-sse4.1,-sse4.2,-sse4a,-sse-unaligned-mem,-ssse3,-tbm,-tsxldtrk,-uintr,-use-aa,-use-glm-div-sqrt-costs,-vaes,-vpclmulqdq,+vzeroupper,-waitpkg,-wbnoinvd,-widekl,+x87,-xop,-xsave,-xsavec,-xsaveopt,-xsaves" }
attributes #1 = { nofree nosync nounwind readnone speculatable willreturn }
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJy9Wltv27gS_jXOC6HAuliWH_Lg3HZz0GKLtlicN4OiKJsnupWkbKe__syQkiwqdpPsLrZILV5nvhkOZ4aU0jp7ufmdF0U9C-5m8_vZfP1EtrUmeicUEUq1nBx2vCJavohqS3RNWF02ouAkryU5JrEXRySXnCtNqwyHHITekU-f_vx8TdZFYUqkkfVW0lKRVvGM7LgEqvjTKkN0x4kfXs-vfbLnUom6urZQ7uq2yMhL3ZKm4FRxoukzJ5QUdf1MqCZCz8JH8olrUnLyXNUHInIzfEf3MK56IT9aAAYEFQG0FQfm2FrWwFs1nIlcMCIqEKWkOOyafN_R6tnQACgwsmW7Doz9_Y56kTxrGdAysj19BT0RJqna9eLPwvV4ziyed3-mygoK4zzWk7kuCttRFK_bJnN7EABfU_YMy0KZXQpUoqUMC1TCWvwaRE41LQiXspYw0BZAEyQFqtxMJvc1qcASjF538B_WXjFaUCl-cmsfdcMl1UAhWHYVmBn4Y7ZfPj2svz0Q1aal0LB0absFGZtaaqS307pRCDR4hD_oUyD4vryu5RbqsFYZYGJFm3ErHyrZQDRyg8mCZXEwLsYVGpaqW2mbcSZVqmaCauiQbQXYpWh0t5jfjPaytmwGNc2ha_XFGiqhctuWvNIIjlxcMB-n3NWAbssrVAWYkO0JsOdrW1VoEg0gIaCjx7ZiOIR8wYbPtKJbjroj0FTWWQubCmojJsGygxueI_ffJCb369-8WfgAD_JUKS1by-AbL7gpddTznjPUZ9G828JyI_U1zbI87H7jCPsNRxgZzsn8OId_y5xSli9Xyzyj0J7A0rQKgD8WIrW_uBE82MIK3Mjt_JiaobNgdaLlT2gt4kVOcK1R_-FavShbACG_iW1Fi99hCQGiMvxW72SLVB22gcM2Xq1Cf8z2Dg3qK2c1bva7utL8qG2PZf9wBBcTJKLS78VADQsHQ-iKnuQLHp0T_Yu1Y1sZc74jaV0X79aCYeAgiDoEizj0F1nCg2UUOrRSAZbyaOwcKBky_hwGOVQWri4pruJIDrurN8axbKxjCZJT9_eDqGAHgysGieKPCkUNNwdOPIWziucjOAIY0aLYpDTbwLNmFtNmZ-0KmO5rkVnmayRsG0zlDrxrZslsNux49H1bSakSbAPbDLbhLLxjOyqdwdiwAdck0G_Y7vDBGWGQGJc59BP8f0YvWBwQvVtLoARHS8uRlrL5PMzmq-BdtPzIjHWIJY7K8zz2afw-YqEZ6xBbTYkts3C0foMLA99mWz7xLS0g9nx_afhH3AIyB9oDc_RGc0ctvh8Hq9UF5k9Q6bwFePrfeLWusgcIZojrAyAWhocDwp-AWEXB_E0QthVyhVs0xlswp2flbLQhypxs6t0QEYEDMZhATFn0vhAAxHCsQ2zsCLMgWWXxKn8XsZCZsQ6xyDGflMVhykfK-0wZpGO8VwZG3M5NtdUfVd98VnEfUFlu2Dq4XC-Z5JRF40V9_IJQ-tj_zyNihqGDKJ4iypLoHYg-m4zEwdM3fQQNMHPQLCdoWOynIzQFbHL20gXEE66nsikGbH8XE7J0MI39WrZkUeTz7DwtGyJZ0wC16y5SBrGZ4FAcO7csZmka0dzmkV14Bwdya1PtP1rdtBjrR933gm6rGk4uTD1UW7DjLjSMhvzOacblN04l2_3R2DPOOIqMhnZ-641R3yHn5fqNQZ-gdG7IyGuZ6PiV525zv0zrCcFOCevOzkehsq0EnN42jcZYOUoz6GHTHKTQHAMxp6UzKeM5bQu9ycBLav7GRBt7L9rNubX2Y7OU47UOnFgS5wmHxxn1dyJ22R1nrea91JejyFkMK8PCweCEkuViuYR0aYzhUWJyO-h5DOLD7HND3WEfuOx9HrDcVYE9cOAZhVZwRDurhct4f7G7z0M0CByIoQuRhYt87uxIC-aEdI-J2itgryT5RXZ2Hprh7ECbpudJEjHCmL8pqXCd3VpK-oJ7y2aP_RZcd2mm23Y5fzyX7sfA1EG1mKCiLMjepJLAIIdK7Kg9SJZwQPqAtpiZ4FBcTo90frp815EOj5Y058WLo9L-aLyRRq2nQ8HqV77h9akPUDgwk4ngfA7n6Y8IjhMciiuXIo3jVTS24EyKfR_BrZnSV5v9rrsbcmx6MhEHXPL_vxi67napqX5EUiPIWFLn4sFIStnqo5L-p07VZTGh95MAmBdiWAnntD8hza67xONuCDANFRiPunP5ezXTR5q_qiCQ31GQP1HQikbBJTD3o7Lj5M54t0uK_XcV9BHVoOSOaoKJ25pjfomO9C3fxSdZoXtvw6NgFawu7WDEFNtkEEc5ZKIpmRCOUJsNToNEhEq9eYXuPOHQPU6FUwftR8mCWJJvyZrD0IHW0NPfA8-GO8-8C8P9nTLJKQS_zN7x86PADZRxsjR6aRUn3t5cE3NOxCiAjhn1V_zdjX93oW1yT-R7TOJNHHkN8wpRtUdvW7X9nTfkbBnek5qTMGlqJY7dGwt71cOze2GwO5K_ErGqMTFck2zIsUmp0EbJg7kE769y8ab13OVyotBGPaAz6qdpgSJDIq_61wWXLu4p0y0thncIT1_tYgXje9_AvigBs8Brb36ksMnwzmM1--Wl_iy8JTbRfrqH_XSP173mPl3I4WLXirHJYR0rWvJuWDC6EoaaHarNqpAMb_ToS93qfjD30A9wrwmWcyiEgfnBqu9WsRRH5scTfSFPcJIfJF6VYCHu50DfN9_owuEPB4qmGIB2BtJW-F6iGp6cpmKYaH_hLIBXjuCJuKxA4zlVmjGSN8CDvHELblLitkINZRtolvY-fLa8tbQfKi1fhsUg0Lug61QZkPaOjwgjyh1UxRasPe6HppIUNOUFzrmt6-IP-V22fAx81ApW-b5_uPRgjpnq9LSwCM_wBBusJjZZvZ_PBW5TQVyWD4VyBDT1v8vyJMeEWZU95Q430_Axdq_VOYjwWrRwKlv4t7mdZDgjXPRKuuhjDM9KF45seW46ihocbm_G9rnuLf2cZUOXf3liW2X2UuDMtMBME6xsCP9hZhgUOBqJjjQhfDPepCNji144LShPMjXyxT-yKlEPRoJrsr7ESjaxgeTf4La8d6IBkBhuf9daS2XjHb6eh4d6qRg82uogIJJjNK3qyr4HbyHPMyHsIIoCWLWy6n0ohE7JuyWJ5iaaMF38vLbLmpxWmQhIEfC97cq87xsDo4BFpJB4qs6NooTLW3Tn1sd7OafAFEMcBIJ7-PX8OBXaw3AP5L0wcGqA_DAUKH66ENzGUYqvzO48mh3NA6nBozx6ae7HfRnCQdKXtSgMPbo_do-gey78YJhkawKC4HZUP5zKLDuVsx-nMr5l6sv5qSjykp5qzahnn5bCrY3w7ItRuarGA5vABDkFCfm4tW5YpQdA_ZyOR088lbRiu7xV9v7NY0XGS0yRTDkvWrWrG21rh9Q-f3JZW6Wzst6btqNRFrYcjXp59YOVRi9clsrMA30y86SwPbyMN8orfgJCT-PvpMeCt41Ke76fvkAiWjenlsW0ZTltSOHoL4falkIudaqCVGqoFD_HzECmlA81-82Dl6sfUk8b1U7kMJ6q5xMttSsyT9aa6hONPZUC95fHZK0UJKMchrV5XpwZ0nB5foA5bk1wdI1THNbA4BGZp9qqlCpLSsnSLlR-VEYb29zaBeTXihvKIhP7wtO1B8_UDsamH12TsUNI7xsmzAI_m4aCU081fQnSV-VRs1-KvfBYLvoixgZvR2XG8WMG03qw07o1AG4lBT0NJokNpdmgw8JAIRMSdvypYhiUByr00c4BSzDAGuAHNizByXS-0eioYUXZ2gFwCs2FgdI8t-YxGB945JxLD5PVzrt0LcEinrSg9j3Jt0Jp89lC16HZ7qB9W82hbEra3ENjUWaN1aLMZNUV4PhkS1w3dWFu_0cVD6zaJLSe3kH26_aBZxcSbKLb1tYFnukG8y1sn0Zz8BTdGT-kOFghvmS1FWUJqK1Rv9pR-1D62epYFfXBC2vcyZyOmkTFIHKYwVi1nbbclJBOH7JRvS2KUxV3z1DRh9oreel1W9W0tZXJH3hmeqyLPtMRBh2cGjZGDkbXmZYy28AWjP9TmPnYZ3TtD6W-L6JdwaVvG7upOjV1rY5FpqVZkRYcstldsBE8SvvStihxB3m4hz0Gh08j174LVXtrkz-MywaIe_SzbdNYr4Wm3TwbMz2kVQ0b0CjqIDJudiBMOCZLbDpaH3hUdM-HAhtKnTs3ZQy4ZEgj3DjtD3H6L6YQJ8LDOfUquwmzVbiiV1rogt-Y21o854rR10uqf_HdfXpoUgQ8j1_83BBXmZhVNl9-YRseV789fb6_amVx435ntoXuNr2G8x_esuClln3ADq3_Z2Loo_nyEZTzuIjDhX-1u1mmQZJnSbIM83nOWeb7nNKIR2m8yFYLPr8yuae6mS1uZ4v7K3ETzINgvpwH8xVkPP51vAz9dEVZEiTxarmgkEvxkopi-N7tSt4YDPgRHCZa4EZOH8NdUaXQ9nhPn7YgobzJ6F5k23IVXRnANwbt_wHObHNF">