[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

Chris Lattner clattner at apple.com
Mon Mar 9 13:36:33 PDT 2009


On Mar 9, 2009, at 1:31 PM, Dale Johannesen wrote:

>> Ok, this is pretty insane, and I'm sure that there are cases where
>> SROA would get this "wrong" before too.  I think that the only
>> reasonable course of action is to make the IR well defined w.r.t.  
>> load
>> and store and treat this as an x86 backend bug.  Note that this has
>> already been recognized to be a real performance issue (PR3560) as
>> well.
>
> By the time the x86 backend sees this it looks exactly like a floating
> point load and store in the source.   It should be possible for the
> x86 backend to detect that (load whose only use is in a store) and
> turn it back into int loads and stores, but it seems like a bad
> approach.  The x87 behavior is IEEE754 conformant AFAICT so the same
> problem exists on other targets, at least theoretically, and you would
> lose in the rare case where somebody wrote a float load and store and
> actually wanted the exception to go off.

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?

-Chris



More information about the llvm-commits mailing list