X86: Turn fp selects into mask operations.
authorBenjamin Kramer <benny.kra@googlemail.com>
Sun, 4 Aug 2013 12:05:16 +0000 (12:05 +0000)
committerBenjamin Kramer <benny.kra@googlemail.com>
Sun, 4 Aug 2013 12:05:16 +0000 (12:05 +0000)
commit5bc180c14f4ec3e5d604b750befd5b3ed16fbae8
tree031286d0080c93cc9f2e6acfa19b9cc88f2d4f5a
parentcd46691728dfae9f7af3022271c396d724537185
X86: Turn fp selects into mask operations.

double test(double a, double b, double c, double d) { return a<b ? c : d; }

before:
_test:
ucomisd %xmm0, %xmm1
ja LBB0_2
movaps %xmm3, %xmm2
LBB0_2:
movaps %xmm2, %xmm0

after:
_test:
cmpltsd %xmm1, %xmm0
andpd %xmm0, %xmm2
andnpd %xmm3, %xmm0
orpd %xmm2, %xmm0

Small speedup on Benchmarks/SmallPT

llvm-svn: 187706
llvm/lib/Target/X86/README-SSE.txt
llvm/lib/Target/X86/X86ISelLowering.cpp
llvm/lib/Target/X86/X86ISelLowering.h
llvm/lib/Target/X86/X86InstrFragmentsSIMD.td
llvm/lib/Target/X86/X86InstrSSE.td
llvm/test/CodeGen/X86/compare-inf.ll
llvm/test/CodeGen/X86/fp-select-cmp-and.ll [new file with mode: 0644]
llvm/test/CodeGen/X86/sse-minmax.ll