diff options
author | Simon Pilgrim <llvm-dev@redking.me.uk> | 2019-03-28 10:25:13 +0000 |
---|---|---|
committer | Simon Pilgrim <llvm-dev@redking.me.uk> | 2019-03-28 10:25:13 +0000 |
commit | 22be913ac00bd220af46f7e1f4f5ea59027c0b11 (patch) | |
tree | 0f4473c4fd6abb06a73c4a1a0f2ddb0c4425db96 /llvm/lib | |
parent | 52495c472ff876e58809557bc0baa7ec8490751d (diff) | |
download | bcm5719-llvm-22be913ac00bd220af46f7e1f4f5ea59027c0b11.tar.gz bcm5719-llvm-22be913ac00bd220af46f7e1f4f5ea59027c0b11.zip |
[X85][AVX] Add missing vXi16 broadcast fold patterns
Now that D59484 has landed its easier to add these.
Added missing AVX512BW v32i16 equivalents while I was at it.
llvm-svn: 357155
Diffstat (limited to 'llvm/lib')
-rw-r--r-- | llvm/lib/Target/X86/X86InstrAVX512.td | 18 | ||||
-rw-r--r-- | llvm/lib/Target/X86/X86InstrSSE.td | 6 |
2 files changed, 24 insertions, 0 deletions
diff --git a/llvm/lib/Target/X86/X86InstrAVX512.td b/llvm/lib/Target/X86/X86InstrAVX512.td index 7148710748b..f7b92167966 100644 --- a/llvm/lib/Target/X86/X86InstrAVX512.td +++ b/llvm/lib/Target/X86/X86InstrAVX512.td @@ -1394,12 +1394,30 @@ let Predicates = [HasVLX, HasBWI] in { def : Pat<(v16i16 (X86VBroadcast (i16 (trunc (i32 (load addr:$src)))))), (VPBROADCASTWZ256m addr:$src)>; def : Pat<(v8i16 (X86VBroadcast + (i16 (trunc (i32 (extloadi16 addr:$src)))))), + (VPBROADCASTWZ128m addr:$src)>; + def : Pat<(v8i16 (X86VBroadcast (i16 (trunc (i32 (zextloadi16 addr:$src)))))), (VPBROADCASTWZ128m addr:$src)>; def : Pat<(v16i16 (X86VBroadcast + (i16 (trunc (i32 (extloadi16 addr:$src)))))), + (VPBROADCASTWZ256m addr:$src)>; + def : Pat<(v16i16 (X86VBroadcast (i16 (trunc (i32 (zextloadi16 addr:$src)))))), (VPBROADCASTWZ256m addr:$src)>; } +let Predicates = [HasBWI] in { + // loadi16 is tricky to fold, because !isTypeDesirableForOp, justifiably. + // This means we'll encounter truncated i32 loads; match that here. + def : Pat<(v32i16 (X86VBroadcast (i16 (trunc (i32 (load addr:$src)))))), + (VPBROADCASTWZm addr:$src)>; + def : Pat<(v32i16 (X86VBroadcast + (i16 (trunc (i32 (extloadi16 addr:$src)))))), + (VPBROADCASTWZm addr:$src)>; + def : Pat<(v32i16 (X86VBroadcast + (i16 (trunc (i32 (zextloadi16 addr:$src)))))), + (VPBROADCASTWZm addr:$src)>; +} //===----------------------------------------------------------------------===// // AVX-512 BROADCAST SUBVECTORS diff --git a/llvm/lib/Target/X86/X86InstrSSE.td b/llvm/lib/Target/X86/X86InstrSSE.td index f0c781cb2a8..c3f471edb5a 100644 --- a/llvm/lib/Target/X86/X86InstrSSE.td +++ b/llvm/lib/Target/X86/X86InstrSSE.td @@ -7955,9 +7955,15 @@ let Predicates = [HasAVX2, NoVLX_Or_NoBWI] in { def : Pat<(v16i16 (X86VBroadcast (i16 (trunc (i32 (load addr:$src)))))), (VPBROADCASTWYrm addr:$src)>; def : Pat<(v8i16 (X86VBroadcast + (i16 (trunc (i32 (extloadi16 addr:$src)))))), + (VPBROADCASTWrm addr:$src)>; + def : Pat<(v8i16 (X86VBroadcast (i16 (trunc (i32 (zextloadi16 addr:$src)))))), (VPBROADCASTWrm addr:$src)>; def : Pat<(v16i16 (X86VBroadcast + (i16 (trunc (i32 (extloadi16 addr:$src)))))), + (VPBROADCASTWYrm addr:$src)>; + def : Pat<(v16i16 (X86VBroadcast (i16 (trunc (i32 (zextloadi16 addr:$src)))))), (VPBROADCASTWYrm addr:$src)>; } |