Skip to content

Commit 1d7a0dc

Browse files
committed
Revert "Use eary exits"
This reverts commit f72c73c.
1 parent f72c73c commit 1d7a0dc

File tree

1 file changed

+56
-59
lines changed

1 file changed

+56
-59
lines changed

llvm/lib/Target/AArch64/AArch64ISelLowering.cpp

Lines changed: 56 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -24736,67 +24736,64 @@ static SDValue performZIP1Combine(SDNode *N, SelectionDAG &DAG) {
2473624736
SDLoc DL(N);
2473724737
EVT VT = N->getValueType(0);
2473824738
EVT EltVT = VT.getVectorElementType();
24739-
2474024739
SDValue Op0 = skipElementSizePreservingCast(N->getOperand(0), VT);
2474124740
SDValue Op1 = skipElementSizePreservingCast(N->getOperand(1), VT);
24742-
if (!Op0 || !Op1 || Op0->getOpcode() != ISD::INSERT_VECTOR_ELT ||
24743-
Op1->getOpcode() != ISD::INSERT_VECTOR_ELT)
24744-
return SDValue();
24745-
24746-
SDValue Op00 = Op0->getOperand(0);
24747-
SDValue Op10 = Op1->getOperand(0);
24748-
if (!Op00.isUndef() || !Op10.isUndef() ||
24749-
Op0->getConstantOperandVal(2) != 0 || Op1->getConstantOperandVal(2) != 0)
24750-
return SDValue();
24751-
24752-
SDValue Op01 = Op0->getOperand(1);
24753-
SDValue Op11 = Op1->getOperand(1);
24754-
if (Op01->getOpcode() != ISD::EXTRACT_VECTOR_ELT ||
24755-
Op11->getOpcode() != ISD::EXTRACT_VECTOR_ELT)
24756-
return SDValue();
24757-
24758-
SDValue Op010 = skipElementSizePreservingCast(Op01->getOperand(0), VT);
24759-
SDValue Op110 = skipElementSizePreservingCast(Op11->getOperand(0), VT);
24760-
unsigned StartExtractIdx = Op01->getConstantOperandVal(1);
24761-
if (!Op010 || Op010 != Op110 ||
24762-
Op11->getConstantOperandVal(1) != StartExtractIdx + 1 ||
24763-
StartExtractIdx % 2 != 0)
24764-
return SDValue();
24765-
24766-
// t0: nxv16i8 = ...
24767-
// t1: i32 = extract_vector_elt t0, Constant:i64<n>
24768-
// t2: i32 = extract_vector_elt t0, Constant:i64<n + 1>
24769-
// t3: nxv16i8 = insert_vector_elt(undef, t1, 0)
24770-
// t4: nxv16i8 = insert_vector_elt(undef, t2, 0)
24771-
// t5: nxv16i8 = zip1(t3, t4)
24772-
//
24773-
// ->
24774-
// t0: nxv16i8 = ...
24775-
// t1: nxv8i16 = bitcast t0
24776-
// t2: i32 = extract_vector_elt t1, Constant:i64<n / 2>
24777-
// t3: nxv8i16 = insert_vector_elt(undef, t2, 0)
24778-
// t4: nxv16i8 = bitcast t3
24779-
//
24780-
// Where n % 2 == 0
24781-
SDValue Result;
24782-
if (StartExtractIdx == 0)
24783-
Result = Op010;
24784-
else if (EltVT.getSizeInBits() < 64) {
24785-
unsigned LargeEltBits = EltVT.getSizeInBits() * 2;
24786-
EVT LargeEltVT =
24787-
MVT::getVectorVT(MVT::getIntegerVT(LargeEltBits),
24788-
VT.getVectorElementCount().divideCoefficientBy(2));
24789-
EVT ExtractVT = MVT::getIntegerVT(std::max(LargeEltBits, 32U));
24790-
SDValue Extract =
24791-
DAG.getNode(ISD::EXTRACT_VECTOR_ELT, DL, ExtractVT,
24792-
DAG.getBitcast(LargeEltVT, Op010),
24793-
DAG.getVectorIdxConstant(StartExtractIdx / 2, DL));
24794-
Result = DAG.getNode(ISD::INSERT_VECTOR_ELT, DL, LargeEltVT,
24795-
DAG.getUNDEF(LargeEltVT), Extract,
24796-
DAG.getVectorIdxConstant(0, DL));
24797-
}
24798-
24799-
return Result ? DAG.getBitcast(VT, Result) : SDValue();
24741+
if (Op0 && Op1 && Op0->getOpcode() == ISD::INSERT_VECTOR_ELT &&
24742+
Op1->getOpcode() == ISD::INSERT_VECTOR_ELT) {
24743+
SDValue Op00 = Op0->getOperand(0);
24744+
SDValue Op10 = Op1->getOperand(0);
24745+
if (Op00.isUndef() && Op10.isUndef() &&
24746+
Op0->getConstantOperandVal(2) == 0 &&
24747+
Op1->getConstantOperandVal(2) == 0) {
24748+
SDValue Op01 = Op0->getOperand(1);
24749+
SDValue Op11 = Op1->getOperand(1);
24750+
if (Op01->getOpcode() == ISD::EXTRACT_VECTOR_ELT &&
24751+
Op11->getOpcode() == ISD::EXTRACT_VECTOR_ELT) {
24752+
SDValue Op010 = skipElementSizePreservingCast(Op01->getOperand(0), VT);
24753+
SDValue Op110 = skipElementSizePreservingCast(Op11->getOperand(0), VT);
24754+
unsigned StartExtractIdx = Op01->getConstantOperandVal(1);
24755+
if (Op010 && Op010 == Op110 &&
24756+
Op11->getConstantOperandVal(1) == StartExtractIdx + 1 &&
24757+
StartExtractIdx % 2 == 0) {
24758+
// t0: nxv16i8 = ...
24759+
// t1: i32 = extract_vector_elt t0, Constant:i64<n>
24760+
// t2: i32 = extract_vector_elt t0, Constant:i64<n + 1>
24761+
// t3: nxv16i8 = insert_vector_elt(undef, t1, 0)
24762+
// t4: nxv16i8 = insert_vector_elt(undef, t2, 0)
24763+
// t5: nxv16i8 = zip1(t3, t4)
24764+
//
24765+
// ->
24766+
// t0: nxv16i8 = ...
24767+
// t1: nxv8i16 = bitcast t0
24768+
// t2: i32 = extract_vector_elt t1, Constant:i64<n / 2>
24769+
// t3: nxv8i16 = insert_vector_elt(undef, t2, 0)
24770+
// t4: nxv16i8 = bitcast t3
24771+
//
24772+
// Where n % 2 == 0
24773+
SDValue Result;
24774+
if (StartExtractIdx == 0)
24775+
Result = Op010;
24776+
else if (EltVT.getSizeInBits() < 64) {
24777+
unsigned LargeEltBits = EltVT.getSizeInBits() * 2;
24778+
EVT LargeEltVT = MVT::getVectorVT(
24779+
MVT::getIntegerVT(LargeEltBits),
24780+
VT.getVectorElementCount().divideCoefficientBy(2));
24781+
EVT ExtractVT = MVT::getIntegerVT(std::max(LargeEltBits, 32U));
24782+
SDValue Extract =
24783+
DAG.getNode(ISD::EXTRACT_VECTOR_ELT, DL, ExtractVT,
24784+
DAG.getBitcast(LargeEltVT, Op010),
24785+
DAG.getVectorIdxConstant(StartExtractIdx / 2, DL));
24786+
Result = DAG.getNode(ISD::INSERT_VECTOR_ELT, DL, LargeEltVT,
24787+
DAG.getUNDEF(LargeEltVT), Extract,
24788+
DAG.getVectorIdxConstant(0, DL));
24789+
}
24790+
if (Result)
24791+
return DAG.getBitcast(VT, Result);
24792+
}
24793+
}
24794+
}
24795+
}
24796+
return SDValue();
2480024797
}
2480124798

2480224799
static SDValue

0 commit comments

Comments
 (0)