HomePhabricator

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

Unpublished Commit ยท Learn More

No further details are available.

Description

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

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
promoted.

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
logic.

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

Fixes rdar://problem/16202247

Details

Committed
anemetMar 17 2014, 10:06 AM
Parents
rL204057: Update copy-and-pasted log message
Branches
Unknown
Tags
Unknown

Event Timeline