summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKrzysztof Parzyszek <kparzysz@codeaurora.org>2018-09-12 20:58:48 +0000
committerKrzysztof Parzyszek <kparzysz@codeaurora.org>2018-09-12 20:58:48 +0000
commitcd95e03cf0617718b31d653813a7a655f5cfad63 (patch)
tree732bfd89ada837fecc936c3f252c6f24c73881f6
parente45c1eed0c8fcc0070364802634dde5235e6c8f7 (diff)
downloadbcm5719-llvm-cd95e03cf0617718b31d653813a7a655f5cfad63.tar.gz
bcm5719-llvm-cd95e03cf0617718b31d653813a7a655f5cfad63.zip
[Hexagon] Use legalized type for extracted elements in scalarizeShuffle
Scalarization of a shuffle will break up the source vectors into individual elements, and use them to assemble the resulting vector. An element type of a legal vector type may not necessarily be a legal scalar type, so make sure that the extracted values are extended to a legal scalar type. llvm-svn: 342079
-rw-r--r--llvm/lib/Target/Hexagon/HexagonISelDAGToDAGHVX.cpp6
1 files changed, 4 insertions, 2 deletions
diff --git a/llvm/lib/Target/Hexagon/HexagonISelDAGToDAGHVX.cpp b/llvm/lib/Target/Hexagon/HexagonISelDAGToDAGHVX.cpp
index 988ed92a047..0b4bd23041a 100644
--- a/llvm/lib/Target/Hexagon/HexagonISelDAGToDAGHVX.cpp
+++ b/llvm/lib/Target/Hexagon/HexagonISelDAGToDAGHVX.cpp
@@ -1338,9 +1338,11 @@ bool HvxSelector::scalarizeShuffle(ArrayRef<int> Mask, const SDLoc &dl,
MVT SingleTy = getSingleVT(MVT::i8);
SmallVector<SDValue,128> Ops;
+ LLVMContext &Ctx = *DAG.getContext();
+ MVT LegalTy = Lower.getTypeToTransformTo(Ctx, ElemTy).getSimpleVT();
for (int I : Mask) {
if (I < 0) {
- Ops.push_back(ISel.selectUndef(dl, ElemTy));
+ Ops.push_back(ISel.selectUndef(dl, LegalTy));
continue;
}
SDValue Vec;
@@ -1360,7 +1362,7 @@ bool HvxSelector::scalarizeShuffle(ArrayRef<int> Mask, const SDLoc &dl,
}
}
SDValue Idx = DAG.getConstant(M, dl, MVT::i32);
- SDValue Ex = DAG.getNode(ISD::EXTRACT_VECTOR_ELT, dl, ElemTy, {Vec, Idx});
+ SDValue Ex = DAG.getNode(ISD::EXTRACT_VECTOR_ELT, dl, LegalTy, {Vec, Idx});
SDValue L = Lower.LowerOperation(Ex, DAG);
assert(L.getNode());
Ops.push_back(L);
OpenPOWER on IntegriCloud