mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2025-01-09 17:43:57 +00:00
Reverse the 'if' condition and reduce the indentation.
llvm-svn: 171172
This commit is contained in:
parent
ab2e6842cc
commit
68441914a5
@ -9549,45 +9549,44 @@ SDValue X86TargetLowering::LowerSIGN_EXTEND(SDValue Op,
|
||||
EVT InVT = In.getValueType();
|
||||
DebugLoc dl = Op->getDebugLoc();
|
||||
|
||||
if ((VT == MVT::v4i64 && InVT == MVT::v4i32) ||
|
||||
(VT == MVT::v8i32 && InVT == MVT::v8i16)) {
|
||||
if ((VT != MVT::v4i64 || InVT != MVT::v4i32) &&
|
||||
(VT != MVT::v8i32 || InVT != MVT::v8i16))
|
||||
return SDValue();
|
||||
|
||||
if (Subtarget->hasInt256())
|
||||
return DAG.getNode(X86ISD::VSEXT_MOVL, dl, VT, In);
|
||||
if (Subtarget->hasInt256())
|
||||
return DAG.getNode(X86ISD::VSEXT_MOVL, dl, VT, In);
|
||||
|
||||
// Optimize vectors in AVX mode
|
||||
// Sign extend v8i16 to v8i32 and
|
||||
// v4i32 to v4i64
|
||||
//
|
||||
// Divide input vector into two parts
|
||||
// for v4i32 the shuffle mask will be { 0, 1, -1, -1} {2, 3, -1, -1}
|
||||
// use vpmovsx instruction to extend v4i32 -> v2i64; v8i16 -> v4i32
|
||||
// concat the vectors to original VT
|
||||
// Optimize vectors in AVX mode
|
||||
// Sign extend v8i16 to v8i32 and
|
||||
// v4i32 to v4i64
|
||||
//
|
||||
// Divide input vector into two parts
|
||||
// for v4i32 the shuffle mask will be { 0, 1, -1, -1} {2, 3, -1, -1}
|
||||
// use vpmovsx instruction to extend v4i32 -> v2i64; v8i16 -> v4i32
|
||||
// concat the vectors to original VT
|
||||
|
||||
unsigned NumElems = InVT.getVectorNumElements();
|
||||
SDValue Undef = DAG.getUNDEF(InVT);
|
||||
unsigned NumElems = InVT.getVectorNumElements();
|
||||
SDValue Undef = DAG.getUNDEF(InVT);
|
||||
|
||||
SmallVector<int,8> ShufMask1(NumElems, -1);
|
||||
for (unsigned i = 0; i != NumElems/2; ++i)
|
||||
ShufMask1[i] = i;
|
||||
SmallVector<int,8> ShufMask1(NumElems, -1);
|
||||
for (unsigned i = 0; i != NumElems/2; ++i)
|
||||
ShufMask1[i] = i;
|
||||
|
||||
SDValue OpLo = DAG.getVectorShuffle(InVT, dl, In, Undef, &ShufMask1[0]);
|
||||
SDValue OpLo = DAG.getVectorShuffle(InVT, dl, In, Undef, &ShufMask1[0]);
|
||||
|
||||
SmallVector<int,8> ShufMask2(NumElems, -1);
|
||||
for (unsigned i = 0; i != NumElems/2; ++i)
|
||||
ShufMask2[i] = i + NumElems/2;
|
||||
SmallVector<int,8> ShufMask2(NumElems, -1);
|
||||
for (unsigned i = 0; i != NumElems/2; ++i)
|
||||
ShufMask2[i] = i + NumElems/2;
|
||||
|
||||
SDValue OpHi = DAG.getVectorShuffle(InVT, dl, In, Undef, &ShufMask2[0]);
|
||||
SDValue OpHi = DAG.getVectorShuffle(InVT, dl, In, Undef, &ShufMask2[0]);
|
||||
|
||||
EVT HalfVT = EVT::getVectorVT(*DAG.getContext(), VT.getScalarType(),
|
||||
VT.getVectorNumElements()/2);
|
||||
EVT HalfVT = EVT::getVectorVT(*DAG.getContext(), VT.getScalarType(),
|
||||
VT.getVectorNumElements()/2);
|
||||
|
||||
OpLo = DAG.getNode(X86ISD::VSEXT_MOVL, dl, HalfVT, OpLo);
|
||||
OpHi = DAG.getNode(X86ISD::VSEXT_MOVL, dl, HalfVT, OpHi);
|
||||
OpLo = DAG.getNode(X86ISD::VSEXT_MOVL, dl, HalfVT, OpLo);
|
||||
OpHi = DAG.getNode(X86ISD::VSEXT_MOVL, dl, HalfVT, OpHi);
|
||||
|
||||
return DAG.getNode(ISD::CONCAT_VECTORS, dl, VT, OpLo, OpHi);
|
||||
}
|
||||
return SDValue();
|
||||
return DAG.getNode(ISD::CONCAT_VECTORS, dl, VT, OpLo, OpHi);
|
||||
}
|
||||
|
||||
// isAndOrOfSingleUseSetCCs - Return true if node is an ISD::AND or
|
||||
|
Loading…
Reference in New Issue
Block a user