From: Krzysztof Parzyszek Date: Mon, 18 Dec 2017 18:21:01 +0000 (+0000) Subject: [Hexagon] Prefer to widen HVX vectors instead of promoting X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=5966988685b584d14b48df2a960d689d81af11cd;p=llvm [Hexagon] Prefer to widen HVX vectors instead of promoting git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321002 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Target/Hexagon/HexagonISelLowering.cpp b/lib/Target/Hexagon/HexagonISelLowering.cpp index 6ae52701f7f..6387ac2ef67 100644 --- a/lib/Target/Hexagon/HexagonISelLowering.cpp +++ b/lib/Target/Hexagon/HexagonISelLowering.cpp @@ -2323,6 +2323,18 @@ bool HexagonTargetLowering::isShuffleMaskLegal(ArrayRef Mask, return true; } +TargetLoweringBase::LegalizeTypeAction +HexagonTargetLowering::getPreferredVectorAction(EVT VT) const { + if (Subtarget.useHVXOps()) { + // If the size of VT is at least half of the vector length, + // widen the vector. Note: the threshold was not selected in + // any scientific way. + if (VT.getSizeInBits() >= Subtarget.getVectorLength()*8/2) + return TargetLoweringBase::TypeWidenVector; + } + return TargetLowering::getPreferredVectorAction(VT); +} + // Lower a vector shuffle (V1, V2, V3). V1 and V2 are the two vectors // to select data from, V3 is the permutation. SDValue diff --git a/lib/Target/Hexagon/HexagonISelLowering.h b/lib/Target/Hexagon/HexagonISelLowering.h index 07f8b0c9c14..2705fcbf8d6 100644 --- a/lib/Target/Hexagon/HexagonISelLowering.h +++ b/lib/Target/Hexagon/HexagonISelLowering.h @@ -122,6 +122,8 @@ namespace HexagonISD { unsigned DefinedValues) const override; bool isShuffleMaskLegal(ArrayRef Mask, EVT VT) const override; + TargetLoweringBase::LegalizeTypeAction getPreferredVectorAction(EVT VT) + const override; SDValue LowerOperation(SDValue Op, SelectionDAG &DAG) const override; const char *getTargetNodeName(unsigned Opcode) const override;