diff options
author | Ahmed Bougacha <ahmed.bougacha@gmail.com> | 2015-11-06 23:16:48 +0000 |
---|---|---|
committer | Ahmed Bougacha <ahmed.bougacha@gmail.com> | 2015-11-06 23:16:48 +0000 |
commit | b49eb3ab4b7563d97a871dcd7dae4bd383c6c42f (patch) | |
tree | 49767fd310390154e5bf0716c76c4b38f6fcf9c5 /llvm/lib | |
parent | 05a0514b12d07be4e7dd959dac9bdfb5204f213a (diff) | |
download | bcm5719-llvm-b49eb3ab4b7563d97a871dcd7dae4bd383c6c42f.tar.gz bcm5719-llvm-b49eb3ab4b7563d97a871dcd7dae4bd383c6c42f.zip |
[X86] Fold (trunc (i32 (zextload i16))) into vbroadcast.
When matching non-LSB-extracting truncating broadcasts, we now insert
the necessary SRL. If the scalar resulted from a load, the SRL will be
folded into it, creating a narrower, offset, load.
However, i16 loads aren't Desirable, so we get i16->i32 zextloads.
We already catch i16 aextloads; catch these as well.
llvm-svn: 252363
Diffstat (limited to 'llvm/lib')
-rw-r--r-- | llvm/lib/Target/X86/X86InstrSSE.td | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/llvm/lib/Target/X86/X86InstrSSE.td b/llvm/lib/Target/X86/X86InstrSSE.td index 17edb500d66..e4ff9b34345 100644 --- a/llvm/lib/Target/X86/X86InstrSSE.td +++ b/llvm/lib/Target/X86/X86InstrSSE.td @@ -8365,6 +8365,12 @@ let Predicates = [HasAVX2] in { (VPBROADCASTWrm addr:$src)>; def : Pat<(v16i16 (X86VBroadcast (i16 (trunc (i32 (load addr:$src)))))), (VPBROADCASTWYrm addr:$src)>; + def : Pat<(v8i16 (X86VBroadcast + (i16 (trunc (i32 (zextloadi16 addr:$src)))))), + (VPBROADCASTWrm addr:$src)>; + def : Pat<(v16i16 (X86VBroadcast + (i16 (trunc (i32 (zextloadi16 addr:$src)))))), + (VPBROADCASTWYrm addr:$src)>; // Provide aliases for broadcast from the same register class that // automatically does the extract. |