[LLVMdev] assertion when -sse2 on x86-64

Craig Topper craig.topper at gmail.com
Wed Oct 9 20:55:44 PDT 2013


Attached is a patch that should fix this, but I'm not entirely sure this is
the correct fix. It basically makes is so that only float will pass in xmm0
when only sse1 is enabled. Previously we would pass double in xmm0 if sse1
was enabled.


On Wed, Oct 9, 2013 at 6:41 PM, Peng Cheng <gm4cheng at gmail.com> wrote:

> Hi,
>
> I have an ir at the end of this email.  Run it with:
>
> llc -mcpu=i386 -march=x86-64 -mattr=-sse2
>
> and get assertion below.  Changing cpu does not help.
>
> I am using llc from the latest svn repository.
>
> Any suggestions to work around this?  I need to disable sse2 instructions
> for x86-64.
>
> Thanks,
>
> -Peng
>
> -----error message------
>
> llc: X86FloatingPoint.cpp:332: unsigned int getFPReg(const
> llvm::MachineOperand &): Assertion `Reg >= X86::FP0 && Reg <= X86::FP6 &&
> "Expected FP register!"' failed.
> 0  llc             0x0000000000f75942
> llvm::sys::PrintStackTrace(_IO_FILE*) + 34
> 1  llc             0x0000000000f75ed8
> 2  libpthread.so.0 0x00007f23f8edef60
> 3  libc.so.6       0x00007f23f7fe9165 gsignal + 53
> 4  libc.so.6       0x00007f23f7febf70 abort + 384
> 5  libc.so.6       0x00007f23f7fe22b1 __assert_fail + 241
> 6  llc             0x00000000008cf260
> 7  llc             0x00000000008cbb3e
> 8  llc             0x00000000008cb443
> 9  llc             0x0000000000bbfaa7
> llvm::MachineFunctionPass::runOnFunction(llvm::Function&) + 55
> 10 llc             0x0000000000f149a6
> llvm::FPPassManager::runOnFunction(llvm::Function&) + 310
> 11 llc             0x0000000000f14c1b
> llvm::FPPassManager::runOnModule(llvm::Module&) + 59
> 12 llc             0x0000000000f14eee
> llvm::MPPassManager::runOnModule(llvm::Module&) + 334
> 13 llc             0x0000000000f15515
> llvm::PassManagerImpl::run(llvm::Module&) + 293
> 14 llc             0x0000000000f1569a
> llvm::PassManager::run(llvm::Module&) + 10
> 15 llc             0x00000000005193e8 main + 6232
> 16 libc.so.6       0x00007f23f7fd5c4d __libc_start_main + 253
> 17 llc             0x0000000000517ac9
> Stack dump:
> 0. Program arguments: /local/pcheng/tmp/llvm_build/bin/llc -mcpu=i386
> -march=x86-64 -mattr=-sse2 test.ll -o test.bc
> 1. Running pass 'Function Pass Manager' on module 'test.ll'.
> 2. Running pass 'X86 FP Stackifier' on function '@f3'
> Abort
>
>
> -------- ir ---------
> ; ModuleID = 'module_name'
>
> declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture, i8* nocapture, i64,
> i32, i1) nounwind
>
> define void @f3(double %a, [2 x double]*) {
> entry:
>   %r1 = alloca [2 x double]
>   br label %1
>
> ; <label>:1                                       ; preds = %entry
>   %2 = getelementptr [2 x double]* %r1, i64 0, i64 0
>   store double %a, double* %2
>   br label %3
>
> ; <label>:3                                       ; preds = %1
>   %4 = getelementptr [2 x double]* %r1, i64 0, i64 1
>   store double %a, double* %4
>   br label %5
>
> ; <label>:5                                       ; preds = %3
>   %6 = bitcast [2 x double]* %0 to i8*
>   %7 = bitcast [2 x double]* %r1 to i8*
>   call void @llvm.memcpy.p0i8.p0i8.i64(i8* %6, i8* %7, i64 16, i32 4, i1
> false)
>   ret void
> }
>
>
> _______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
>
>


-- 
~Craig
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20131009/7823e60c/attachment.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: abi.patch
Type: application/octet-stream
Size: 925 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20131009/7823e60c/attachment.obj>


More information about the llvm-dev mailing list