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

    <tr>
        <th>Summary</th>
        <td>
            LLVM f128 -> f16 failure or 
        </td>
    </tr>

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

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

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

<pre>
    The below fails to select on target `powerpc64le-unknown-linux-gnu`:

```llvm
define half @demo(fp128 %a) unnamed_addr {
start:
  %_0 = fptrunc fp128 %a to half
  ret half %_0
}
```

```text
LLVM ERROR: Cannot select: 0x8255100: i32 = fp_to_fp16 0x8254d10
  0x8254d10: f128,ch = CopyFromReg 0x81d62a0, Register:f128 %0
    0x8254ca0: f128 = Register %0
In function: demo
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace.
Stack dump:
0.      Program arguments: /opt/compiler-explorer/clang-trunk/bin/llc -o /app/output.s -x86-asm-syntax=intel -mtriple=powerpc64le-unknown-linux-gnu <source>
1.      Running pass 'Function Pass Manager' on module '<source>'.
2.      Running pass 'PowerPC DAG->DAG Pattern Instruction Selection' on function '@demo'
 #0 0x00000000036a9bd8 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/opt/compiler-explorer/clang-trunk/bin/llc+0x36a9bd8)
 #1 0x00000000036a754c SignalHandler(int) Signals.cpp:0:0
 #2 0x0000798ba1642520 (/lib/x86_64-linux-gnu/libc.so.6+0x42520)
 #3 0x0000798ba16969fc pthread_kill (/lib/x86_64-linux-gnu/libc.so.6+0x969fc)
 #4 0x0000798ba1642476 gsignal (/lib/x86_64-linux-gnu/libc.so.6+0x42476)
 #5 0x0000798ba16287f3 abort (/lib/x86_64-linux-gnu/libc.so.6+0x287f3)
 #6 0x0000000000728eee llvm::UniqueStringSaver::save(llvm::StringRef) (.cold) StringSaver.cpp:0:0
 #7 0x0000000003479844 llvm::SelectionDAGISel::CannotYetSelect(llvm::SDNode*) (/opt/compiler-explorer/clang-trunk/bin/llc+0x3479844)
 #8 0x0000000003480265 llvm::SelectionDAGISel::SelectCodeCommon(llvm::SDNode*, unsigned char const*, unsigned int) (/opt/compiler-explorer/clang-trunk/bin/llc+0x3480265)
 #9 0x0000000001776d27 (anonymous namespace)::PPCDAGToDAGISel::Select(llvm::SDNode*) PPCISelDAGToDAG.cpp:0:0
#10 0x0000000003476d07 llvm::SelectionDAGISel::DoInstructionSelection() (/opt/compiler-explorer/clang-trunk/bin/llc+0x3476d07)
#11 0x0000000003484c65 llvm::SelectionDAGISel::CodeGenAndEmitDAG() (/opt/compiler-explorer/clang-trunk/bin/llc+0x3484c65)
#12 0x0000000003487918 llvm::SelectionDAGISel::SelectAllBasicBlocks(llvm::Function const&) (/opt/compiler-explorer/clang-trunk/bin/llc+0x3487918)
#13 0x000000000348a0f9 llvm::SelectionDAGISel::runOnMachineFunction(llvm::MachineFunction&) (.part.0) SelectionDAGISel.cpp:0:0
#14 0x000000000177d7a7 (anonymous namespace)::PPCDAGToDAGISel::runOnMachineFunction(llvm::MachineFunction&) PPCISelDAGToDAG.cpp:0:0
#15 0x00000000027da790 llvm::MachineFunctionPass::runOnFunction(llvm::Function&) (.part.0) MachineFunctionPass.cpp:0:0
#16 0x0000000002cff152 llvm::FPPassManager::runOnFunction(llvm::Function&) (/opt/compiler-explorer/clang-trunk/bin/llc+0x2cff152)
#17 0x0000000002cff2d1 llvm::FPPassManager::runOnModule(llvm::Module&) (/opt/compiler-explorer/clang-trunk/bin/llc+0x2cff2d1)
#18 0x0000000002d00f80 llvm::legacy::PassManagerImpl::run(llvm::Module&) (/opt/compiler-explorer/clang-trunk/bin/llc+0x2d00f80)
#19 0x000000000083d4c4 compileModule(char**, llvm::LLVMContext&) llc.cpp:0:0
#20 0x000000000073b0ce main (/opt/compiler-explorer/clang-trunk/bin/llc+0x73b0ce)
#21 0x0000798ba1629d90 (/lib/x86_64-linux-gnu/libc.so.6+0x29d90)
#22 0x0000798ba1629e40 __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x29e40)
#23 0x00000000008350fe _start (/opt/compiler-explorer/clang-trunk/bin/llc+0x8350fe)
Program terminated with signal: SIGSEGV
Compiler returned: 139
```

Link: https://llvm.godbolt.org/z/16W8EKzfa

both `powerpc64` and `powerpc` (32-bit) complete selection and emit a call to `__trunctfhf2`. I am not sure if this is correct or if it should try to call `__trunckfhf2` instead, but all three targets (powerpc64, powerpc64le, powerpc) should all probably act the same.

</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJy0mFtz27oRxz8N_LIjDQhSvDzoQZEs19OkR2Onp9MnDQiCFGoQYAEwts-n7wCkLFFHJ4mTNJObQex_f8AubkutFY3ifIkWH9Bic0N7d9Bm6RqjrY0XN6WuXpefDxxKLvUz1FRIC06D5ZIzB1qBo6bhDlCKO_3MTcfSRPJZr56UflYzKVT_MmtUj1KM4hXCG4SPf6d4-C3ll3ZoqngtFIcDlTWgBFe81YjkdReRHBBZUEQK6JWiLa_2tKoMoOzDYGkdNe7NAfjeewwo3kDdOdMrBicVz-9dHPsa7kaX3miEyzYXlFfRHX9xQ9PHj79_gtuHh98eULyCNVVKu3GWfAN-ycliEWE_CSBiMqLtnd7XXZQO35MqwkeoU0O8gjoiOSJrdghma929bo1uH3jju0VVSihGZA0PvBHWcYPiVT0O9k3vqMjom2IQO9qcdb5XUPeKOaGV7xqiED7sPt6uHm_B9mUrHFAo-wYM77RxYUqd66wPAdkism2EO_TlnOkWkW2I8PDPrDP6P35SyFZY23OLyBaoqkAoJvuKgztwYIbaA5SUPTlDGZ8P7h8dZU9Q9W33Fmg8R7jYGd0Y2gI1Td9y5TwEILLVnffCdNsJyc2Mv3RSG258m6Sqmfm8eEJkWwoV4BjMtLejXeete9f1bm5h9pKnM2rbmX1Vjr6geCOU4xJmrTOikxzFm69mPqB4bXVvGEfx7YAdeeyHXimhGuiotYBIth3nHHa-4RNVtPGwmV9kra56yX2viRjJxqkh1wR3nmq3hs3qbobi283qDnbUOW4U3CvrTD-4ewxJ6oM9-DrGPng7LsJszCNEYgz4BR9_xSktyiqHEOF4heKVfbXDf3ZGKBdi9tkHEZH81MnQ5722znDaIpL63BXK-dWNfKK_P3KIfMAvIwsixQk2uoDNFgmDR9EoKv9GVSW9aD76HprtnHU-wXD48yZERqGsyEsapQlZEDzSSlEisn3J032anG144QObWz1PA14wmcDFU80iLWoGnTsYTqv9k5DyfQ6C_cRBcgmdZCk0NozzvfBJlk60F1Ntkmd1DLT0m8G7lIPhRDk9jxnOSM45P0uwfyrx354_OiNU80i_hO3O5x39Ms2xoccDr8e8mjMtqxDnk-n1WGeTpEmyIk-SM4C3BbNZ3d0_cjm0Dlv-v7kbPk9RNv_QFUdk9dMpPsBMpiuf0uaYpItv0g6ta13xtW5bv_av466hV-GGUAE7UANMK-suv_yKtTtwTwZWnA8syrK0Ipl3QpVWr63uLfibgO3C5lKMm85uvVndfdZXBvvXEdnt1r7z0fDPSeE3EnyRFGmFs29O80af7bRnG23-CxLBA7zNlyeMLhIhYd-RCD4F7rhaqeq2FW6zuvslcMH3BI5cwGVFlH9nlq6k_ECtYB-kZk92Esa3M3PMy_QXoHuyCXp8gU5xXXwT3fTqN_WJsoNQ_Eg5Qf_TtyP7vKPGzXHYqS6kr2dmcrFOqoz-2Dr5QebvWj6Lc0iSVTQrMPylsr8CnTFdhfnqzF3Ru841OWwIq-toQc64tjtveryMvZvoh_NwJJnkYXaJSqroO1A_hbvjNI5j0y_BJFU0wZycR6TCuM7PIy15Q9nrmIUn4Pu2O2Xh_wl2YJnATs4YnMdVwhIYhd8mzp984agIx96JzL_51lqFR-CAJyW7mmYET-80cYkZh5YK9VMjGnTOB0Sii2tZURXvvKcGk4kmudTkCYb93pvtw8N7fzaS7_bCk6mX-CIUC1xzGPR_apIGpTdXx9ei46YVijpewbNwBxhuxf7p-Hh_93h79_vQfT16A8NdbxSvfI8oLr5SHfgo1JPvNX0Q-7SZN7oqtXRzbRpEtn8gso3Sf-W3f_-jpucKpXaHSUUFpTg8kk9tvgWRPCazUoTbl58WyR0fiw7-UPQWfHiqMyqlf6SjFO_3oSDi6kNNUIrncA-0hVCu6A0HUYM7CAvCAtPGhCqP8a3CgT3oXlbgzKvXCponwadREISyjtPKr5WydxA8HwznY6nIv03z08jIGs6ez2c_-kGNDr1EZ3RJS_kKlLlQJLC0PVYGbqplXBVxQW_4MsqilGRxTtKbwzJlGcY1LuMiKTGlpFhwkrMsIiwpacLYjVgSTBK8IBFOkzhJ53GCoxLTpEzSOmcZRgnmLRVyHuKnTXMTyhbLguRpeiNpyaUNxTNCFH-G8BERghabG7MMBY-ybyxKsBTW2ZOKE07yZagahVqMf6FDHaWhxObjoA3c9EYuf7ysEhD_FwAA__8TSu0Q">