summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Target/X86/X86TargetTransformInfo.cpp
diff options
context:
space:
mode:
authorCraig Topper <craig.topper@intel.com>2017-11-16 06:02:05 +0000
committerCraig Topper <craig.topper@intel.com>2017-11-16 06:02:05 +0000
commit46a5d58b8c16b7de33dfdf4c86bf7d2b5a7a24fb (patch)
treedb914062fcd98da679fcb811436ab0125791c10e /llvm/lib/Target/X86/X86TargetTransformInfo.cpp
parent36e8d66e1ad8fb8da16733d072811b68bf26be00 (diff)
downloadbcm5719-llvm-46a5d58b8c16b7de33dfdf4c86bf7d2b5a7a24fb.tar.gz
bcm5719-llvm-46a5d58b8c16b7de33dfdf4c86bf7d2b5a7a24fb.zip
[X86] Update TTI to report that v1iX/v1fX types aren't legal for masked gather/scatter/load/store.
The type legalizer will try to scalarize these operations if it sees them, but there is no handling for scalarizing them. This leads to a fatal error. With this change they will now be scalarized by the mem intrinsic scalarizing pass before SelectionDAG. llvm-svn: 318380
Diffstat (limited to 'llvm/lib/Target/X86/X86TargetTransformInfo.cpp')
-rw-r--r--llvm/lib/Target/X86/X86TargetTransformInfo.cpp12
1 files changed, 10 insertions, 2 deletions
diff --git a/llvm/lib/Target/X86/X86TargetTransformInfo.cpp b/llvm/lib/Target/X86/X86TargetTransformInfo.cpp
index 6772d96c799..28c5d0449c8 100644
--- a/llvm/lib/Target/X86/X86TargetTransformInfo.cpp
+++ b/llvm/lib/Target/X86/X86TargetTransformInfo.cpp
@@ -2478,6 +2478,9 @@ bool X86TTIImpl::isLSRCostLess(TargetTransformInfo::LSRCost &C1,
}
bool X86TTIImpl::isLegalMaskedLoad(Type *DataTy) {
+ // The backend can't handle a single element vector.
+ if (isa<VectorType>(DataTy) && DataTy->getVectorNumElements() == 1)
+ return false;
Type *ScalarTy = DataTy->getScalarType();
int DataWidth = isa<PointerType>(ScalarTy) ?
DL.getPointerSizeInBits() : ScalarTy->getPrimitiveSizeInBits();
@@ -2501,8 +2504,13 @@ bool X86TTIImpl::isLegalMaskedGather(Type *DataTy) {
// the vector type.
// The Scalarizer asks again about legality. It sends a vector type.
// In this case we can reject non-power-of-2 vectors.
- if (isa<VectorType>(DataTy) && !isPowerOf2_32(DataTy->getVectorNumElements()))
- return false;
+ // We also reject single element vectors as the type legalizer can't
+ // scalarize it.
+ if (isa<VectorType>(DataTy)) {
+ unsigned NumElts = DataTy->getVectorNumElements();
+ if (NumElts == 1 || !isPowerOf2_32(NumElts))
+ return false;
+ }
Type *ScalarTy = DataTy->getScalarType();
int DataWidth = isa<PointerType>(ScalarTy) ?
DL.getPointerSizeInBits() : ScalarTy->getPrimitiveSizeInBits();
OpenPOWER on IntegriCloud