[PATCH][VectorLegalizer/X86] Don't unvectorize fp_to_uint for v8f32->v8i16

Adam Nemet anemet at apple.com
Fri Mar 14 22:14:25 PDT 2014

Rather than LegalizeAction::Expand, this needs LegalizeAction::Promote to get
promoted to fp_to_sint v8f32->v8i32.  This is a legal operation on AVX.

For that to work properly, we also need to teach the legalizer about the
specific promotion required here.  The default vector promotion uses
bitcasting to a vector type of the same total size.  We want to promote the
vector element type, effectively widening the operation and then truncating
the result.  This is analogous to the current logic of how int_to_fp is

The change also factors out some code from the int_to_fp promotion code to
ValueType::widenIntegerVectorElementType.  This is now shared between
int_to_fp and fp_to_int.

There is no longer need for the custom lowering of fp_to_sint f32->v8i16 in
X86.  It can now go through the new target-independent fp_to_*int promotion

I also checked that no other target uses Promote for these ops yet, so there
shouldn't be any unexpected change in behavior.



-------------- next part --------------
A non-text attachment was scrubbed...
Name: VectorLegalizer-X86-Don-t-unvectorize-fp_to_uint-for.patch
Type: application/octet-stream
Size: 7150 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20140314/6f84d978/attachment.obj>

More information about the llvm-commits mailing list