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):
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.
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.