[X86] Don't let LowerEXTRACT_SUBVECTOR call getNode for EXTRACT_SUBVECTOR.

This results in the simplifications inside of getNode running while we're legalizing nodes popped off the worklist during the final DAG combine. This basically makes a DAG combine like operation occur during this legalize step, but we don't handle something quite the same way. I think we don't recursively added the removed nodes to the DAG combiner worklist.

llvm-svn: 294929
This commit is contained in:
Craig Topper 2017-02-12 23:49:46 +00:00
parent 1bcd504a88
commit 53eafa8ea4
1 changed files with 7 additions and 5 deletions

View File

@ -14010,12 +14010,14 @@ static SDValue LowerEXTRACT_SUBVECTOR(SDValue Op, const X86Subtarget &Subtarget,
In.getSimpleValueType().is512BitVector()) &&
"Can only extract from 256-bit or 512-bit vectors");
if (ResVT.is128BitVector())
return extract128BitVector(In, IdxVal, DAG, dl);
if (ResVT.is256BitVector())
return extract256BitVector(In, IdxVal, DAG, dl);
// If the input is a buildvector just emit a smaller one.
unsigned ElemsPerChunk = ResVT.getVectorNumElements();
if (In.getOpcode() == ISD::BUILD_VECTOR)
return DAG.getNode(ISD::BUILD_VECTOR, dl, ResVT,
makeArrayRef(In->op_begin() + IdxVal, ElemsPerChunk));
llvm_unreachable("Unimplemented!");
// Everything else is legal.
return Op;
}
static bool areOnlyUsersOf(SDNode *N, ArrayRef<SDValue> ValidUsers) {