diff options
| author | Craig Topper <craig.topper@gmail.com> | 2016-12-27 01:56:24 +0000 |
|---|---|---|
| committer | Craig Topper <craig.topper@gmail.com> | 2016-12-27 01:56:24 +0000 |
| commit | 83f2145c18bb0669f06abea68f795372a67c934d (patch) | |
| tree | 57a938a4da2f58e37831ddcac02fe24deec2c13c /llvm/lib | |
| parent | 5035b1212bc8e8745031fd55720801515387efff (diff) | |
| download | bcm5719-llvm-83f2145c18bb0669f06abea68f795372a67c934d.tar.gz bcm5719-llvm-83f2145c18bb0669f06abea68f795372a67c934d.zip | |
[AVX-512] Add isel patterns to turn native masked scalar add/sub/mul/div into masked instructions.
llvm-svn: 290564
Diffstat (limited to 'llvm/lib')
| -rw-r--r-- | llvm/lib/Target/X86/X86InstrAVX512.td | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/llvm/lib/Target/X86/X86InstrAVX512.td b/llvm/lib/Target/X86/X86InstrAVX512.td index bd6ae0cb731..da7437ea0cc 100644 --- a/llvm/lib/Target/X86/X86InstrAVX512.td +++ b/llvm/lib/Target/X86/X86InstrAVX512.td @@ -9117,6 +9117,17 @@ multiclass AVX512_scalar_math_f32_patterns<SDNode Op, string OpcPrefix> { def : Pat<(v4f32 (X86Blendi (v4f32 VR128X:$dst), (Op (v4f32 VR128X:$dst), (v4f32 VR128X:$src)), (i8 1))), (!cast<I>("V"#OpcPrefix#SSZrr_Int) v4f32:$dst, v4f32:$src)>; + + // extracted masked scalar math op with insert via movss + def : Pat<(X86Movss (v4f32 VR128X:$src1), + (scalar_to_vector + (X86selects VK1WM:$mask, + (Op (f32 (extractelt (v4f32 VR128X:$src1), (iPTR 0))), + FR32X:$src2), + FR32X:$src0))), + (!cast<I>("V"#OpcPrefix#SSZrr_Intk) (COPY_TO_REGCLASS FR32X:$src0, VR128X), + VK1WM:$mask, v4f32:$src1, + (COPY_TO_REGCLASS FR32X:$src2, VR128X))>; } } @@ -9150,6 +9161,17 @@ multiclass AVX512_scalar_math_f64_patterns<SDNode Op, string OpcPrefix> { def : Pat<(v2f64 (X86Blendi (v2f64 VR128X:$dst), (Op (v2f64 VR128X:$dst), (v2f64 VR128X:$src)), (i8 1))), (!cast<I>("V"#OpcPrefix#SDZrr_Int) v2f64:$dst, v2f64:$src)>; + + // extracted masked scalar math op with insert via movss + def : Pat<(X86Movsd (v2f64 VR128X:$src1), + (scalar_to_vector + (X86selects VK1WM:$mask, + (Op (f64 (extractelt (v2f64 VR128X:$src1), (iPTR 0))), + FR64X:$src2), + FR64X:$src0))), + (!cast<I>("V"#OpcPrefix#SDZrr_Intk) (COPY_TO_REGCLASS FR64X:$src0, VR128X), + VK1WM:$mask, v2f64:$src1, + (COPY_TO_REGCLASS FR64X:$src2, VR128X))>; } } |

