diff options
| -rw-r--r-- | llvm/lib/CodeGen/SelectionDAG/LegalizeVectorOps.cpp | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/llvm/lib/CodeGen/SelectionDAG/LegalizeVectorOps.cpp b/llvm/lib/CodeGen/SelectionDAG/LegalizeVectorOps.cpp index 17f05c3ba97..b4664f49201 100644 --- a/llvm/lib/CodeGen/SelectionDAG/LegalizeVectorOps.cpp +++ b/llvm/lib/CodeGen/SelectionDAG/LegalizeVectorOps.cpp @@ -244,7 +244,11 @@ SDValue VectorLegalizer::LegalizeOp(SDValue Op) { if (SDValue Lowered = TLI.LowerOperation(Result, DAG)) { assert(Lowered->getNumValues() == Op->getNumValues() && "Unexpected number of results"); - Changed = Lowered != Result; + if (Lowered != Result) { + // Make sure the new code is also legal. + Lowered = LegalizeOp(Lowered); + Changed = true; + } return TranslateLegalizeResults(Op, Lowered); } LLVM_FALLTHROUGH; @@ -266,7 +270,11 @@ SDValue VectorLegalizer::LegalizeOp(SDValue Op) { return TranslateLegalizeResults(Op, Result); case TargetLowering::Custom: { SDValue Lowered = TLI.LowerOperation(Result, DAG); - Changed = Lowered != Result; + if (Lowered != Result) { + // Make sure the new code is also legal. + Lowered = LegalizeOp(Lowered); + Changed = true; + } return TranslateLegalizeResults(Op, Lowered); } case TargetLowering::Expand: |

