[llvm-commits] [llvm] r66366 - in /llvm/trunk: lib/Transforms/Scalar/ScalarReplAggregates.cpp test/Transforms/ScalarRepl/2008-06-22-LargeArray.ll test/Transforms/ScalarRepl/vector_memcpy.ll

Dale Johannesen dalej at apple.com
Mon Mar 9 14:13:50 PDT 2009


On Mar 9, 2009, at 1:46 PMPDT, Chris Lattner wrote:
>>> I'm not talking about theoretical IEEE here, I'm talking about what
>>> semantics we want for LLVM IR.  I think that load/store pairs should
>>> always be value-preserving.  Do you disagree?
>>
>> No, that is not what the semantics are when you write
>>
>>   f1 = f2;
>
> I agree, but the semantics I'm proposing are a valid way to implement
> f1 = f2;.

As long as you're not dealing with code that wants to trap the  
exception (which is optional in IEEE754), I guess that's true for that  
statement.  But:

    f1 = f2;
    f3 = f2*f2;

The multiplication must use x87, and therefore may change the bits of  
f2 upon loading.   If you want the copy to f1 to be bitwise, we'd have  
to not share the loads, or split it back up later, or something.   And  
if it isn't bitwise, we have the situation that

   f1 = f2

produces different results depending on what other code is around.   
Both alternatives seem really ugly.

I know, let's require the target to support SSE!  :)




More information about the llvm-commits mailing list