forked from OSchip/llvm-project
[X86] Remove apparently unneeded code from combineVSZext.
No lit tests fail with this code removed. This is a pre-commit for D54346. llvm-svn: 346590
This commit is contained in:
parent
d3ca710ec9
commit
7956a256e9
|
@ -40097,56 +40097,6 @@ static SDValue combineVSZext(SDNode *N, SelectionDAG &DAG,
|
|||
return getConstVector(Vals, Undefs, VT, DAG, DL);
|
||||
}
|
||||
|
||||
// (vzext (bitcast (vzext (x)) -> (vzext x)
|
||||
// TODO: (vsext (bitcast (vsext (x)) -> (vsext x)
|
||||
SDValue V = peekThroughBitcasts(Op);
|
||||
if (Opcode == X86ISD::VZEXT && V != Op && V.getOpcode() == X86ISD::VZEXT) {
|
||||
MVT InnerVT = V.getSimpleValueType();
|
||||
MVT InnerEltVT = InnerVT.getVectorElementType();
|
||||
|
||||
// If the element sizes match exactly, we can just do one larger vzext. This
|
||||
// is always an exact type match as vzext operates on integer types.
|
||||
if (OpEltVT == InnerEltVT) {
|
||||
assert(OpVT == InnerVT && "Types must match for vzext!");
|
||||
return DAG.getNode(X86ISD::VZEXT, DL, VT, V.getOperand(0));
|
||||
}
|
||||
|
||||
// The only other way we can combine them is if only a single element of the
|
||||
// inner vzext is used in the input to the outer vzext.
|
||||
if (InnerEltVT.getSizeInBits() < InputBits)
|
||||
return SDValue();
|
||||
|
||||
// In this case, the inner vzext is completely dead because we're going to
|
||||
// only look at bits inside of the low element. Just do the outer vzext on
|
||||
// a bitcast of the input to the inner.
|
||||
return DAG.getNode(X86ISD::VZEXT, DL, VT, DAG.getBitcast(OpVT, V));
|
||||
}
|
||||
|
||||
// Check if we can bypass extracting and re-inserting an element of an input
|
||||
// vector. Essentially:
|
||||
// (bitcast (sclr2vec (ext_vec_elt x))) -> (bitcast x)
|
||||
// TODO: Add X86ISD::VSEXT support
|
||||
if (Opcode == X86ISD::VZEXT &&
|
||||
V.getOpcode() == ISD::SCALAR_TO_VECTOR &&
|
||||
V.getOperand(0).getOpcode() == ISD::EXTRACT_VECTOR_ELT &&
|
||||
V.getOperand(0).getSimpleValueType().getSizeInBits() == InputBits) {
|
||||
SDValue ExtractedV = V.getOperand(0);
|
||||
SDValue OrigV = ExtractedV.getOperand(0);
|
||||
if (isNullConstant(ExtractedV.getOperand(1))) {
|
||||
MVT OrigVT = OrigV.getSimpleValueType();
|
||||
// Extract a subvector if necessary...
|
||||
if (OrigVT.getSizeInBits() > OpVT.getSizeInBits()) {
|
||||
int Ratio = OrigVT.getSizeInBits() / OpVT.getSizeInBits();
|
||||
OrigVT = MVT::getVectorVT(OrigVT.getVectorElementType(),
|
||||
OrigVT.getVectorNumElements() / Ratio);
|
||||
OrigV = DAG.getNode(ISD::EXTRACT_SUBVECTOR, DL, OrigVT, OrigV,
|
||||
DAG.getIntPtrConstant(0, DL));
|
||||
}
|
||||
Op = DAG.getBitcast(OpVT, OrigV);
|
||||
return DAG.getNode(X86ISD::VZEXT, DL, VT, Op);
|
||||
}
|
||||
}
|
||||
|
||||
return SDValue();
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue