[MLIR] Simplex::normalizeRow: early exit when gcd is one

Reviewed By: bondhugula

Differential Revision: https://reviews.llvm.org/D116672
This commit is contained in:
Arjun P 2022-01-05 23:21:45 +05:30
parent afc94c0ed7
commit dbb2e74da3
1 changed files with 6 additions and 2 deletions

View File

@ -124,10 +124,14 @@ unsigned SimplexBase::addRow(ArrayRef<int64_t> 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;
}