Skip to content

Commit 0e991df

Browse files
committed
fixup! fixup! [AArch64][GlobalISel] Combine vecreduce(ext) to {U/S}ADDLV
1 parent 7f9aaa3 commit 0e991df

File tree

2 files changed

+10
-16
lines changed

2 files changed

+10
-16
lines changed

llvm/lib/Target/AArch64/AArch64ISelLowering.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2464,6 +2464,7 @@ const char *AArch64TargetLowering::getTargetNodeName(unsigned Opcode) const {
24642464
MAKE_CASE(AArch64ISD::SADDV)
24652465
MAKE_CASE(AArch64ISD::UADDV)
24662466
MAKE_CASE(AArch64ISD::UADDLV)
2467+
MAKE_CASE(AArch64ISD::SADDLV)
24672468
MAKE_CASE(AArch64ISD::SDOT)
24682469
MAKE_CASE(AArch64ISD::UDOT)
24692470
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
@@ -435,11 +435,9 @@ bool matchExtUaddvToUaddlv(MachineInstr &MI, MachineRegisterInfo &MRI,
435435
if ((DstTy.getScalarSizeInBits() == 16 &&
436436
ExtSrcTy.getNumElements() % 8 == 0 && ExtSrcTy.getNumElements() < 256) ||
437437
(DstTy.getScalarSizeInBits() == 32 &&
438-
ExtSrcTy.getNumElements() % 4 == 0 &&
439-
ExtSrcTy.getNumElements() < 65536) ||
438+
ExtSrcTy.getNumElements() % 4 == 0) ||
440439
(DstTy.getScalarSizeInBits() == 64 &&
441-
ExtSrcTy.getNumElements() % 4 == 0 &&
442-
ExtSrcTy.getNumElements() < 4294967296)) {
440+
ExtSrcTy.getNumElements() % 4 == 0)) {
443441
std::get<0>(MatchInfo) = ExtSrcReg;
444442
return true;
445443
}
@@ -493,8 +491,7 @@ void applyExtUaddvToUaddlv(MachineInstr &MI, MachineRegisterInfo &MRI,
493491

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

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

520515
// The output from {U/S}ADDLV gets placed in the lowest lane of a v4i32 or
521516
// v2i64 register.
@@ -525,15 +520,13 @@ void applyExtUaddvToUaddlv(MachineInstr &MI, MachineRegisterInfo &MRI,
525520
if (MidScalarSize == 32 || MidScalarSize == 64) {
526521
WorkingRegisters[I] = B.buildInstr(AArch64::G_EXTRACT_VECTOR_ELT,
527522
{MidScalarLLT}, {addlvReg, zeroReg})
528-
->getOperand(0)
529-
.getReg();
523+
.getReg(0);
530524
} else {
531525
Register extractReg = B.buildInstr(AArch64::G_EXTRACT_VECTOR_ELT,
532526
{LLT::scalar(32)}, {addlvReg, zeroReg})
533-
->getOperand(0)
534-
.getReg();
527+
.getReg(0);
535528
WorkingRegisters[I] =
536-
B.buildTrunc({MidScalarLLT}, {extractReg})->getOperand(0).getReg();
529+
B.buildTrunc({MidScalarLLT}, {extractReg}).getReg(0);
537530
}
538531
}
539532

0 commit comments

Comments
 (0)