diff options
author | Sanjay Patel <spatel@rotateright.com> | 2015-01-26 18:42:16 +0000 |
---|---|---|
committer | Sanjay Patel <spatel@rotateright.com> | 2015-01-26 18:42:16 +0000 |
commit | 805bc02c2b9500e6ae62dac5a075eb732ac83597 (patch) | |
tree | 8e6ab40f7251986c0e087954a221e689cc21cbca /llvm/lib/Target/ARM/ARMLoadStoreOptimizer.cpp | |
parent | 32351455f6fdd9293850f32c5e92ca29d6bf40a0 (diff) | |
download | bcm5719-llvm-805bc02c2b9500e6ae62dac5a075eb732ac83597.tar.gz bcm5719-llvm-805bc02c2b9500e6ae62dac5a075eb732ac83597.zip |
Model sqrtsd as a binary operation with one source operand tied to the destination (PR14221)
This patch fixes the following miscompile:
define void @sqrtsd(<2 x double> %a) nounwind uwtable ssp {
%0 = tail call <2 x double> @llvm.x86.sse2.sqrt.sd(<2 x double> %a) nounwind
%a0 = extractelement <2 x double> %0, i32 0
%conv = fptrunc double %a0 to float
%a1 = extractelement <2 x double> %0, i32 1
%conv3 = fptrunc double %a1 to float
tail call void @callee2(float %conv, float %conv3) nounwind
ret void
}
Current codegen:
sqrtsd %xmm0, %xmm1 ## high element of %xmm1 is undef here
xorps %xmm0, %xmm0
cvtsd2ss %xmm1, %xmm0
shufpd $1, %xmm1, %xmm1
cvtsd2ss %xmm1, %xmm1 ## operating on undef value
jmp _callee
This is a continuation of http://llvm.org/viewvc/llvm-project?view=revision&revision=224624 ( http://reviews.llvm.org/D6330 )
which was itself a continuation of r167064 ( http://llvm.org/viewvc/llvm-project?view=revision&revision=167064 ).
All of these patches are partial fixes for PR14221 ( http://llvm.org/bugs/show_bug.cgi?id=14221 );
this should be the final patch needed to resolve that bug.
Differential Revision: http://reviews.llvm.org/D6885
llvm-svn: 227111
Diffstat (limited to 'llvm/lib/Target/ARM/ARMLoadStoreOptimizer.cpp')
0 files changed, 0 insertions, 0 deletions