diff --git a/mlir/lib/Analysis/Presburger/Simplex.cpp b/mlir/lib/Analysis/Presburger/Simplex.cpp index 1e881aa018a2..3d63ebdb0ca2 100644 --- a/mlir/lib/Analysis/Presburger/Simplex.cpp +++ b/mlir/lib/Analysis/Presburger/Simplex.cpp @@ -124,10 +124,14 @@ unsigned SimplexBase::addRow(ArrayRef coeffs) { void SimplexBase::normalizeRow(unsigned row) { int64_t gcd = 0; for (unsigned col = 0; col < nCol; ++col) { - if (gcd == 1) - break; gcd = llvm::greatestCommonDivisor(gcd, std::abs(tableau(row, col))); + // If the gcd becomes 1 then the row is already normalized. + if (gcd == 1) + return; } + + // Note that the gcd can never become zero since the first element of the row, + // the denominator, is non-zero. for (unsigned col = 0; col < nCol; ++col) tableau(row, col) /= gcd; }