summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Target/Hexagon/HexagonISelLoweringHVX.cpp
diff options
context:
space:
mode:
authorKrzysztof Parzyszek <kparzysz@codeaurora.org>2018-01-31 16:52:15 +0000
committerKrzysztof Parzyszek <kparzysz@codeaurora.org>2018-01-31 16:52:15 +0000
commit82a83391d31245ff705812c0b92bdd7290d40990 (patch)
tree9efd9d79b12efff04adcead45747db88f556eb53 /llvm/lib/Target/Hexagon/HexagonISelLoweringHVX.cpp
parentf89f188ddb61e0abf04b144e58af4236dfb2f50e (diff)
downloadbcm5719-llvm-82a83391d31245ff705812c0b92bdd7290d40990.tar.gz
bcm5719-llvm-82a83391d31245ff705812c0b92bdd7290d40990.zip
[Hexagon] Handle BUILD_VECTOR from undef values in buildHvxVectorReg
llvm-svn: 323889
Diffstat (limited to 'llvm/lib/Target/Hexagon/HexagonISelLoweringHVX.cpp')
-rw-r--r--llvm/lib/Target/Hexagon/HexagonISelLoweringHVX.cpp5
1 files changed, 4 insertions, 1 deletions
diff --git a/llvm/lib/Target/Hexagon/HexagonISelLoweringHVX.cpp b/llvm/lib/Target/Hexagon/HexagonISelLoweringHVX.cpp
index 89fecfceeb3..17e3228766d 100644
--- a/llvm/lib/Target/Hexagon/HexagonISelLoweringHVX.cpp
+++ b/llvm/lib/Target/Hexagon/HexagonISelLoweringHVX.cpp
@@ -168,16 +168,19 @@ HexagonTargetLowering::buildHvxVectorReg(ArrayRef<SDValue> Values,
}
unsigned NumWords = Words.size();
- bool IsSplat = true;
+ bool IsSplat = true, IsUndef = true;
SDValue SplatV;
for (unsigned i = 0; i != NumWords && IsSplat; ++i) {
if (isUndef(Words[i]))
continue;
+ IsUndef = false;
if (!SplatV.getNode())
SplatV = Words[i];
else if (SplatV != Words[i])
IsSplat = false;
}
+ if (IsUndef)
+ return DAG.getUNDEF(VecTy);
if (IsSplat) {
assert(SplatV.getNode());
auto *IdxN = dyn_cast<ConstantSDNode>(SplatV.getNode());
OpenPOWER on IntegriCloud