forked from OSchip/llvm-project
[X86][SSE] Removed duplicate variables. NFCI.
Removed duplicate getOperand / getSimpleValueType calls. llvm-svn: 269614
This commit is contained in:
parent
79d05c9b3d
commit
fbe97bc15a
|
@ -12207,11 +12207,11 @@ X86TargetLowering::LowerEXTRACT_VECTOR_ELT(SDValue Op,
|
|||
return SDValue();
|
||||
}
|
||||
|
||||
unsigned IdxVal = cast<ConstantSDNode>(Idx)->getZExtValue();
|
||||
|
||||
// If this is a 256-bit vector result, first extract the 128-bit vector and
|
||||
// then extract the element from the 128-bit vector.
|
||||
if (VecVT.is256BitVector() || VecVT.is512BitVector()) {
|
||||
|
||||
unsigned IdxVal = cast<ConstantSDNode>(Idx)->getZExtValue();
|
||||
// Get the 128-bit vector.
|
||||
Vec = extract128BitVector(Vec, IdxVal, DAG, dl);
|
||||
MVT EltVT = VecVT.getVectorElementType();
|
||||
|
@ -12235,31 +12235,25 @@ X86TargetLowering::LowerEXTRACT_VECTOR_ELT(SDValue Op,
|
|||
MVT VT = Op.getSimpleValueType();
|
||||
// TODO: handle v16i8.
|
||||
if (VT.getSizeInBits() == 16) {
|
||||
SDValue Vec = Op.getOperand(0);
|
||||
if (isNullConstant(Op.getOperand(1)))
|
||||
if (isNullConstant(Idx))
|
||||
return DAG.getNode(ISD::TRUNCATE, dl, MVT::i16,
|
||||
DAG.getNode(ISD::EXTRACT_VECTOR_ELT, dl, MVT::i32,
|
||||
DAG.getBitcast(MVT::v4i32, Vec),
|
||||
Op.getOperand(1)));
|
||||
DAG.getBitcast(MVT::v4i32, Vec), Idx));
|
||||
// Transform it so it match pextrw which produces a 32-bit result.
|
||||
MVT EltVT = MVT::i32;
|
||||
SDValue Extract = DAG.getNode(X86ISD::PEXTRW, dl, EltVT,
|
||||
Op.getOperand(0), Op.getOperand(1));
|
||||
SDValue Extract = DAG.getNode(X86ISD::PEXTRW, dl, EltVT, Vec, Idx);
|
||||
SDValue Assert = DAG.getNode(ISD::AssertZext, dl, EltVT, Extract,
|
||||
DAG.getValueType(VT));
|
||||
return DAG.getNode(ISD::TRUNCATE, dl, VT, Assert);
|
||||
}
|
||||
|
||||
if (VT.getSizeInBits() == 32) {
|
||||
unsigned Idx = cast<ConstantSDNode>(Op.getOperand(1))->getZExtValue();
|
||||
if (Idx == 0)
|
||||
if (IdxVal == 0)
|
||||
return Op;
|
||||
|
||||
// SHUFPS the element to the lowest double word, then movss.
|
||||
int Mask[4] = { static_cast<int>(Idx), -1, -1, -1 };
|
||||
MVT VVT = Op.getOperand(0).getSimpleValueType();
|
||||
SDValue Vec = DAG.getVectorShuffle(VVT, dl, Op.getOperand(0),
|
||||
DAG.getUNDEF(VVT), Mask);
|
||||
int Mask[4] = { static_cast<int>(IdxVal), -1, -1, -1 };
|
||||
Vec = DAG.getVectorShuffle(VecVT, dl, Vec, DAG.getUNDEF(VecVT), Mask);
|
||||
return DAG.getNode(ISD::EXTRACT_VECTOR_ELT, dl, VT, Vec,
|
||||
DAG.getIntPtrConstant(0, dl));
|
||||
}
|
||||
|
@ -12268,16 +12262,14 @@ X86TargetLowering::LowerEXTRACT_VECTOR_ELT(SDValue Op,
|
|||
// FIXME: .td only matches this for <2 x f64>, not <2 x i64> on 32b
|
||||
// FIXME: seems like this should be unnecessary if mov{h,l}pd were taught
|
||||
// to match extract_elt for f64.
|
||||
if (isNullConstant(Op.getOperand(1)))
|
||||
if (isNullConstant(Idx))
|
||||
return Op;
|
||||
|
||||
// UNPCKHPD the element to the lowest double word, then movsd.
|
||||
// Note if the lower 64 bits of the result of the UNPCKHPD is then stored
|
||||
// to a f64mem, the whole operation is folded into a single MOVHPDmr.
|
||||
int Mask[2] = { 1, -1 };
|
||||
MVT VVT = Op.getOperand(0).getSimpleValueType();
|
||||
SDValue Vec = DAG.getVectorShuffle(VVT, dl, Op.getOperand(0),
|
||||
DAG.getUNDEF(VVT), Mask);
|
||||
Vec = DAG.getVectorShuffle(VecVT, dl, Vec, DAG.getUNDEF(VecVT), Mask);
|
||||
return DAG.getNode(ISD::EXTRACT_VECTOR_ELT, dl, VT, Vec,
|
||||
DAG.getIntPtrConstant(0, dl));
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue