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

    <tr>
        <th>Summary</th>
        <td>
            [AArch64][ISel][SVE] Cannot select setcc
        </td>
    </tr>

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

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

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

<pre>
    LLVM version 21

[input.txt](https://github.com/user-attachments/files/20062592/input.txt)

Command to repro: `llc -mtriple=aarch64-unknown-linux-gnu -mattr=+sve input.txt`

Error message:
```
LLVM ERROR: Cannot select: t18: nxv8i1 = setcc t12, t16, setole:ch
  t12: nxv8bf16,ch = masked_load<(load unknown-size from %ir.scevgep4, align 2, !noalias !5)> t0, t7, undef:i64, t10, undef:nxv8bf16
    t7: i64 = add t6, t4
      t6: i64,ch = CopyFromReg t0, Register:i64 %4
        t5: i64 = Register %4
      t4: i64 = shl t2, Constant:i64<1>
        t2: i64,ch = CopyFromReg t0, Register:i64 %7
 t1: i64 = Register %7
        t3: i64 = Constant<1>
    t11: i64 = undef
    t10: nxv8i1,ch = CopyFromReg t0, Register:nxv8i1 %8
      t9: nxv8i1 = Register %8
    t136: nxv8bf16 = undef
  t16: nxv8bf16 = splat_vector ConstantFP:bf16<APFloat(49920)>
    t13: bf16 = ConstantFP<APFloat(49920)>
In function: convert.2_kernel
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace.
Stack dump:
0.      Program arguments: ./build/bin/llc -mtriple=aarch64-unknown-linux-gnu -mattr=+sve -o output.s test.ll --debug-only=isel --print-after-all
1.      Running pass 'Function Pass Manager' on module 'test.ll'.
2.      Running pass 'AArch64 Instruction Selection' on function '@convert.2_kernel'
 #0 0x000000010413ac38 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/Users/sonvu/dev/llvm-project/build/bin/llc+0x10384ec38)
 #1 0x000000010413b1d0 PrintStackTraceSignalHandler(void*) (/Users/sonvu/dev/llvm-project/build/bin/llc+0x10384f1d0)
 #2 0x0000000104138fc4 llvm::sys::RunSignalHandlers() (/Users/sonvu/dev/llvm-project/build/bin/llc+0x10384cfc4)
 #3 0x000000010413bac4 SignalHandler(int, __siginfo*, void*) (/Users/sonvu/dev/llvm-project/build/bin/llc+0x10384fac4)
 #4 0x000000019ec5f624 (/usr/lib/system/libsystem_platform.dylib+0x1804ab624)
 #5 0x000000019ec2588c (/usr/lib/system/libsystem_pthread.dylib+0x18047188c)
 #6 0x000000019eb2ec60 (/usr/lib/system/libsystem_c.dylib+0x18037ac60)
 #7 0x000000010401c97c llvm::report_fatal_error(llvm::Twine const&, bool) (/Users/sonvu/dev/llvm-project/build/bin/llc+0x10373097c)
 #8 0x0000000103ecb1d0 llvm::SmallVectorTemplateCommon<(anonymous namespace)::MatchScope, void>::back() (/Users/sonvu/dev/llvm-project/build/bin/llc+0x1035df1d0)
 #9 0x0000000103ec841c llvm::SelectionDAGISel::SelectCodeCommon(llvm::SDNode*, unsigned char const*, unsigned int) (/Users/sonvu/dev/llvm-project/build/bin/llc+0x1035dc41c)
#10 0x0000000101788d78 (anonymous namespace)::AArch64DAGToDAGISel::SelectCode(llvm::SDNode*) (/Users/sonvu/dev/llvm-project/build/bin/llc+0x100e9cd78)
#11 0x00000001017704c8 (anonymous namespace)::AArch64DAGToDAGISel::Select(llvm::SDNode*) (/Users/sonvu/dev/llvm-project/build/bin/llc+0x100e844c8)
#12 0x0000000103ebb6b8 llvm::SelectionDAGISel::DoInstructionSelection() (/Users/sonvu/dev/llvm-project/build/bin/llc+0x1035cf6b8)
#13 0x0000000103eba9a4 llvm::SelectionDAGISel::CodeGenAndEmitDAG() (/Users/sonvu/dev/llvm-project/build/bin/llc+0x1035ce9a4)
#14 0x0000000103eb96ec llvm::SelectionDAGISel::SelectBasicBlock(llvm::ilist_iterator_w_bits<llvm::ilist_detail::node_options<llvm::Instruction, true, false, void, true, llvm::BasicBlock>, false, true>, llvm::ilist_iterator_w_bits<llvm::ilist_detail::node_options<llvm::Instruction, true, false, void, true, llvm::BasicBlock>, false, true>, bool&) (/Users/sonvu/dev/llvm-project/build/bin/llc+0x1035cd6ec)
#15 0x0000000103eb9070 llvm::SelectionDAGISel::SelectAllBasicBlocks(llvm::Function const&) (/Users/sonvu/dev/llvm-project/build/bin/llc+0x1035cd070)
#16 0x0000000103eb6dbc llvm::SelectionDAGISel::runOnMachineFunction(llvm::MachineFunction&) (/Users/sonvu/dev/llvm-project/build/bin/llc+0x1035cadbc)
#17 0x000000010175df20 (anonymous namespace)::AArch64DAGToDAGISel::runOnMachineFunction(llvm::MachineFunction&) (/Users/sonvu/dev/llvm-project/build/bin/llc+0x100e71f20)
#18 0x0000000103eb57f4 llvm::SelectionDAGISelLegacy::runOnMachineFunction(llvm::MachineFunction&) (/Users/sonvu/dev/llvm-project/build/bin/llc+0x1035c97f4)
#19 0x000000010295b618 llvm::MachineFunctionPass::runOnFunction(llvm::Function&) (/Users/sonvu/dev/llvm-project/build/bin/llc+0x10206f618)
#20 0x000000010320d768 llvm::FPPassManager::runOnFunction(llvm::Function&) (/Users/sonvu/dev/llvm-project/build/bin/llc+0x102921768)
#21 0x0000000103213f08 llvm::FPPassManager::runOnModule(llvm::Module&) (/Users/sonvu/dev/llvm-project/build/bin/llc+0x102927f08)
#22 0x000000010320df98 (anonymous namespace)::MPPassManager::runOnModule(llvm::Module&) (/Users/sonvu/dev/llvm-project/build/bin/llc+0x102921f98)
#23 0x000000010320db60 llvm::legacy::PassManagerImpl::run(llvm::Module&) (/Users/sonvu/dev/llvm-project/build/bin/llc+0x102921b60)
#24 0x00000001032142d0 llvm::legacy::PassManager::run(llvm::Module&) (/Users/sonvu/dev/llvm-project/build/bin/llc+0x1029282d0)
#25 0x00000001008f07a4 compileModule(char**, llvm::LLVMContext&) (/Users/sonvu/dev/llvm-project/build/bin/llc+0x1000047a4)
#26 0x00000001008ee964 main (/Users/sonvu/dev/llvm-project/build/bin/llc+0x100002964)
```

I've tried to follow the transformation logic for non-SVE version of the code and it seems `setcc` is combined into `select` to produce `select_cc`. Do we want to do the same for `vselect` here? I can try to take a deeper look but I'm not familiar with SVE codegen so any advice would be much appreciated! @paulwalker-arm @david-arm 

</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJzUmV9v2zgSwD8N80LYoEj9fciDYse9As1tkPT6alAkZfNCkQZJOcl9-gMpJ5Lc7TboeXdxRVDJ_DPzG85wOJKoc3KnhbgG2Q3I1le093tjr_1rg0pUXDWGv15_-fLtDh6FddJoiBOA6vCX3Uh96P3Sv3iQrQEu994fHCA1wBuANzvp932zZKYDeNM7YRfUe8r2ndDeAbxppRLhihHKcVZhgDejPFwNSlam66jm0BtoxcEaQGoIcqQUg4vOW3lQApA1pZbt83TR6ydtnvVCSd2_LHa6h4uOem8BWQN8444CjhpyNGi4tdZY2Ann6E4EeFSHvuEP1dH024eH3x6C6hXV2njohBLMhwaflOGiX46lTCAga-iEZwz6BAO8gj7Jw8UJbwJozfYA1TD2nmY1bRzC9nFyR92T4FtlKAdkBXAZ7uCbWU7-R8DWmg4CnEm7dEwcd-KQBhVUyZ2GUSnAiTZUSerCbRbWktxCjyJQEf7vNRctILXM04ESTVvfsQIqDFNIDWWeRkLKOfTRKJ-eBsDQMAwZLVmZw-vGmu5B7E6qH8ROOi_soDeYMAqA0GdTLW9j56N8Oh3j9gr6aPDKaOep9ieLyCoB5HYqG_8SXhFE-ORHXMVUA5mOGnmmJD6ZiRpW-60LjVH0Qci3kMNZOS5QdRaMU97yXRnJp9F3RhNC9rzXHRT126Ng3th36zb3gNQxTsiqvt8oQz3AZVpVGA0hN-oLAt-FTef_cOJnDdteMy-NDpOZ0Udh_RJvn4TVQgFU33-5rR9voeubTnpIYdPvQoow1odk8QepSKnj22VxsObfYSfjjXSuj-kIhnQjNVM9F9DvBWSWuj1sKHvyljKxBKh-9JQ9Qd53hyFhoCVA1b01O0s7SO2uH3IcqeES4E3TS8XDVeqo9xdT18JA0_uQvhz0wvmlUnCx4KLpdwuj1Ssga-lEaDtYqf2Ctj7kXBUWKwmAD73WUu_ggbqQGYrNaYHhfWi4o5ruhAW4gEbDzvBeiTDqpArgIliOf09QXUcb4GftvO0HmY8xRQb3DQLfvBnGgxR951ActxPABEH0goZ_CUoTQhkpYfQZqQGp3asbbu6DkdERX4NbQq58H2Tp89Y4bwXtAI7JSupwpkCAS4A3_3LCBlc7o489wBsujt8HxHdeA_gGvSSIlKlgpBxOqACcnAE3CUfwjO5R7jRV_6Caq7DE5dFIDnB9OaQ24WhEwmdIZcvS31vDh17PyFyEuRQTa1k6MpHzZaIshefrEt20gtutkzupWxPXaAUvv1x0ipZO0CrBsjbH6UlR72yYK5ug7NV50Q0_h_ttyIutsd2Sv8YxQX6JUtrkeCI_m8vHWVmyD8r3eysoPxNfJGXJRvH5THyDBcvRx8SzuWBSUJZPwqiYuQwlrCrYJIyGbLttqadqK0IZNduEX5-lFiFzO3_ahI0x6lI-LAiqiskilFNWIljchSPMY0eV-hYPsK-iC24TobQMp0sos6g2-rUzvYOadsIdYkKphql31LP9IzMH8R6K5HboCofCBbdMxufbuDqzqUyT6fq_p9h1_enzo1DT1pXhbwZOffK4_qfh4rSreh0rfw7Znto3R817Lpg2M87S5OSwkDVneT4pypIXJfyJK04Hzbr-9NX8wOgfmXsRI5CoGC_K0YhkbkSBUva_GvEnG1CmKZsYgOch1jR5U_40xNZmctJPDvrLbQTW5s2EkpxR0oqmP6UM0fBJ6Frz2076df3pooCioukImJ4BVrn46E69oU6yG2ViJhmnSCWd30ovLPXGbp-3jQwV5ep8BBeeypNAbbjYmkNQNB86cVd8crN9zGUtVW5MapOOceaEjtzO5sSxQ9v_J_VwGuWXCwmei0l-y85DAhXogyFRKzVa4GZh8V6zj-fqxfBRgUb8_Aw_583PI9r2-jd9R9leavFGOsP_ru-C_JQ3k-Uv5pk54y1Gv5yZ_z67kCiSFk_8clbnNFnR_lEq_CJ2lL3-3VaQjFVFO8mXs8oGV1mTJ9Nj5wwkPJ9OTPhd9stDY5S3eTKeQnhWsRCMeJFPoTf3gfPtMfqvx61wUuQT3GSOm5AWfQT3Lj75z-Pi1HRB1KJFE1R8vrJt9dMy6u5v5U_aasJPzvmbfJrr1WQTTqA_d4cxv_zpwE0-ZhGcnsVGivkHgP8y2BLzCezsJEVliwqaQma6g1Ti3dvhGSbWyfW8FPjy5dvdymgvXi54WiKE0mJS_-F8jihElaewo1JfSBuu8jdtk28TANWfAS6OAnorRfxI0hqlzHN8b-kt1a41tqOxYFBmJxlsjYXa6MXjt9v3DzqmHd5zGi6Gl58eOiE6B0GO4tcMkCMoXVjyRp6eCs3QGR9YchQ0H6zhPRNj-zZOXMK1gc8CPlMdX8xyE5U52okIA3J0HOXshRWAbOBnyKiG3r6GKZ4-CUghF-IgLFTGPMGm9zCY3kFtPGxpJ5WkFj5Lv4fBtGDLTmjoDKT6FVJ-lEzAZ9MrDhsBu57tIT0crGCSesEBTiBI0YH26pmqJ2EX1HahhdOj5MMPVF_xa8IrUtErcZ0UaZ6RglTl1f66xG2aNaQoU17whNOCIFbxKsVpVZaMtVfyGiOcoQzlCUlyUixxkVY5xy2tSoGrhoIUiY5KtQwhsTR2dxXfR18npMzL_ErRRigXv9BhrMUzjL0AY5Ctr-x1jKOm3zmQolBeu1GMl17FT3un2gZka5DdxMom3j1-uwXZev5da_iEddVbdf3rr9FP5Mdr_N8AAAD__zs0lVY">