Index: llvm/include/llvm/Support/TypeSize.h =================================================================== --- llvm/include/llvm/Support/TypeSize.h +++ llvm/include/llvm/Support/TypeSize.h @@ -49,6 +49,18 @@ bool operator!=(const ElementCount& RHS) const { return !(*this == RHS); } + bool operator>(const ElementCount& RHS) const { + return Min > RHS.Min && Scalable == RHS.Scalable; + } + bool operator>=(const ElementCount& RHS) const { + return Min >= RHS.Min && Scalable == RHS.Scalable; + } + bool operator<(const ElementCount& RHS) const { + return Min < RHS.Min && Scalable == RHS.Scalable; + } + bool operator<=(const ElementCount& RHS) const { + return Min <= RHS.Min && Scalable == RHS.Scalable; + } }; // This class is used to represent the size of types. If the type is of fixed Index: llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp =================================================================== --- llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp +++ llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp @@ -438,7 +438,7 @@ // vector widening case (e.g. <2 x float> -> <4 x float>). Extract the // elements we want. if (PartEVT.getVectorElementType() == ValueVT.getVectorElementType()) { - assert(PartEVT.getVectorNumElements() > ValueVT.getVectorNumElements() && + assert(PartEVT.getVectorElementCount() > ValueVT.getVectorElementCount() && "Cannot narrow, it would be a lossy transformation"); return DAG.getNode(ISD::EXTRACT_SUBVECTOR, DL, ValueVT, Val, DAG.getVectorIdxConstant(0, DL)); @@ -448,7 +448,7 @@ if (ValueVT.getSizeInBits() == PartEVT.getSizeInBits()) return DAG.getNode(ISD::BITCAST, DL, ValueVT, Val); - assert(PartEVT.getVectorNumElements() == ValueVT.getVectorNumElements() && + assert(PartEVT.getVectorElementCount() == ValueVT.getVectorElementCount() && "Cannot handle this kind of promotion"); // Promoted vector extract return DAG.getAnyExtOrTrunc(Val, DL, ValueVT); @@ -461,7 +461,7 @@ TLI.isTypeLegal(ValueVT)) return DAG.getNode(ISD::BITCAST, DL, ValueVT, Val); - if (ValueVT.getVectorNumElements() != 1) { + if (ValueVT.getVectorElementCount().Min != 1) { // Certain ABIs require that vectors are passed as integers. For vectors // are the same size, this is an obvious bitcast. if (ValueVT.getSizeInBits() == PartEVT.getSizeInBits()) { @@ -484,7 +484,7 @@ // Handle cases such as i8 -> <1 x i1> EVT ValueSVT = ValueVT.getVectorElementType(); - if (ValueVT.getVectorNumElements() == 1 && ValueSVT != PartEVT) { + if (ValueVT.getVectorElementCount().Min == 1 && ValueSVT != PartEVT) { if (ValueSVT.getSizeInBits() == PartEVT.getSizeInBits()) Val = DAG.getNode(ISD::BITCAST, DL, ValueSVT, Val); else