[LLVMdev] VFCmp failing when unordered or UnsafeFPMath on x86

Nate Begeman natebegeman at mac.com
Mon Jun 16 09:01:43 PDT 2008


I'll take a look at this, thanks!

On Jun 16, 2008, at 3:23 AM, Nicolas Capens wrote:

> Hi Chris,
>
> I’ve attached a replacement of fibonacci.cpp that reproduces the  
> issue on x86/SSE systems.
>
> Regarding the definition of the VFCmp instruction, I think it would  
> really be a lot more valuable to define it as returning all 1’s or  
> all 0’s per element. Just setting the most significant bit is pretty  
> much worthless (someone correct me if I’m wrong). I checked and I  
> couldn’t actually find any instruction set that only sets the MSB  
> when comparing vectors, except by actually doing just a subtract.  
> Since people need full masks before they can do anything useful with  
> it (requiring a shift or conditional replace) I was thinking why not  
> make that part of VFCmp? Note that this change in VFCmp’s definition  
> won’t break compatibility.
>
> Kind regards,
>
> Nicolas
>
> From: llvmdev-bounces at cs.uiuc.edu [mailto:llvmdev- 
> bounces at cs.uiuc.edu] On Behalf Of Chris Lattner
> Sent: Saturday, 14 June, 2008 02:40
> To: LLVM Developers Mailing List
> Subject: Re: [LLVMdev] VFCmp failing when unordered or UnsafeFPMath  
> on x86
>
>
> On Jun 13, 2008, at 12:27 AM, Nicolas Capens wrote:
>
>
> Hi all,
>
> When trying to generate a VFCmp instruction when UnsafeFPMath is set  
> to true I get an assert “Unexpected CondCode” on my x86 system. This  
> also happens with UnsafeFPMath set to false and using an unordered  
> compare. Could someone look into this?
>
> Please provide a testcase.
>
>
>
> While I’m at it, is there any reason why only the most significant  
> bit of the return value of VFCmp is defined (according to the  
> documentation)? Both AltiVec and SSE set the components of the  
> result to either all 1’s or all 0’s. Having only the most  
> significant bit doesn’t seem useful to me at all, and (arithmetic)  
> shifting vectors to replicate the bit isn’t supported.
>
> LLVM is intended to support other vector instruction sets, including  
> SPU, Alpha, etc.  The commonality was that the MSB is set, and we  
> would like to add support for vector shifting at some point.
>
> -Chris
> <fibonacci.cpp>
> _______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20080616/d5828b7d/attachment.html>


More information about the llvm-dev mailing list