mirror of
https://github.com/RPCS3/llvm.git
synced 2025-02-04 01:26:41 +00:00
Legalize BRCONDTWOWAY into a BRCOND/BR pair if a target doesn't support it.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@21166 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
ef847df087
commit
411e888c1b
@ -391,6 +391,39 @@ SDOperand SelectionDAGLegalize::LegalizeOp(SDOperand Op) {
|
||||
Result = DAG.getNode(ISD::BRCOND, MVT::Other, Tmp1, Tmp2,
|
||||
Node->getOperand(2));
|
||||
break;
|
||||
case ISD::BRCONDTWOWAY:
|
||||
Tmp1 = LegalizeOp(Node->getOperand(0)); // Legalize the chain.
|
||||
switch (getTypeAction(Node->getOperand(1).getValueType())) {
|
||||
case Expand: assert(0 && "It's impossible to expand bools");
|
||||
case Legal:
|
||||
Tmp2 = LegalizeOp(Node->getOperand(1)); // Legalize the condition.
|
||||
break;
|
||||
case Promote:
|
||||
Tmp2 = PromoteOp(Node->getOperand(1)); // Promote the condition.
|
||||
break;
|
||||
}
|
||||
// If this target does not support BRCONDTWOWAY, lower it to a BRCOND/BR
|
||||
// pair.
|
||||
switch (TLI.getOperationAction(ISD::BRCONDTWOWAY, MVT::Other)) {
|
||||
case TargetLowering::Promote:
|
||||
default: assert(0 && "This action is not supported yet!");
|
||||
case TargetLowering::Legal:
|
||||
if (Tmp1 != Node->getOperand(0) || Tmp2 != Node->getOperand(1)) {
|
||||
std::vector<SDOperand> Ops;
|
||||
Ops.push_back(Tmp1);
|
||||
Ops.push_back(Tmp2);
|
||||
Ops.push_back(Node->getOperand(2));
|
||||
Ops.push_back(Node->getOperand(3));
|
||||
Result = DAG.getNode(ISD::BRCONDTWOWAY, MVT::Other, Ops);
|
||||
}
|
||||
break;
|
||||
case TargetLowering::Expand:
|
||||
Result = DAG.getNode(ISD::BRCOND, MVT::Other, Tmp1, Tmp2,
|
||||
Node->getOperand(2));
|
||||
Result = DAG.getNode(ISD::BR, MVT::Other, Result, Node->getOperand(3));
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
||||
case ISD::LOAD:
|
||||
Tmp1 = LegalizeOp(Node->getOperand(0)); // Legalize the chain.
|
||||
|
Loading…
x
Reference in New Issue
Block a user