Skip to content

Commit

Permalink
[LegalizeVectorOps] Pass the post-UpdateNodeOperands version of Op to…
Browse files Browse the repository at this point in the history
… ExpandLoad/ExpandStore

UpdateNodeOperands might CSE to another existing node. So we should make sure we're legalizing that node otherwise we might fail to hook up the operands properly. I've moved the result registration up to the caller to avoid having to pass both Result and Op into the functions where it might be confusing which is which.

This address 2 other issues pointed out in D71861.

Differential Revision: https://reviews.llvm.org/D72021
  • Loading branch information
topperc committed Jan 3, 2020
1 parent 32ccafd commit 7cdc60c
Showing 1 changed file with 14 additions and 11 deletions.
25 changes: 14 additions & 11 deletions llvm/lib/CodeGen/SelectionDAG/LegalizeVectorOps.cpp
Expand Up @@ -130,7 +130,7 @@ class VectorLegalizer {
/// supported by the target.
SDValue ExpandVSELECT(SDValue Op);
SDValue ExpandSELECT(SDValue Op);
SDValue ExpandLoad(SDValue Op);
std::pair<SDValue, SDValue> ExpandLoad(SDValue Op);
SDValue ExpandStore(SDValue Op);
SDValue ExpandFNEG(SDValue Op);
SDValue ExpandFSUB(SDValue Op);
Expand Down Expand Up @@ -265,9 +265,13 @@ SDValue VectorLegalizer::LegalizeOp(SDValue Op) {
return TranslateLegalizeResults(Op, Lowered);
}
LLVM_FALLTHROUGH;
case TargetLowering::Expand:
case TargetLowering::Expand: {
Changed = true;
return ExpandLoad(Op);
std::pair<SDValue, SDValue> 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) {
Expand All @@ -290,9 +294,12 @@ SDValue VectorLegalizer::LegalizeOp(SDValue Op) {
}
return TranslateLegalizeResults(Op, Lowered);
}
case TargetLowering::Expand:
case TargetLowering::Expand: {
Changed = true;
return ExpandStore(Op);
SDValue Chain = ExpandStore(Result);
AddLegalizedOperand(Op, Chain);
return Chain;
}
}
}
}
Expand Down Expand Up @@ -633,7 +640,7 @@ SDValue VectorLegalizer::PromoteFP_TO_INT(SDValue Op) {
return Promoted;
}

SDValue VectorLegalizer::ExpandLoad(SDValue Op) {
std::pair<SDValue, SDValue> VectorLegalizer::ExpandLoad(SDValue Op) {
LoadSDNode *LD = cast<LoadSDNode>(Op.getNode());

EVT SrcVT = LD->getMemoryVT();
Expand Down Expand Up @@ -760,16 +767,12 @@ SDValue VectorLegalizer::ExpandLoad(SDValue Op) {
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<StoreSDNode>(Op.getNode());
SDValue TF = TLI.scalarizeVectorStore(ST, DAG);
AddLegalizedOperand(Op, TF);
return TF;
}

Expand Down

0 comments on commit 7cdc60c

Please sign in to comment.