diff options
| author | Craig Topper <craig.topper@intel.com> | 2020-01-07 16:13:11 -0800 |
|---|---|---|
| committer | Craig Topper <craig.topper@intel.com> | 2020-01-08 10:06:01 -0800 |
| commit | d60b3b4817cb9346b682bb75371c41642c273b13 (patch) | |
| tree | 06a9b58c48409a73aa9b72494ee910927fe2d106 /llvm/lib/Target | |
| parent | 29ccb12e2c12b6a50a1451ffdbf70fef29efda0e (diff) | |
| download | bcm5719-llvm-d60b3b4817cb9346b682bb75371c41642c273b13.tar.gz bcm5719-llvm-d60b3b4817cb9346b682bb75371c41642c273b13.zip | |
[X86] Add isel patterns for bitcasting between v32i1/v64i1 and float/double.
We have to do an intermediate jump to a GPR to make the cast.
Fixes PR43750.
Diffstat (limited to 'llvm/lib/Target')
| -rw-r--r-- | llvm/lib/Target/X86/X86InstrAVX512.td | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/llvm/lib/Target/X86/X86InstrAVX512.td b/llvm/lib/Target/X86/X86InstrAVX512.td index 0b263acbc95..ebb22ec270e 100644 --- a/llvm/lib/Target/X86/X86InstrAVX512.td +++ b/llvm/lib/Target/X86/X86InstrAVX512.td @@ -3932,6 +3932,17 @@ def : InstAlias<"vmovd\t{$src, $dst|$dst, $src}", def : InstAlias<"vmovd\t{$src, $dst|$dst, $src}", (VMOVPQIto64Zrr GR64:$dst, VR128X:$src), 0>; +// Conversions between masks and scalar fp. +def : Pat<(v32i1 (bitconvert FR32X:$src)), + (KMOVDkr (VMOVSS2DIZrr FR32X:$src))>; +def : Pat<(f32 (bitconvert VK32:$src)), + (VMOVDI2SSZrr (KMOVDrk VK32:$src))>; + +def : Pat<(v64i1 (bitconvert FR64X:$src)), + (KMOVQkr (VMOVSDto64Zrr FR64X:$src))>; +def : Pat<(f64 (bitconvert VK64:$src)), + (VMOV64toSDZrr (KMOVQrk VK64:$src))>; + //===----------------------------------------------------------------------===// // AVX-512 MOVSS, MOVSD //===----------------------------------------------------------------------===// |

