[X86] Improve the lowering of BITCAST dag nodes from type f64 to type v2i32 (and...
authorAndrea Di Biagio <Andrea_DiBiagio@sn.scee.net>
Tue, 6 May 2014 17:09:03 +0000 (17:09 +0000)
committerAndrea Di Biagio <Andrea_DiBiagio@sn.scee.net>
Tue, 6 May 2014 17:09:03 +0000 (17:09 +0000)
commit8a712ba229f506ff2d25d75cf2e2fcd980ee0834
tree6f546e75b9366105ee6827fa0907857c0c2ec368
parent22f779d1fd0d7a7e878a3c28bc5d9910ae655df3
[X86] Improve the lowering of BITCAST dag nodes from type f64 to type v2i32 (and vice versa).

Before this patch, the backend always emitted a store+load sequence to
bitconvert from f64 to i64 the input operand of a ISD::BITCAST dag node that
performed a bitconvert from type MVT::f64 to type MVT::v2i32. The resulting
i64 node was then used to build a v2i32 vector.

With this patch, the backend now produces a cheaper SCALAR_TO_VECTOR from
MVT::f64 to MVT::v2f64. That SCALAR_TO_VECTOR is then followed by a "free"
bitcast to type MVT::v4i32. The elements of the resulting
v4i32 are then extracted to build a v2i32 vector (which is illegal and
therefore promoted to MVT::v2i64).

This is in general cheaper than emitting a stack store+load sequence
to bitconvert the operand from type f64 to type i64.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@208107 91177308-0d34-0410-b5e6-96231b3b80d8
lib/Target/X86/X86ISelLowering.cpp
test/CodeGen/X86/lower-bitcast-v2i32.ll [new file with mode: 0644]
test/CodeGen/X86/ret-mmx.ll