This patch teaches X86FastISel how to select scalar float/double convert operations using AVX instructions.
Before this patch, X86FastISel always selected legacy SSE instructions for FPExt (from float to double) and FPTrunc (from double to float).
For example:
\code
define double @foo(float %f) { %conv = fpext float %f to double ret double %conv }
\end code
Before (with -mattr=+avx -fast-isel), X86FastIsel selected a CVTSS2SDrr which is
legacy SSE:
cvtss2sd %xmm0, %xmm0
With this patch (with -mattr=+avx -fast-isel), X86FastIsel selects a VCVTSS2SDrr instead:
vcvtss2sd %xmm0, %xmm0, %xmm0
Added test fast-isel-fptrunc-fpext.ll to check both the register-register and the register-memory float/double conversion variants.
Please let me know if ok to submit.
Thanks!
Andrea