forked from OSchip/llvm-project
Allow targets to custom lower expanded BIT_CONVERT's
llvm-svn: 30217
This commit is contained in:
parent
69df6132d7
commit
e4bbb6c341
|
@ -4457,8 +4457,21 @@ void SelectionDAGLegalize::ExpandOp(SDOperand Op, SDOperand &Lo, SDOperand &Hi){
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ISD::BIT_CONVERT: {
|
case ISD::BIT_CONVERT: {
|
||||||
SDOperand Tmp = ExpandBIT_CONVERT(Node->getValueType(0),
|
SDOperand Tmp;
|
||||||
Node->getOperand(0));
|
if (TLI.getOperationAction(ISD::BIT_CONVERT, VT) == TargetLowering::Custom){
|
||||||
|
// If the target wants to, allow it to lower this itself.
|
||||||
|
switch (getTypeAction(Node->getOperand(0).getValueType())) {
|
||||||
|
case Expand: assert(0 && "cannot expand FP!");
|
||||||
|
case Legal: Tmp = LegalizeOp(Node->getOperand(0)); break;
|
||||||
|
case Promote: Tmp = PromoteOp (Node->getOperand(0)); break;
|
||||||
|
}
|
||||||
|
Tmp = TLI.LowerOperation(DAG.getNode(ISD::BIT_CONVERT, VT, Tmp), DAG);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Turn this into a load/store pair by default.
|
||||||
|
if (Tmp.Val == 0)
|
||||||
|
Tmp = ExpandBIT_CONVERT(Node->getValueType(0), Node->getOperand(0));
|
||||||
|
|
||||||
ExpandOp(Tmp, Lo, Hi);
|
ExpandOp(Tmp, Lo, Hi);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue