Skip to content

Commit 36a56d9

Browse files
committed
fixup! fixup! [AArch64][GlobalISel] Combine vecreduce(ext) to {U/S}ADDLV
1 parent c760d22 commit 36a56d9

File tree

3 files changed

+11
-17
lines changed

3 files changed

+11
-17
lines changed

llvm/lib/CodeGen/GlobalISel/LegalizerHelper.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4893,7 +4893,7 @@ LegalizerHelper::fewerElementsVectorSeqReductions(MachineInstr &MI,
48934893

48944894
SmallVector<Register> SplitSrcs;
48954895
unsigned NumParts = SrcTy.getNumElements();
4896-
extractParts(SrcReg, NarrowTy, NumParts, SplitSrcs);
4896+
extractParts(SrcReg, NarrowTy, NumParts, SplitSrcs, MIRBuilder, MRI);
48974897
Register Acc = ScalarReg;
48984898
for (unsigned i = 0; i < NumParts; i++)
48994899
Acc = MIRBuilder.buildInstr(ScalarOpc, {NarrowTy}, {Acc, SplitSrcs[i]})

llvm/lib/Target/AArch64/AArch64ISelLowering.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2461,6 +2461,7 @@ const char *AArch64TargetLowering::getTargetNodeName(unsigned Opcode) const {
24612461
MAKE_CASE(AArch64ISD::SADDV)
24622462
MAKE_CASE(AArch64ISD::UADDV)
24632463
MAKE_CASE(AArch64ISD::UADDLV)
2464+
MAKE_CASE(AArch64ISD::SADDLV)
24642465
MAKE_CASE(AArch64ISD::SDOT)
24652466
MAKE_CASE(AArch64ISD::UDOT)
24662467
MAKE_CASE(AArch64ISD::SMINV)

llvm/lib/Target/AArch64/GISel/AArch64PreLegalizerCombiner.cpp

Lines changed: 9 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -436,11 +436,9 @@ bool matchExtUaddvToUaddlv(MachineInstr &MI, MachineRegisterInfo &MRI,
436436
if ((DstTy.getScalarSizeInBits() == 16 &&
437437
ExtSrcTy.getNumElements() % 8 == 0 && ExtSrcTy.getNumElements() < 256) ||
438438
(DstTy.getScalarSizeInBits() == 32 &&
439-
ExtSrcTy.getNumElements() % 4 == 0 &&
440-
ExtSrcTy.getNumElements() < 65536) ||
439+
ExtSrcTy.getNumElements() % 4 == 0) ||
441440
(DstTy.getScalarSizeInBits() == 64 &&
442-
ExtSrcTy.getNumElements() % 4 == 0 &&
443-
ExtSrcTy.getNumElements() < 4294967296)) {
441+
ExtSrcTy.getNumElements() % 4 == 0)) {
444442
std::get<0>(MatchInfo) = ExtSrcReg;
445443
return true;
446444
}
@@ -494,8 +492,7 @@ void applyExtUaddvToUaddlv(MachineInstr &MI, MachineRegisterInfo &MRI,
494492

495493
unsigned MidScalarSize = MainTy.getScalarSizeInBits() * 2;
496494
LLT MidScalarLLT = LLT::scalar(MidScalarSize);
497-
Register zeroReg =
498-
B.buildConstant(LLT::scalar(64), 0)->getOperand(0).getReg();
495+
Register zeroReg = B.buildConstant(LLT::scalar(64), 0).getReg(0);
499496
for (unsigned I = 0; I < WorkingRegisters.size(); I++) {
500497
// If the number of elements is too small to build an instruction, extend
501498
// its size before applying addlv
@@ -506,17 +503,15 @@ void applyExtUaddvToUaddlv(MachineInstr &MI, MachineRegisterInfo &MRI,
506503
B.buildInstr(std::get<1>(MatchInfo) ? TargetOpcode::G_SEXT
507504
: TargetOpcode::G_ZEXT,
508505
{LLT::fixed_vector(4, 16)}, {WorkingRegisters[I]})
509-
->getOperand(0)
510-
.getReg();
506+
.getReg(0);
511507
}
512508

513509
// Generate the {U/S}ADDLV instruction, whose output is always double of the
514510
// Src's Scalar size
515511
LLT addlvTy = MidScalarSize <= 32 ? LLT::fixed_vector(4, 32)
516512
: LLT::fixed_vector(2, 64);
517-
Register addlvReg = B.buildInstr(Opc, {addlvTy}, {WorkingRegisters[I]})
518-
->getOperand(0)
519-
.getReg();
513+
Register addlvReg =
514+
B.buildInstr(Opc, {addlvTy}, {WorkingRegisters[I]}).getReg(0);
520515

521516
// The output from {U/S}ADDLV gets placed in the lowest lane of a v4i32 or
522517
// v2i64 register.
@@ -526,15 +521,13 @@ void applyExtUaddvToUaddlv(MachineInstr &MI, MachineRegisterInfo &MRI,
526521
if (MidScalarSize == 32 || MidScalarSize == 64) {
527522
WorkingRegisters[I] = B.buildInstr(AArch64::G_EXTRACT_VECTOR_ELT,
528523
{MidScalarLLT}, {addlvReg, zeroReg})
529-
->getOperand(0)
530-
.getReg();
524+
.getReg(0);
531525
} else {
532526
Register extractReg = B.buildInstr(AArch64::G_EXTRACT_VECTOR_ELT,
533527
{LLT::scalar(32)}, {addlvReg, zeroReg})
534-
->getOperand(0)
535-
.getReg();
528+
.getReg(0);
536529
WorkingRegisters[I] =
537-
B.buildTrunc({MidScalarLLT}, {extractReg})->getOperand(0).getReg();
530+
B.buildTrunc({MidScalarLLT}, {extractReg}).getReg(0);
538531
}
539532
}
540533

0 commit comments

Comments
 (0)