[llvm] GlobalISel: Use G_UADDE when narrowing G_UMULH (PR #97194)
Thorsten Schütt via llvm-commits
llvm-commits at lists.llvm.org
Sun Jun 30 13:46:31 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))
----------------
tschuett wrote:
What is the semantic difference to an `G_UADDO`? One parameter of the G_UADDE is zero. Ok, maybe zext the carryin.
https://github.com/llvm/llvm-project/pull/97194
More information about the llvm-commits
mailing list