Skip to content

[aarch64] Cannot select: constant:i128<0> for llvm.maximum.f128 #139380

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
Urgau opened this issue May 10, 2025 · 1 comment
Open

[aarch64] Cannot select: constant:i128<0> for llvm.maximum.f128 #139380

Urgau opened this issue May 10, 2025 · 1 comment
Labels
backend:AArch64 crash Prefer [crash-on-valid] or [crash-on-invalid] llvm:SelectionDAG SelectionDAGISel as well

Comments

@Urgau
Copy link

Urgau commented May 10, 2025

I'm seeing an error when trying to use llvm.minimum.f128 and llvm.maximum.f128 on aarch64.

define fp128 @call_maximum_fp128(fp128 %x, fp128 %y) unnamed_addr #0 {
start:
  %0 = tail call fp128 @llvm.maximum.f128(fp128 %x, fp128 %y) #2
  ret fp128 %0
}

; Function Attrs: mustprogress nofree nosync nounwind readnone speculatable willreturn
declare fp128 @llvm.maximum.f128(fp128, fp128)
LLVM ERROR: Cannot select: 0x10c8bea0: i32 = setcc 0x10c888c0, Constant:i128<0>, seteq:ch
  0x10c888c0: i128 = bitcast 0x10c87fd8
    0x10c87fd8: f128,ch = CopyFromReg 0x10c105c0, Register:f128 %1
      0x10c87f60: f128 = Register %1
  0x10c8bbd0: i128 = Constant<0>
In function: call_maximum_fp128
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 <source>
1.	Running pass 'Function Pass Manager' on module '<source>'.
2.	Running pass 'AArch64 Instruction Selection' on function '@call_maximum_fp128'
 #0 0x0000000003b49548 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/opt/compiler-explorer/clang-trunk/bin/llc+0x3b49548)
 #1 0x0000000003b47104 SignalHandler(int, siginfo_t*, void*) Signals.cpp:0:0
 #2 0x000073d283c42520 (/lib/x86_64-linux-gnu/libc.so.6+0x42520)
 #3 0x000073d283c969fc pthread_kill (/lib/x86_64-linux-gnu/libc.so.6+0x969fc)
 #4 0x000073d283c42476 gsignal (/lib/x86_64-linux-gnu/libc.so.6+0x42476)
 #5 0x000073d283c287f3 abort (/lib/x86_64-linux-gnu/libc.so.6+0x287f3)
 #6 0x0000000000784592 llvm::UniqueStringSaver::save(llvm::Twine const&) (.cold) StringSaver.cpp:0:0
 #7 0x00000000038f0888 llvm::SelectionDAGISel::CannotYetSelect(llvm::SDNode*) (/opt/compiler-explorer/clang-trunk/bin/llc+0x38f0888)
 #8 0x00000000038f6bf9 llvm::SelectionDAGISel::SelectCodeCommon(llvm::SDNode*, unsigned char const*, unsigned int) (/opt/compiler-explorer/clang-trunk/bin/llc+0x38f6bf9)
 #9 0x0000000000bfa944 (anonymous namespace)::AArch64DAGToDAGISel::Select(llvm::SDNode*) AArch64ISelDAGToDAG.cpp:0:0
#10 0x00000000038edd74 llvm::SelectionDAGISel::DoInstructionSelection() (/opt/compiler-explorer/clang-trunk/bin/llc+0x38edd74)
#11 0x00000000038fc882 llvm::SelectionDAGISel::CodeGenAndEmitDAG() (/opt/compiler-explorer/clang-trunk/bin/llc+0x38fc882)
#12 0x00000000038ff1fa llvm::SelectionDAGISel::SelectAllBasicBlocks(llvm::Function const&) (/opt/compiler-explorer/clang-trunk/bin/llc+0x38ff1fa)
#13 0x00000000039010d6 llvm::SelectionDAGISel::runOnMachineFunction(llvm::MachineFunction&) (/opt/compiler-explorer/clang-trunk/bin/llc+0x39010d6)
#14 0x00000000038ed8f1 llvm::SelectionDAGISelLegacy::runOnMachineFunction(llvm::MachineFunction&) (/opt/compiler-explorer/clang-trunk/bin/llc+0x38ed8f1)
#15 0x0000000002bb4a78 llvm::MachineFunctionPass::runOnFunction(llvm::Function&) (.part.0) MachineFunctionPass.cpp:0:0
#16 0x0000000003135322 llvm::FPPassManager::runOnFunction(llvm::Function&) (/opt/compiler-explorer/clang-trunk/bin/llc+0x3135322)
#17 0x00000000031355b1 llvm::FPPassManager::runOnModule(llvm::Module&) (/opt/compiler-explorer/clang-trunk/bin/llc+0x31355b1)
#18 0x0000000003136f19 llvm::legacy::PassManagerImpl::run(llvm::Module&) (/opt/compiler-explorer/clang-trunk/bin/llc+0x3136f19)
#19 0x00000000008bec3f compileModule(char**, llvm::LLVMContext&) llc.cpp:0:0
#20 0x000000000079977e main (/opt/compiler-explorer/clang-trunk/bin/llc+0x79977e)
#21 0x000073d283c29d90 (/lib/x86_64-linux-gnu/libc.so.6+0x29d90)
#22 0x000073d283c29e40 __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x29e40)
#23 0x00000000008b6705 _start (/opt/compiler-explorer/clang-trunk/bin/llc+0x8b6705)
Program terminated with signal: SIGSEGV
Compiler returned: 139

https://godbolt.org/z/YWdK1ecM5

@llvmbot
Copy link
Member

llvmbot commented May 10, 2025

@llvm/issue-subscribers-backend-aarch64

Author: None (Urgau)

I'm seeing an error when trying to use `llvm.minimum.f128` and `llvm.maximum.f128` on aarch64.
define fp128 @<!-- -->call_maximum_fp128(fp128 %x, fp128 %y) unnamed_addr #<!-- -->0 {
start:
  %0 = tail call fp128 @<!-- -->llvm.maximum.f128(fp128 %x, fp128 %y) #<!-- -->2
  ret fp128 %0
}

; Function Attrs: mustprogress nofree nosync nounwind readnone speculatable willreturn
declare fp128 @<!-- -->llvm.maximum.f128(fp128, fp128)
LLVM ERROR: Cannot select: 0x10c8bea0: i32 = setcc 0x10c888c0, Constant:i128&lt;0&gt;, seteq:ch
  0x10c888c0: i128 = bitcast 0x10c87fd8
    0x10c87fd8: f128,ch = CopyFromReg 0x10c105c0, Register:f128 %1
      0x10c87f60: f128 = Register %1
  0x10c8bbd0: i128 = Constant&lt;0&gt;
In function: call_maximum_fp128
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 &lt;source&gt;
1.	Running pass 'Function Pass Manager' on module '&lt;source&gt;'.
2.	Running pass 'AArch64 Instruction Selection' on function '@<!-- -->call_maximum_fp128'
 #<!-- -->0 0x0000000003b49548 llvm::sys::PrintStackTrace(llvm::raw_ostream&amp;, int) (/opt/compiler-explorer/clang-trunk/bin/llc+0x3b49548)
 #<!-- -->1 0x0000000003b47104 SignalHandler(int, siginfo_t*, void*) Signals.cpp:0:0
 #<!-- -->2 0x000073d283c42520 (/lib/x86_64-linux-gnu/libc.so.6+0x42520)
 #<!-- -->3 0x000073d283c969fc pthread_kill (/lib/x86_64-linux-gnu/libc.so.6+0x969fc)
 #<!-- -->4 0x000073d283c42476 gsignal (/lib/x86_64-linux-gnu/libc.so.6+0x42476)
 #<!-- -->5 0x000073d283c287f3 abort (/lib/x86_64-linux-gnu/libc.so.6+0x287f3)
 #<!-- -->6 0x0000000000784592 llvm::UniqueStringSaver::save(llvm::Twine const&amp;) (.cold) StringSaver.cpp:0:0
 #<!-- -->7 0x00000000038f0888 llvm::SelectionDAGISel::CannotYetSelect(llvm::SDNode*) (/opt/compiler-explorer/clang-trunk/bin/llc+0x38f0888)
 #<!-- -->8 0x00000000038f6bf9 llvm::SelectionDAGISel::SelectCodeCommon(llvm::SDNode*, unsigned char const*, unsigned int) (/opt/compiler-explorer/clang-trunk/bin/llc+0x38f6bf9)
 #<!-- -->9 0x0000000000bfa944 (anonymous namespace)::AArch64DAGToDAGISel::Select(llvm::SDNode*) AArch64ISelDAGToDAG.cpp:0:0
#<!-- -->10 0x00000000038edd74 llvm::SelectionDAGISel::DoInstructionSelection() (/opt/compiler-explorer/clang-trunk/bin/llc+0x38edd74)
#<!-- -->11 0x00000000038fc882 llvm::SelectionDAGISel::CodeGenAndEmitDAG() (/opt/compiler-explorer/clang-trunk/bin/llc+0x38fc882)
#<!-- -->12 0x00000000038ff1fa llvm::SelectionDAGISel::SelectAllBasicBlocks(llvm::Function const&amp;) (/opt/compiler-explorer/clang-trunk/bin/llc+0x38ff1fa)
#<!-- -->13 0x00000000039010d6 llvm::SelectionDAGISel::runOnMachineFunction(llvm::MachineFunction&amp;) (/opt/compiler-explorer/clang-trunk/bin/llc+0x39010d6)
#<!-- -->14 0x00000000038ed8f1 llvm::SelectionDAGISelLegacy::runOnMachineFunction(llvm::MachineFunction&amp;) (/opt/compiler-explorer/clang-trunk/bin/llc+0x38ed8f1)
#<!-- -->15 0x0000000002bb4a78 llvm::MachineFunctionPass::runOnFunction(llvm::Function&amp;) (.part.0) MachineFunctionPass.cpp:0:0
#<!-- -->16 0x0000000003135322 llvm::FPPassManager::runOnFunction(llvm::Function&amp;) (/opt/compiler-explorer/clang-trunk/bin/llc+0x3135322)
#<!-- -->17 0x00000000031355b1 llvm::FPPassManager::runOnModule(llvm::Module&amp;) (/opt/compiler-explorer/clang-trunk/bin/llc+0x31355b1)
#<!-- -->18 0x0000000003136f19 llvm::legacy::PassManagerImpl::run(llvm::Module&amp;) (/opt/compiler-explorer/clang-trunk/bin/llc+0x3136f19)
#<!-- -->19 0x00000000008bec3f compileModule(char**, llvm::LLVMContext&amp;) llc.cpp:0:0
#<!-- -->20 0x000000000079977e main (/opt/compiler-explorer/clang-trunk/bin/llc+0x79977e)
#<!-- -->21 0x000073d283c29d90 (/lib/x86_64-linux-gnu/libc.so.6+0x29d90)
#<!-- -->22 0x000073d283c29e40 __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x29e40)
#<!-- -->23 0x00000000008b6705 _start (/opt/compiler-explorer/clang-trunk/bin/llc+0x8b6705)
Program terminated with signal: SIGSEGV
Compiler returned: 139

https://godbolt.org/z/YWdK1ecM5

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
backend:AArch64 crash Prefer [crash-on-valid] or [crash-on-invalid] llvm:SelectionDAG SelectionDAGISel as well
Projects
None yet
Development

No branches or pull requests

3 participants