summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Target
diff options
context:
space:
mode:
authorSimon Pilgrim <llvm-dev@redking.me.uk>2016-12-01 16:00:14 +0000
committerSimon Pilgrim <llvm-dev@redking.me.uk>2016-12-01 16:00:14 +0000
commit5fe6236035db58365a1ac8d6782cead7f7bca123 (patch)
treea2e9197dd5261cfd004de6cd42005f80f497cdf9 /llvm/lib/Target
parenta37e110def03a8829081a775e33f6b91a1fdd161 (diff)
downloadbcm5719-llvm-5fe6236035db58365a1ac8d6782cead7f7bca123.tar.gz
bcm5719-llvm-5fe6236035db58365a1ac8d6782cead7f7bca123.zip
[X86][SSE] Classify AND bitmasks as variable shuffle masks
They are loading the bitmasks from the constant pool so the cost is similar to loading a shuffle mask. llvm-svn: 288367
Diffstat (limited to 'llvm/lib/Target')
-rw-r--r--llvm/lib/Target/X86/X86ISelLowering.cpp4
1 files changed, 4 insertions, 0 deletions
diff --git a/llvm/lib/Target/X86/X86ISelLowering.cpp b/llvm/lib/Target/X86/X86ISelLowering.cpp
index 85766c9f0cc..926d3456764 100644
--- a/llvm/lib/Target/X86/X86ISelLowering.cpp
+++ b/llvm/lib/Target/X86/X86ISelLowering.cpp
@@ -4061,6 +4061,7 @@ static bool isTargetShuffle(unsigned Opcode) {
static bool isTargetShuffleVariableMask(unsigned Opcode) {
switch (Opcode) {
default: return false;
+ // Target Shuffles.
case X86ISD::PSHUFB:
case X86ISD::VPERMILPV:
case X86ISD::VPERMIL2:
@@ -4069,6 +4070,9 @@ static bool isTargetShuffleVariableMask(unsigned Opcode) {
case X86ISD::VPERMV3:
case X86ISD::VPERMIV3:
return true;
+ // 'Faux' Target Shuffles.
+ case ISD::AND:
+ return true;
}
}
OpenPOWER on IntegriCloud