<div dir="ltr">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.</div>
<div class="gmail_extra"><br><br><div class="gmail_quote">On Wed, Oct 9, 2013 at 6:41 PM, Peng Cheng <span dir="ltr"><<a href="mailto:gm4cheng@gmail.com" target="_blank">gm4cheng@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div dir="ltr">Hi,<div><br></div><div>I have an ir at the end of this email.  Run it with:</div><div><br></div><div>llc -mcpu=i386 -march=x86-64 -mattr=-sse2<br></div><div><br></div><div>and get assertion below.  Changing cpu does not help. </div>


<div><br></div><div>I am using llc from the latest svn repository.</div><div><br></div><div>Any suggestions to work around this?  I need to disable sse2 instructions for x86-64.</div><div><br></div><div>Thanks,</div><div>


<br></div><div>-Peng</div><div><br></div><div>-----error message------</div><div><br></div><div><div><div>llc: X86FloatingPoint.cpp:332: unsigned int getFPReg(const llvm::MachineOperand &): Assertion `Reg >= X86::FP0 && Reg <= X86::FP6 && "Expected FP register!"' failed.</div>


<div>0  llc             0x0000000000f75942 llvm::sys::PrintStackTrace(_IO_FILE*) + 34</div><div>1  llc             0x0000000000f75ed8</div><div>2  libpthread.so.0 0x00007f23f8edef60</div><div>3  libc.so.6       0x00007f23f7fe9165 gsignal + 53</div>


<div>4  libc.so.6       0x00007f23f7febf70 abort + 384</div><div>5  libc.so.6       0x00007f23f7fe22b1 __assert_fail + 241</div><div>6  llc             0x00000000008cf260</div><div>7  llc             0x00000000008cbb3e</div>


<div>8  llc             0x00000000008cb443</div><div>9  llc             0x0000000000bbfaa7 llvm::MachineFunctionPass::runOnFunction(llvm::Function&) + 55</div><div>10 llc             0x0000000000f149a6 llvm::FPPassManager::runOnFunction(llvm::Function&) + 310</div>


<div>11 llc             0x0000000000f14c1b llvm::FPPassManager::runOnModule(llvm::Module&) + 59</div><div>12 llc             0x0000000000f14eee llvm::MPPassManager::runOnModule(llvm::Module&) + 334</div><div>13 llc             0x0000000000f15515 llvm::PassManagerImpl::run(llvm::Module&) + 293</div>


<div>14 llc             0x0000000000f1569a llvm::PassManager::run(llvm::Module&) + 10</div><div>15 llc             0x00000000005193e8 main + 6232</div><div>16 libc.so.6       0x00007f23f7fd5c4d __libc_start_main + 253</div>


<div>17 llc             0x0000000000517ac9</div><div>Stack dump:</div><div>0.<span style="white-space:pre-wrap">  </span>Program arguments: /local/pcheng/tmp/llvm_build/bin/llc -mcpu=i386 -march=x86-64 -mattr=-sse2 test.ll -o test.bc </div>


<div>1.<span style="white-space:pre-wrap">        </span>Running pass 'Function Pass Manager' on module 'test.ll'.</div><div>2.<span style="white-space:pre-wrap">      </span>Running pass 'X86 FP Stackifier' on function '@f3'</div>


<div>Abort</div></div></div><div><br></div><div><br></div><div>-------- ir ---------</div><div><div><div>; ModuleID = 'module_name'</div><div><br></div><div>declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture, i8* nocapture, i64, i32, i1) nounwind</div>


<div><br></div><div>define void @f3(double %a, [2 x double]*) {</div><div>entry:</div><div>  %r1 = alloca [2 x double]</div><div>  br label %1</div><div><br></div><div>; <label>:1                                       ; preds = %entry</div>


<div>  %2 = getelementptr [2 x double]* %r1, i64 0, i64 0</div><div>  store double %a, double* %2</div><div>  br label %3</div><div><br></div><div>; <label>:3                                       ; preds = %1</div>


<div>  %4 = getelementptr [2 x double]* %r1, i64 0, i64 1</div><div>  store double %a, double* %4</div><div>  br label %5</div><div><br></div><div>; <label>:5                                       ; preds = %3</div>


<div>  %6 = bitcast [2 x double]* %0 to i8*</div><div>  %7 = bitcast [2 x double]* %r1 to i8*</div><div>  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %6, i8* %7, i64 16, i32 4, i1 false)</div><div>  ret void</div><div>}</div>


</div></div><div><br></div></div>
<br>_______________________________________________<br>
LLVM Developers mailing list<br>
<a href="mailto:LLVMdev@cs.uiuc.edu">LLVMdev@cs.uiuc.edu</a>         <a href="http://llvm.cs.uiuc.edu" target="_blank">http://llvm.cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev</a><br>
<br></blockquote></div><br><br clear="all"><div><br></div>-- <br>~Craig
</div>