diff --git a/llvm/lib/Target/Hexagon/HexagonISelLowering.h b/llvm/lib/Target/Hexagon/HexagonISelLowering.h --- a/llvm/lib/Target/Hexagon/HexagonISelLowering.h +++ b/llvm/lib/Target/Hexagon/HexagonISelLowering.h @@ -169,6 +169,8 @@ bool isExtractSubvectorCheap(EVT ResVT, EVT SrcVT, unsigned Index) const override; + bool isTargetCanonicalConstantNode(SDValue Op) const override; + bool isShuffleMaskLegal(ArrayRef Mask, EVT VT) const override; LegalizeTypeAction getPreferredVectorAction(MVT VT) const override; LegalizeAction getCustomOperationAction(SDNode &Op) const override; diff --git a/llvm/lib/Target/Hexagon/HexagonISelLowering.cpp b/llvm/lib/Target/Hexagon/HexagonISelLowering.cpp --- a/llvm/lib/Target/Hexagon/HexagonISelLowering.cpp +++ b/llvm/lib/Target/Hexagon/HexagonISelLowering.cpp @@ -2162,6 +2162,11 @@ return SrcTy.getVectorNumElements() <= 8; } +bool HexagonTargetLowering::isTargetCanonicalConstantNode(SDValue Op) const { + return Op.getOpcode() == ISD::CONCAT_VECTORS || + TargetLowering::isTargetCanonicalConstantNode(Op); +} + bool HexagonTargetLowering::isShuffleMaskLegal(ArrayRef Mask, EVT VT) const { return true;