diff --git a/llvm/lib/CodeGen/SelectionDAG/LegalizeVectorOps.cpp b/llvm/lib/CodeGen/SelectionDAG/LegalizeVectorOps.cpp --- a/llvm/lib/CodeGen/SelectionDAG/LegalizeVectorOps.cpp +++ b/llvm/lib/CodeGen/SelectionDAG/LegalizeVectorOps.cpp @@ -130,7 +130,7 @@ /// supported by the target. SDValue ExpandVSELECT(SDValue Op); SDValue ExpandSELECT(SDValue Op); - SDValue ExpandLoad(SDValue Op); + std::pair ExpandLoad(SDValue Op); SDValue ExpandStore(SDValue Op); SDValue ExpandFNEG(SDValue Op); SDValue ExpandFSUB(SDValue Op); @@ -265,9 +265,13 @@ return TranslateLegalizeResults(Op, Lowered); } LLVM_FALLTHROUGH; - case TargetLowering::Expand: + case TargetLowering::Expand: { Changed = true; - return ExpandLoad(Op); + std::pair Tmp = ExpandLoad(Result); + AddLegalizedOperand(Op.getValue(0), Tmp.first); + AddLegalizedOperand(Op.getValue(1), Tmp.second); + return Op.getResNo() ? Tmp.first : Tmp.second; + } } } } else if (Op.getOpcode() == ISD::STORE) { @@ -290,9 +294,12 @@ } return TranslateLegalizeResults(Op, Lowered); } - case TargetLowering::Expand: + case TargetLowering::Expand: { Changed = true; - return ExpandStore(Op); + SDValue Chain = ExpandStore(Result); + AddLegalizedOperand(Op, Chain); + return Chain; + } } } } @@ -633,7 +640,7 @@ return Promoted; } -SDValue VectorLegalizer::ExpandLoad(SDValue Op) { +std::pair VectorLegalizer::ExpandLoad(SDValue Op) { LoadSDNode *LD = cast(Op.getNode()); EVT SrcVT = LD->getMemoryVT(); @@ -760,16 +767,12 @@ std::tie(Value, NewChain) = TLI.scalarizeVectorLoad(LD, DAG); } - AddLegalizedOperand(Op.getValue(0), Value); - AddLegalizedOperand(Op.getValue(1), NewChain); - - return (Op.getResNo() ? NewChain : Value); + return std::make_pair(Value, NewChain); } SDValue VectorLegalizer::ExpandStore(SDValue Op) { StoreSDNode *ST = cast(Op.getNode()); SDValue TF = TLI.scalarizeVectorStore(ST, DAG); - AddLegalizedOperand(Op, TF); return TF; }