summaryrefslogtreecommitdiffstats
path: root/llvm/lib
diff options
context:
space:
mode:
authorAhmed Bougacha <ahmed.bougacha@gmail.com>2015-11-06 23:16:48 +0000
committerAhmed Bougacha <ahmed.bougacha@gmail.com>2015-11-06 23:16:48 +0000
commitb49eb3ab4b7563d97a871dcd7dae4bd383c6c42f (patch)
tree49767fd310390154e5bf0716c76c4b38f6fcf9c5 /llvm/lib
parent05a0514b12d07be4e7dd959dac9bdfb5204f213a (diff)
downloadbcm5719-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.td6
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.
OpenPOWER on IntegriCloud