summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Target
diff options
context:
space:
mode:
authorCraig Topper <craig.topper@intel.com>2018-02-19 22:07:31 +0000
committerCraig Topper <craig.topper@intel.com>2018-02-19 22:07:31 +0000
commitb195ed8ce3ce2f31684b275640b9f7abaad8eeac (patch)
treef8c4b087897cdb0cf9340b6866f10bf2d441bc2f /llvm/lib/Target
parent1d14779aed200632328b38b04a89575b0a89c38b (diff)
downloadbcm5719-llvm-b195ed8ce3ce2f31684b275640b9f7abaad8eeac.tar.gz
bcm5719-llvm-b195ed8ce3ce2f31684b275640b9f7abaad8eeac.zip
[X86] Use vpmovq2m/vpmovd2m for truncate to vXi1 when possible.
Previously we used vptestmd, but the scheduling data for SKX says vpmovq2m/vpmovd2m is lower latency. We already used vpmovb2m/vpmovw2m for byte/word truncates. So this is more consistent anyway. llvm-svn: 325534
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 b8b3fbec732..c6916fdf1a1 100644
--- a/llvm/lib/Target/X86/X86ISelLowering.cpp
+++ b/llvm/lib/Target/X86/X86ISelLowering.cpp
@@ -16762,6 +16762,10 @@ static SDValue LowerTruncateVecI1(SDValue Op, SelectionDAG &DAG,
In = DAG.getNode(ISD::SHL, DL, InVT, In,
DAG.getConstant(ShiftInx, DL, InVT));
}
+ // If we have DQI, emit a pattern that will be iseled as vpmovq2m/vpmovd2m.
+ if (Subtarget.hasDQI())
+ return DAG.getNode(X86ISD::CMPM, DL, VT, DAG.getConstant(0, DL, InVT),
+ In, DAG.getConstant(6, DL, MVT::i8));
return DAG.getNode(X86ISD::CMPM, DL, VT, In,
getZeroVector(InVT, Subtarget, DAG, DL),
DAG.getConstant(4, DL, MVT::i8));
OpenPOWER on IntegriCloud