llvm / llvm-project

The LLVM Project is a collection of modular and reusable compiler and toolchain technologies.
http://llvm.org
Other
25.92k stars 10.57k forks source link

llc: "Do not know how to split the result of this operator!" #3775

Closed edwintorok closed 15 years ago

edwintorok commented 15 years ago
Bugzilla Link 3403
Resolution WORKSFORME
Resolved on May 06, 2009 02:08
Version unspecified
OS Linux
CC @asl

Extended Description

Due to my recent change for #​3402, it is now possible to use -mattr=-sse on x86-64. However in some cases this causes assertion failures in codegen (all ok with defaults, and -m32):

Testcase: $ llc -march=x86-64 x.bc -f -mattr=-sse target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128" target triple = "x86_64-unknown-linux-gnu"

define void @​acpi_os_printf(i8 %fmt, ...) nounwind optsize { entry: ret void } llc: /home/edwin/llvm-bootstrap/llvm/lib/CodeGen/SelectionDAG/LegalizeVectorTypes.cpp:358: void llvm::DAGTypeLegalizer::SplitVectorResult(llvm::SDNode, unsigned int): Assertion `0 && "Do not know how to split the result of this operator!"' failed. 0 llc 0x0000000000c6e99f 1 libc.so.6 0x00007fac0e79df60 2 libc.so.6 0x00007fac0e79ded5 gsignal + 53 3 libc.so.6 0x00007fac0e79f3f3 abort + 387 4 libc.so.6 0x00007fac0e796dc9 __assert_fail + 233 5 llc 0x00000000009e50aa 6 llc 0x00000000009d6c2d 7 llc 0x00000000009d76cf llvm::SelectionDAG::LegalizeTypes() + 847 8 llc 0x0000000000973528 llvm::SelectionDAGISel::CodeGenAndEmitDAG() + 568 9 llc 0x0000000000975612 llvm::SelectionDAGISel::SelectBasicBlock(llvm::BasicBlock, llvm::ilist_iterator, llvm::ilist_iterator) + 562 10 llc 0x0000000000975a0c llvm::SelectionDAGISel::SelectAllBasicBlocks(llvm::Function&, llvm::MachineFunction&, llvm::MachineModuleInfo, llvm::DwarfWriter*, llvm::TargetInstrInfo const&) + 748 11 llc 0x0000000000976f9e llvm::SelectionDAGISel::runOnFunction(llvm::Function&) + 1214 12 llc 0x0000000000c0a2fb llvm::FPPassManager::runOnFunction(llvm::Function&) + 347 13 llc 0x0000000000c0a6f6 llvm::FunctionPassManagerImpl::run(llvm::Function&) + 134 14 llc 0x0000000000c0a87e llvm::FunctionPassManager::run(llvm::Function&) + 62 15 llc 0x00000000004fbc31 main + 4193 16 libc.so.6 0x00007fac0e78a1a6 __libc_start_main + 230 17 llc 0x00000000004fa129 std::ios_base::Init::~Init() + 57 Aborted

Without -mattr=-sse, llc generates this: acpi_os_printf: subq $184, %rsp movaps %xmm7, 160(%rsp) movaps %xmm6, 144(%rsp) movaps %xmm5, 128(%rsp) movaps %xmm4, 112(%rsp) movaps %xmm3, 96(%rsp) movaps %xmm2, 80(%rsp) movaps %xmm1, 64(%rsp) movaps %xmm0, 48(%rsp) movq %r9, 40(%rsp) movq %r8, 32(%rsp) movq %rcx, 24(%rsp) movq %rdx, 16(%rsp) movq %rsi, 8(%rsp) addq $184, %rsp ret

gcc generates this: $ gcc x.c -S -o - -m64 -mno-sse acpi_os_printf: .LFB2: pushq %rbp .LCFI0: movq %rsp, %rbp .LCFI1: subq $72, %rsp .LCFI2: movq %rsi, -168(%rbp) movq %rdx, -160(%rbp) movq %rcx, -152(%rbp) movq %r8, -144(%rbp) movq %r9, -136(%rbp) movq %rdi, -184(%rbp) leave ret

Or with -O1: acpi_os_printf: .LFB2: rep ret

To reproduce with llvm-gcc: / testcase / void acpi_os_printf(unsigned char* fmt, ...) { }

$ llvm-gcc x.c -S -o - -m64 -mno-sse .ident "GCC: (GNU) 4.2.1 (Based on Apple Inc. build 5636) (LLVM build)" SplitVectorResult #​0: 0x2772730: v4f32 = Register #​1038 cc1: /home/edwin/llvm-bootstrap/llvm/lib/CodeGen/SelectionDAG/LegalizeVectorTypes.cpp:358: void llvm::DAGTypeLegalizer::SplitVectorResult(llvm::SDNode*, unsigned int): Assertion `0 && "Do not know how to split the result of this operator!"' failed. x.c:2: internal compiler error: Aborted Please submit a full bug report, with preprocessed source if appropriate. See <URL:http://developer.apple.com/bugreporter> for instructions.

llvmbot commented 15 years ago

This seems to have been fixed at some point.