[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 13:37:52 PDT 2009
On Mar 9, 2009, at 1:36 PMPDT, Chris Lattner wrote:
>
> 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?
No, that is not what the semantics are when you write
f1 = f2;
How else would you represent this?
More information about the llvm-commits
mailing list