[llvm] GlobalISel: Use G_UADDE when narrowing G_UMULH (PR #97194)
Matt Arsenault via llvm-commits
llvm-commits at lists.llvm.org
Tue Jul 2 07:47:02 PDT 2024
================
@@ -5752,15 +5755,15 @@ void LegalizerHelper::multiplyRegisters(SmallVectorImpl<Register> &DstRegs,
// Add all factors and accumulate all carries into CarrySum.
if (DstIdx != DstParts - 1) {
MachineInstrBuilder Uaddo =
- B.buildUAddo(NarrowTy, LLT::scalar(1), Factors[0], Factors[1]);
+ B.buildUAddo(NarrowTy, S1, Factors[0], Factors[1]);
FactorSum = Uaddo.getReg(0);
- CarrySum = B.buildZExt(NarrowTy, Uaddo.getReg(1)).getReg(0);
+ CarrySum = Zero;
for (unsigned i = 2; i < Factors.size(); ++i) {
- MachineInstrBuilder Uaddo =
- B.buildUAddo(NarrowTy, LLT::scalar(1), FactorSum, Factors[i]);
- FactorSum = Uaddo.getReg(0);
- MachineInstrBuilder Carry = B.buildZExt(NarrowTy, Uaddo.getReg(1));
- CarrySum = B.buildAdd(NarrowTy, CarrySum, Carry).getReg(0);
+ auto Uadde =
+ B.buildUAdde(NarrowTy, S1, FactorSum, Factors[i], Uaddo.getReg(1));
+ FactorSum = Uadde.getReg(0);
+ CarrySum = B.buildUAdde(NarrowTy, S1, CarrySum, Zero, Uadde.getReg(1))
----------------
arsenm wrote:
It's mainly a structural difference. G_UADDE has the carry-in boolean flag, G_UADDO does not
https://github.com/llvm/llvm-project/pull/97194
More information about the llvm-commits
mailing list