@@ -4908,7 +4908,9 @@ void SelectionDAGLegalize::ConvertNodeToLibcall(SDNode *Node) {
49084908static MVT getPromotedVectorElementType (const TargetLowering &TLI,
49094909 MVT EltVT, MVT NewEltVT) {
49104910 unsigned OldEltsPerNewElt = EltVT.getSizeInBits () / NewEltVT.getSizeInBits ();
4911- MVT MidVT = MVT::getVectorVT (NewEltVT, OldEltsPerNewElt);
4911+ MVT MidVT = OldEltsPerNewElt == 1
4912+ ? NewEltVT
4913+ : MVT::getVectorVT (NewEltVT, OldEltsPerNewElt);
49124914 assert (TLI.isTypeLegal (MidVT) && " unexpected" );
49134915 return MidVT;
49144916}
@@ -5395,7 +5397,7 @@ void SelectionDAGLegalize::PromoteNode(SDNode *Node) {
53955397
53965398 assert (NVT.isVector () && OVT.getSizeInBits () == NVT.getSizeInBits () &&
53975399 " Invalid promote type for build_vector" );
5398- assert (NewEltVT.bitsLT (EltVT) && " not handled" );
5400+ assert (NewEltVT.bitsLE (EltVT) && " not handled" );
53995401
54005402 MVT MidVT = getPromotedVectorElementType (TLI, EltVT, NewEltVT);
54015403
@@ -5406,7 +5408,9 @@ void SelectionDAGLegalize::PromoteNode(SDNode *Node) {
54065408 }
54075409
54085410 SDLoc SL (Node);
5409- SDValue Concat = DAG.getNode (ISD::CONCAT_VECTORS, SL, NVT, NewOps);
5411+ SDValue Concat =
5412+ DAG.getNode (MidVT == NewEltVT ? ISD::BUILD_VECTOR : ISD::CONCAT_VECTORS,
5413+ SL, NVT, NewOps);
54105414 SDValue CvtVec = DAG.getNode (ISD::BITCAST, SL, OVT, Concat);
54115415 Results.push_back (CvtVec);
54125416 break ;
0 commit comments