[llvm] d6ad4c2 - [GlobalISel] Reorder code in CombinerHelper::buildUDivUsingMul. NFC (#99565)
via llvm-commits
llvm-commits at lists.llvm.org
Mon Jul 22 15:27:58 PDT 2024
Author: Craig Topper
Date: 2024-07-22T15:27:55-07:00
New Revision: d6ad4c2834a0ed679f19536a49628c4ff76fe8d0
URL: https://github.com/llvm/llvm-project/commit/d6ad4c2834a0ed679f19536a49628c4ff76fe8d0
DIFF: https://github.com/llvm/llvm-project/commit/d6ad4c2834a0ed679f19536a49628c4ff76fe8d0.diff
LOG: [GlobalISel] Reorder code in CombinerHelper::buildUDivUsingMul. NFC (#99565)
Group the code for handling Exact udiv together above the code for
non-Exact. Move the computeKnownBits call to after the Exact udiv
handling.
Added:
Modified:
llvm/lib/CodeGen/GlobalISel/CombinerHelper.cpp
Removed:
################################################################################
diff --git a/llvm/lib/CodeGen/GlobalISel/CombinerHelper.cpp b/llvm/lib/CodeGen/GlobalISel/CombinerHelper.cpp
index dfc3d73e322b8..e77ea3e76ad71 100644
--- a/llvm/lib/CodeGen/GlobalISel/CombinerHelper.cpp
+++ b/llvm/lib/CodeGen/GlobalISel/CombinerHelper.cpp
@@ -5179,13 +5179,9 @@ MachineInstr *CombinerHelper::buildUDivUsingMul(MachineInstr &MI) {
LLT ShiftAmtTy = getTargetLowering().getPreferredShiftAmountTy(Ty);
LLT ScalarShiftAmtTy = ShiftAmtTy.getScalarType();
- unsigned KnownLeadingZeros =
- KB ? KB->getKnownBits(LHS).countMinLeadingZeros() : 0;
auto &MIB = Builder;
bool UseSRL = false;
- bool UseNPQ = false;
- SmallVector<Register, 16> PreShifts, PostShifts, MagicFactors, NPQFactors;
SmallVector<Register, 16> Shifts, Factors;
auto *RHSDefInstr = cast<GenericMachineInstr>(getDefIgnoringCopies(RHS, MRI));
bool IsSplat = getIConstantSplatVal(*RHSDefInstr, MRI).has_value();
@@ -5213,6 +5209,33 @@ MachineInstr *CombinerHelper::buildUDivUsingMul(MachineInstr &MI) {
return true;
};
+ if (MI.getFlag(MachineInstr::MIFlag::IsExact)) {
+ // Collect all magic values from the build vector.
+ if (!matchUnaryPredicate(MRI, RHS, BuildExactUDIVPattern))
+ llvm_unreachable("Expected unary predicate match to succeed");
+
+ Register Shift, Factor;
+ if (Ty.isVector()) {
+ Shift = MIB.buildBuildVector(ShiftAmtTy, Shifts).getReg(0);
+ Factor = MIB.buildBuildVector(Ty, Factors).getReg(0);
+ } else {
+ Shift = Shifts[0];
+ Factor = Factors[0];
+ }
+
+ Register Res = LHS;
+
+ if (UseSRL)
+ Res = MIB.buildLShr(Ty, Res, Shift, MachineInstr::IsExact).getReg(0);
+
+ return MIB.buildMul(Ty, Res, Factor);
+ }
+
+ unsigned KnownLeadingZeros =
+ KB ? KB->getKnownBits(LHS).countMinLeadingZeros() : 0;
+
+ bool UseNPQ = false;
+ SmallVector<Register, 16> PreShifts, PostShifts, MagicFactors, NPQFactors;
auto BuildUDIVPattern = [&](const Constant *C) {
auto *CI = cast<ConstantInt>(C);
const APInt &Divisor = CI->getValue();
@@ -5258,29 +5281,6 @@ MachineInstr *CombinerHelper::buildUDivUsingMul(MachineInstr &MI) {
return true;
};
- if (MI.getFlag(MachineInstr::MIFlag::IsExact)) {
- // Collect all magic values from the build vector.
- bool Matched = matchUnaryPredicate(MRI, RHS, BuildExactUDIVPattern);
- (void)Matched;
- assert(Matched && "Expected unary predicate match to succeed");
-
- Register Shift, Factor;
- if (Ty.isVector()) {
- Shift = MIB.buildBuildVector(ShiftAmtTy, Shifts).getReg(0);
- Factor = MIB.buildBuildVector(Ty, Factors).getReg(0);
- } else {
- Shift = Shifts[0];
- Factor = Factors[0];
- }
-
- Register Res = LHS;
-
- if (UseSRL)
- Res = MIB.buildLShr(Ty, Res, Shift, MachineInstr::IsExact).getReg(0);
-
- return MIB.buildMul(Ty, Res, Factor);
- }
-
// Collect the shifts/magic values from each element.
bool Matched = matchUnaryPredicate(MRI, RHS, BuildUDIVPattern);
(void)Matched;
More information about the llvm-commits
mailing list