From d81fa76f3a6b698d9d76e610eb0a8c0f7ea82eaf Mon Sep 17 00:00:00 2001 From: Arjun P Date: Thu, 31 Mar 2022 12:34:33 +0100 Subject: [PATCH] [MLIR][Presburger] MultiAffineFunction:eliminateRedundantLocalId: fix bug where local offset was not considered Previously, when updating the outputs matrix, the local offset was not being considered. Reviewed By: Groverkss Differential Revision: https://reviews.llvm.org/D122812 --- mlir/lib/Analysis/Presburger/PWMAFunction.cpp | 3 ++- .../Analysis/Presburger/PWMAFunctionTest.cpp | 22 +++++++++++++++++++--- 2 files changed, 21 insertions(+), 4 deletions(-) diff --git a/mlir/lib/Analysis/Presburger/PWMAFunction.cpp b/mlir/lib/Analysis/Presburger/PWMAFunction.cpp index 42b2511..d00bc2d7 100644 --- a/mlir/lib/Analysis/Presburger/PWMAFunction.cpp +++ b/mlir/lib/Analysis/Presburger/PWMAFunction.cpp @@ -110,7 +110,8 @@ void MultiAffineFunction::removeIdRange(IdKind kind, unsigned idStart, void MultiAffineFunction::eliminateRedundantLocalId(unsigned posA, unsigned posB) { - output.addToColumn(posB, posA, /*scale=*/1); + unsigned localOffset = getIdKindOffset(IdKind::Local); + output.addToColumn(localOffset + posB, localOffset + posA, /*scale=*/1); IntegerPolyhedron::eliminateRedundantLocalId(posA, posB); } diff --git a/mlir/unittests/Analysis/Presburger/PWMAFunctionTest.cpp b/mlir/unittests/Analysis/Presburger/PWMAFunctionTest.cpp index 79139de..27d0252 100644 --- a/mlir/unittests/Analysis/Presburger/PWMAFunctionTest.cpp +++ b/mlir/unittests/Analysis/Presburger/PWMAFunctionTest.cpp @@ -157,19 +157,35 @@ TEST(PWMAFunction, valueAt) { } TEST(PWMAFunction, removeIdRangeRegressionTest) { - PWMAFunction pwafA = parsePWMAF( + PWMAFunction pwmafA = parsePWMAF( /*numInputs=*/2, /*numOutputs=*/1, { {"(x, y) : (x == 0, y == 0, x - 2*(x floordiv 2) == 0, y - 2*(y " "floordiv 2) == 0)", {{0, 0, 0, 0, 0}}} // (0, 0) }); - PWMAFunction pwafB = parsePWMAF( + PWMAFunction pwmafB = parsePWMAF( /*numInputs=*/2, /*numOutputs=*/1, { {"(x, y) : (x - 11*y == 0, 11*x - y == 0, x - 2*(x floordiv 2) == 0, " "y - 2*(y floordiv 2) == 0)", {{0, 0, 0, 0, 0}}} // (0, 0) }); - EXPECT_TRUE(pwafA.isEqual(pwafB)); + EXPECT_TRUE(pwmafA.isEqual(pwmafB)); +} + +TEST(PWMAFunction, eliminateRedundantLocalIdRegressionTest) { + PWMAFunction pwmafA = parsePWMAF( + /*numInputs=*/2, /*numOutputs=*/1, + { + {"(x, y) : (x - 2*(x floordiv 2) == 0, x - 2*y == 0)", + {{0, 1, 0, 0}}} // (0, 0) + }); + PWMAFunction pwmafB = parsePWMAF( + /*numInputs=*/2, /*numOutputs=*/1, + { + {"(x, y) : (x - 2*(x floordiv 2) == 0, x - 2*y == 0)", + {{1, -1, 0, 0}}} // (0, 0) + }); + EXPECT_TRUE(pwmafA.isEqual(pwmafB)); } -- 2.7.4