diff options
Diffstat (limited to 'llvm/lib/CodeGen/SelectionDAG')
| -rw-r--r-- | llvm/lib/CodeGen/SelectionDAG/LegalizeTypes.cpp | 11 | 
1 files changed, 11 insertions, 0 deletions
| diff --git a/llvm/lib/CodeGen/SelectionDAG/LegalizeTypes.cpp b/llvm/lib/CodeGen/SelectionDAG/LegalizeTypes.cpp index bd7dacf2bc6..ebf6b28259e 100644 --- a/llvm/lib/CodeGen/SelectionDAG/LegalizeTypes.cpp +++ b/llvm/lib/CodeGen/SelectionDAG/LegalizeTypes.cpp @@ -921,6 +921,17 @@ bool DAGTypeLegalizer::CustomLowerNode(SDNode *N, EVT VT, bool LegalizeResult) {      // The target didn't want to custom lower it after all.      return false; +  // When called from DAGTypeLegalizer::ExpandIntegerResult, we might need to +  // provide the same kind of custom splitting behavior. +  if (Results.size() == N->getNumValues() + 1 && LegalizeResult) { +    // We've legalized a return type by splitting it. If there is a chain, +    // replace that too. +    SetExpandedInteger(SDValue(N, 0), Results[0], Results[1]); +    if (N->getNumValues() > 1) +      ReplaceValueWith(SDValue(N, 1), Results[2]); +    return true; +  } +    // Make everything that once used N's values now use those in Results instead.    assert(Results.size() == N->getNumValues() &&           "Custom lowering returned the wrong number of results!"); | 

