[Mlir-commits] [mlir] eedc997 - [mlir][Analysis] Add batched version of FlatAffineConstraints::addId

Matthias Springer llvmlistbot at llvm.org
Sun Aug 29 17:57:34 PDT 2021


Author: Matthias Springer
Date: 2021-08-30T00:56:44Z
New Revision: eedc997b7d4ce9fe4495b0751babb577bbe2de8a

URL: https://github.com/llvm/llvm-project/commit/eedc997b7d4ce9fe4495b0751babb577bbe2de8a
DIFF: https://github.com/llvm/llvm-project/commit/eedc997b7d4ce9fe4495b0751babb577bbe2de8a.diff

LOG: [mlir][Analysis] Add batched version of FlatAffineConstraints::addId

* Add batched version of all `addId` variants, so that multiple IDs can be added at a time.
* Rename `addId` and variants to `insertId` and `appendId`. Most external users call `appendId`. Splitting `addId` into two functions also makes it possible to provide batched version for both. (Otherwise, the overloads are ambigious when calling `addId`.)

Differential Revision: https://reviews.llvm.org/D108532

Added: 
    

Modified: 
    mlir/include/mlir/Analysis/AffineStructures.h
    mlir/lib/Analysis/AffineAnalysis.cpp
    mlir/lib/Analysis/AffineStructures.cpp
    mlir/lib/Dialect/Linalg/Transforms/Hoisting.cpp
    mlir/lib/Dialect/SCF/Transforms/LoopSpecialization.cpp

Removed: 
    


################################################################################
diff  --git a/mlir/include/mlir/Analysis/AffineStructures.h b/mlir/include/mlir/Analysis/AffineStructures.h
index c1eb3758d421..7cb53a271abe 100644
--- a/mlir/include/mlir/Analysis/AffineStructures.h
+++ b/mlir/include/mlir/Analysis/AffineStructures.h
@@ -243,19 +243,23 @@ class FlatAffineConstraints {
   /// Swap the posA^th identifier with the posB^th identifier.
   virtual void swapId(unsigned posA, unsigned posB);
 
-  /// Add identifiers of the specified kind - specified positions are relative
-  /// to the kind of identifier. The coefficient column corresponding to the
-  /// added identifier is initialized to zero.
-  void addDimId(unsigned pos);
-  void addSymbolId(unsigned pos);
-  void addLocalId(unsigned pos);
-  virtual unsigned addId(IdKind kind, unsigned pos);
-  /// Add identifiers of the specified kind at the end of the table. Return the
-  /// position of the column. The coefficient column corresponding to the
-  /// added identifier is initialized to zero.
-  unsigned addDimId();
-  unsigned addSymbolId();
-  unsigned addLocalId();
+  /// Insert `num` identifiers of the specified kind at position `pos`.
+  /// Positions are relative to the kind of identifier. The coefficient columns
+  /// corresponding to the added identifiers are initialized to zero. Return the
+  /// absolute column position (i.e., not relative to the kind of identifier)
+  /// of the first added identifier.
+  unsigned insertDimId(unsigned pos, unsigned num = 1);
+  unsigned insertSymbolId(unsigned pos, unsigned num = 1);
+  unsigned insertLocalId(unsigned pos, unsigned num = 1);
+  virtual unsigned insertId(IdKind kind, unsigned pos, unsigned num = 1);
+
+  /// Append `num` identifiers of the specified kind after the last identifier.
+  /// of that kind. Return the position of the first appended column. The
+  /// coefficient columns corresponding to the added identifiers are initialized
+  /// to zero.
+  unsigned appendDimId(unsigned num = 1);
+  unsigned appendSymbolId(unsigned num = 1);
+  unsigned appendLocalId(unsigned num = 1);
 
   /// Composes an affine map whose dimensions and symbols match one to one with
   /// the dimensions and symbols of this FlatAffineConstraints. The results of
@@ -655,22 +659,31 @@ class FlatAffineValueConstraints : public FlatAffineConstraints {
   /// Swap the posA^th identifier with the posB^th identifier.
   void swapId(unsigned posA, unsigned posB) override;
 
-  /// Add identifiers of the specified kind - specified positions are relative
-  /// to the kind of identifier. The coefficient column corresponding to the
-  /// added identifier is initialized to zero. `val` is the Value corresponding
-  /// to the identifier that can optionally be provided.
-  void addDimId(unsigned pos, Value val);
-  using FlatAffineConstraints::addDimId;
-  void addSymbolId(unsigned pos, Value val);
-  using FlatAffineConstraints::addSymbolId;
-  unsigned addId(IdKind kind, unsigned pos) override;
-  unsigned addId(IdKind kind, unsigned pos, Value val);
-  /// Add identifiers of the specified kind at the end of the table. Return the
-  /// position of the column. The coefficient column corresponding to the
-  /// added identifier is initialized to zero. `val` is the Value corresponding
-  /// to the identifier that can optionally be provided.
-  unsigned addDimId(Value val);
-  unsigned addSymbolId(Value val);
+  /// Insert identifiers of the specified kind at position `pos`. Positions are
+  /// relative to the kind of identifier. The coefficient columns corresponding
+  /// to the added identifiers are initialized to zero. `vals` are the Values
+  /// corresponding to the identifiers. Return the absolute column position
+  /// (i.e., not relative to the kind of identifier) of the first added
+  /// identifier.
+  ///
+  /// Note: Empty Values are allowed in `vals`.
+  unsigned insertDimId(unsigned pos, ValueRange vals);
+  using FlatAffineConstraints::insertDimId;
+  unsigned insertSymbolId(unsigned pos, ValueRange vals);
+  using FlatAffineConstraints::insertSymbolId;
+  unsigned insertId(IdKind kind, unsigned pos, unsigned num = 1) override;
+  unsigned insertId(IdKind kind, unsigned pos, ValueRange vals);
+
+  /// Append identifiers of the specified kind after the last identifier of that
+  /// kind. The coefficient columns corresponding to the added identifiers are
+  /// initialized to zero. `vals` are the Values corresponding to the
+  /// identifiers. Return the position of the first added column.
+  ///
+  /// Note: Empty Values are allowed in `vals`.
+  unsigned appendDimId(ValueRange vals);
+  using FlatAffineConstraints::appendDimId;
+  unsigned appendSymbolId(ValueRange vals);
+  using FlatAffineConstraints::appendSymbolId;
 
   /// Add the specified values as a dim or symbol id depending on its nature, if
   /// it already doesn't exist in the system. `val` has to be either a terminal
@@ -731,9 +744,9 @@ class FlatAffineValueConstraints : public FlatAffineConstraints {
   /// by any of `other`'s identifiers that didn't appear in `this`. Local
   /// identifiers of each system are by design separate/local and are placed
   /// one after other (`this`'s followed by `other`'s).
-  //  Eg: Input: `this`  has (%i %j) [%M %N]
-  //             `other` has (%k, %j) [%P, %N, %M]
-  //      Output: both `this`, `other` have (%i, %j, %k) [%M, %N, %P]
+  //  E.g.: Input: `this`  has (%i, %j) [%M, %N]
+  //               `other` has (%k, %j) [%P, %N, %M]
+  //        Output: both `this`, `other` have (%i, %j, %k) [%M, %N, %P]
   //
   void mergeAndAlignIdsWithOther(unsigned offset,
                                  FlatAffineValueConstraints *other);

diff  --git a/mlir/lib/Analysis/AffineAnalysis.cpp b/mlir/lib/Analysis/AffineAnalysis.cpp
index b83f02283ba0..01209cf9f84f 100644
--- a/mlir/lib/Analysis/AffineAnalysis.cpp
+++ b/mlir/lib/Analysis/AffineAnalysis.cpp
@@ -614,9 +614,7 @@ addMemRefAccessConstraints(const AffineValueMap &srcAccessMap,
   unsigned srcNumLocalIds = srcLocalVarCst.getNumLocalIds();
   unsigned dstNumLocalIds = destLocalVarCst.getNumLocalIds();
   unsigned numLocalIdsToAdd = srcNumLocalIds + dstNumLocalIds;
-  for (unsigned i = 0; i < numLocalIdsToAdd; i++) {
-    dependenceDomain->addLocalId(dependenceDomain->getNumLocalIds());
-  }
+  dependenceDomain->appendLocalId(numLocalIdsToAdd);
 
   unsigned numDims = dependenceDomain->getNumDimIds();
   unsigned numSymbols = dependenceDomain->getNumSymbolIds();
@@ -859,9 +857,7 @@ static void computeDirectionVector(
   unsigned numIdsToEliminate = dependenceDomain->getNumIds();
   // Add new variables to 'dependenceDomain' to represent the direction
   // constraints for each shared loop.
-  for (unsigned j = 0; j < numCommonLoops; ++j) {
-    dependenceDomain->addDimId(j);
-  }
+  dependenceDomain->insertDimId(/*pos=*/0, /*num=*/numCommonLoops);
 
   // Add equality constraints for each common loop, setting newly introduced
   // variable at column 'j' to the 'dst' IV minus the 'src IV.

diff  --git a/mlir/lib/Analysis/AffineStructures.cpp b/mlir/lib/Analysis/AffineStructures.cpp
index 7489409a5919..be1c8f39cd00 100644
--- a/mlir/lib/Analysis/AffineStructures.cpp
+++ b/mlir/lib/Analysis/AffineStructures.cpp
@@ -168,9 +168,7 @@ FlatAffineConstraints::FlatAffineConstraints(IntegerSet set)
     return;
   }
   assert(flatExprs.size() == set.getNumConstraints());
-  for (unsigned l = 0, e = localVarCst.getNumLocalIds(); l < e; l++) {
-    addLocalId(getNumLocalIds());
-  }
+  appendLocalId(/*num=*/localVarCst.getNumLocalIds());
 
   for (unsigned i = 0, e = flatExprs.size(); i < e; ++i) {
     const auto &flatExpr = flatExprs[i];
@@ -259,57 +257,60 @@ void FlatAffineConstraints::append(const FlatAffineConstraints &other) {
   }
 }
 
-void FlatAffineConstraints::addLocalId(unsigned pos) {
-  addId(IdKind::Local, pos);
+unsigned FlatAffineConstraints::appendDimId(unsigned num) {
+  unsigned pos = getNumDimIds();
+  insertId(IdKind::Dimension, pos, num);
+  return pos;
 }
 
-unsigned FlatAffineConstraints::addLocalId() {
-  unsigned pos = getNumLocalIds();
-  addId(IdKind::Local, pos);
+unsigned FlatAffineValueConstraints::appendDimId(ValueRange vals) {
+  unsigned pos = getNumDimIds();
+  insertId(IdKind::Dimension, pos, vals);
   return pos;
 }
 
-void FlatAffineConstraints::addDimId(unsigned pos) {
-  addId(IdKind::Dimension, pos);
+unsigned FlatAffineConstraints::appendSymbolId(unsigned num) {
+  unsigned pos = getNumSymbolIds();
+  insertId(IdKind::Symbol, pos, num);
+  return pos;
 }
 
-unsigned FlatAffineConstraints::addDimId() {
-  unsigned pos = getNumDimIds();
-  addId(IdKind::Dimension, pos);
+unsigned FlatAffineValueConstraints::appendSymbolId(ValueRange vals) {
+  unsigned pos = getNumSymbolIds();
+  insertId(IdKind::Symbol, pos, vals);
   return pos;
 }
 
-void FlatAffineValueConstraints::addDimId(unsigned pos, Value val) {
-  addId(IdKind::Dimension, pos, val);
+unsigned FlatAffineConstraints::appendLocalId(unsigned num) {
+  unsigned pos = getNumLocalIds();
+  insertId(IdKind::Local, pos, num);
+  return pos;
 }
 
-unsigned FlatAffineValueConstraints::addDimId(Value val) {
-  unsigned pos = getNumDimIds();
-  addId(IdKind::Dimension, pos, val);
-  return pos;
+unsigned FlatAffineConstraints::insertDimId(unsigned pos, unsigned num) {
+  return insertId(IdKind::Dimension, pos, num);
 }
 
-void FlatAffineConstraints::addSymbolId(unsigned pos) {
-  addId(IdKind::Symbol, pos);
+unsigned FlatAffineValueConstraints::insertDimId(unsigned pos,
+                                                 ValueRange vals) {
+  return insertId(IdKind::Dimension, pos, vals);
 }
 
-unsigned FlatAffineConstraints::addSymbolId() {
-  unsigned pos = getNumSymbolIds();
-  addId(IdKind::Symbol, pos);
-  return pos;
+unsigned FlatAffineConstraints::insertSymbolId(unsigned pos, unsigned num) {
+  return insertId(IdKind::Symbol, pos, num);
 }
 
-void FlatAffineValueConstraints::addSymbolId(unsigned pos, Value val) {
-  addId(IdKind::Symbol, pos, val);
+unsigned FlatAffineValueConstraints::insertSymbolId(unsigned pos,
+                                                    ValueRange vals) {
+  return insertId(IdKind::Symbol, pos, vals);
 }
 
-unsigned FlatAffineValueConstraints::addSymbolId(Value val) {
-  unsigned pos = getNumSymbolIds();
-  addId(IdKind::Symbol, pos, val);
-  return pos;
+unsigned FlatAffineConstraints::insertLocalId(unsigned pos, unsigned num) {
+  return insertId(IdKind::Local, pos, num);
 }
 
-unsigned FlatAffineConstraints::addId(IdKind kind, unsigned pos) {
+unsigned FlatAffineConstraints::insertId(IdKind kind, unsigned pos,
+                                         unsigned num) {
   if (kind == IdKind::Dimension)
     assert(pos <= getNumDimIds());
   else if (kind == IdKind::Symbol)
@@ -320,36 +321,41 @@ unsigned FlatAffineConstraints::addId(IdKind kind, unsigned pos) {
   unsigned absolutePos;
   if (kind == IdKind::Dimension) {
     absolutePos = pos;
-    numDims++;
+    numDims += num;
   } else if (kind == IdKind::Symbol) {
     absolutePos = pos + getNumDimIds();
-    numSymbols++;
+    numSymbols += num;
   } else {
     absolutePos = pos + getNumDimIds() + getNumSymbolIds();
   }
-  numIds++;
+  numIds += num;
 
-  inequalities.insertColumn(absolutePos);
-  equalities.insertColumn(absolutePos);
+  inequalities.insertColumns(absolutePos, num);
+  equalities.insertColumns(absolutePos, num);
 
   return absolutePos;
 }
 
-unsigned FlatAffineValueConstraints::addId(IdKind kind, unsigned pos) {
-  return addId(kind, pos, /*val=*/{});
+unsigned FlatAffineValueConstraints::insertId(IdKind kind, unsigned pos,
+                                              unsigned num) {
+  unsigned absolutePos = FlatAffineConstraints::insertId(kind, pos, num);
+  values.insert(values.begin() + absolutePos, num, None);
+  assert(values.size() == getNumIds());
+  return absolutePos;
 }
 
-unsigned FlatAffineValueConstraints::addId(IdKind kind, unsigned pos,
-                                           Value val) {
-  unsigned absolutePos = FlatAffineConstraints::addId(kind, pos);
+unsigned FlatAffineValueConstraints::insertId(IdKind kind, unsigned pos,
+                                              ValueRange vals) {
+  assert(!vals.empty() && "expected ValueRange with Values");
+  unsigned num = vals.size();
+  unsigned absolutePos = FlatAffineConstraints::insertId(kind, pos, num);
 
-  // If an 'id' is provided, insert it; otherwise use None.
-  if (val)
-    values.insert(values.begin() + absolutePos, val);
-  else
-    values.insert(values.begin() + absolutePos, None);
-  assert(values.size() == getNumIds());
+  // If a Value is provided, insert it; otherwise use None.
+  for (unsigned i = 0; i < num; ++i)
+    values.insert(values.begin() + absolutePos + i,
+                  vals[i] ? Optional<Value>(vals[i]) : None);
 
+  assert(values.size() == getNumIds());
   return absolutePos;
 }
 
@@ -394,8 +400,8 @@ areIdsUnique(const FlatAffineValueConstraints &cst) {
 /// identifiers appearing first followed by any of B's identifiers that didn't
 /// appear in A. Local identifiers of each system are by design separate/local
 /// and are placed one after other (A's followed by B's).
-//  Eg: Input: A has ((%i %j) [%M %N]) and B has (%k, %j) [%P, %N, %M])
-//      Output: both A, B have (%i, %j, %k) [%M, %N, %P]
+//  E.g.: Input: A has ((%i, %j) [%M, %N]) and B has (%k, %j) [%P, %N, %M])
+//        Output: both A, B have (%i, %j, %k) [%M, %N, %P]
 static void mergeAndAlignIds(unsigned offset, FlatAffineValueConstraints *a,
                              FlatAffineValueConstraints *b) {
   assert(offset <= a->getNumDimIds() && offset <= b->getNumDimIds());
@@ -412,17 +418,13 @@ static void mergeAndAlignIds(unsigned offset, FlatAffineValueConstraints *a,
                      [](Optional<Value> id) { return id.hasValue(); }));
 
   // Place local id's of A after local id's of B.
-  for (unsigned l = 0, e = a->getNumLocalIds(); l < e; l++) {
-    b->addLocalId(0);
-  }
-  for (unsigned t = 0, e = b->getNumLocalIds() - a->getNumLocalIds(); t < e;
-       t++) {
-    a->addLocalId(a->getNumLocalIds());
-  }
+  b->insertLocalId(/*pos=*/0, /*num=*/a->getNumLocalIds());
+  a->appendLocalId(/*num=*/b->getNumLocalIds() - a->getNumLocalIds());
 
   SmallVector<Value, 4> aDimValues, aSymValues;
   a->getValues(offset, a->getNumDimIds(), &aDimValues);
   a->getValues(a->getNumDimIds(), a->getNumDimAndSymbolIds(), &aSymValues);
+
   {
     // Merge dims from A into B.
     unsigned d = offset;
@@ -434,30 +436,29 @@ static void mergeAndAlignIds(unsigned offset, FlatAffineValueConstraints *a,
                "A's dim appears in B's non-dim position");
         b->swapId(d, loc);
       } else {
-        b->addDimId(d);
-        b->setValue(d, aDimValue);
+        b->insertDimId(d, aDimValue);
       }
       d++;
     }
-
     // Dimensions that are in B, but not in A, are added at the end.
     for (unsigned t = a->getNumDimIds(), e = b->getNumDimIds(); t < e; t++) {
-      a->addDimId(a->getNumDimIds());
-      a->setValue(a->getNumDimIds() - 1, b->getValue(t));
+      a->appendDimId(b->getValue(t));
     }
+    assert(a->getNumDimIds() == b->getNumDimIds() &&
+           "expected same number of dims");
   }
+
   {
     // Merge symbols: merge A's symbols into B first.
-    unsigned s = b->getNumDimIds();
+    unsigned s = 0;
     for (auto aSymValue : aSymValues) {
       unsigned loc;
       if (b->findId(aSymValue, &loc)) {
         assert(loc >= b->getNumDimIds() && loc < b->getNumDimAndSymbolIds() &&
                "A's symbol appears in B's non-symbol position");
-        b->swapId(s, loc);
+        b->swapId(s + b->getNumDimIds(), loc);
       } else {
-        b->addSymbolId(s - b->getNumDimIds());
-        b->setValue(s, aSymValue);
+        b->insertSymbolId(s, aSymValue);
       }
       s++;
     }
@@ -465,10 +466,12 @@ static void mergeAndAlignIds(unsigned offset, FlatAffineValueConstraints *a,
     for (unsigned t = a->getNumDimAndSymbolIds(),
                   e = b->getNumDimAndSymbolIds();
          t < e; t++) {
-      a->addSymbolId(a->getNumSymbolIds());
-      a->setValue(a->getNumDimAndSymbolIds() - 1, b->getValue(t));
+      a->appendSymbolId(b->getValue(t));
     }
+    assert(a->getNumDimAndSymbolIds() == b->getNumDimAndSymbolIds() &&
+           "expected same number of dims and symbols");
   }
+
   assert(areIdsAligned(*a, *b) && "IDs expected to be aligned");
 }
 
@@ -497,9 +500,7 @@ LogicalResult FlatAffineConstraints::composeMatchingMap(AffineMap other) {
   assert(flatExprs.size() == other.getNumResults());
 
   // Add dimensions corresponding to the map's results.
-  for (unsigned t = 0, e = other.getNumResults(); t < e; t++) {
-    addDimId(0);
-  }
+  insertDimId(/*pos=*/0, /*num=*/other.getNumResults());
 
   // We add one equality for each result connecting the result dim of the map to
   // the other identifiers.
@@ -570,14 +571,14 @@ void FlatAffineValueConstraints::addInductionVarOrTerminalSymbol(Value val) {
          "non-terminal symbol / loop IV expected");
   // Outer loop IVs could be used in forOp's bounds.
   if (auto loop = getForInductionVarOwner(val)) {
-    addDimId(getNumDimIds(), val);
+    appendDimId(val);
     if (failed(this->addAffineForOpDomain(loop)))
       LLVM_DEBUG(
           loop.emitWarning("failed to add domain info to constraint system"));
     return;
   }
   // Add top level symbol.
-  addSymbolId(getNumSymbolIds(), val);
+  appendSymbolId(val);
   // Check if the symbol is a constant.
   if (auto constOp = val.getDefiningOp<ConstantIndexOp>())
     addBound(BoundType::EQ, val, constOp.getValue());
@@ -1944,11 +1945,9 @@ LogicalResult FlatAffineConstraints::flattenAlignedMapAndMergeLocals(
   if (localCst.getNumLocalIds() > 0) {
     unsigned numLocalIds = getNumLocalIds();
     // Insert local dims of localCst at the beginning.
-    for (unsigned l = 0, e = localCst.getNumLocalIds(); l < e; ++l)
-      addLocalId(0);
+    insertLocalId(/*pos=*/0, /*num=*/localCst.getNumLocalIds());
     // Insert local dims of `this` at the end of localCst.
-    for (unsigned l = 0; l < numLocalIds; ++l)
-      localCst.addLocalId(localCst.getNumLocalIds());
+    localCst.appendLocalId(/*num=*/numLocalIds);
     // Dimensions of localCst and this constraint set match. Append localCst to
     // this constraint set.
     append(localCst);
@@ -2150,7 +2149,7 @@ void FlatAffineConstraints::addLocalFloorDiv(ArrayRef<int64_t> dividend,
   assert(dividend.size() == getNumCols() && "incorrect dividend size");
   assert(divisor > 0 && "positive divisor expected");
 
-  addLocalId(getNumLocalIds());
+  appendLocalId();
 
   // Add two constraints for this new identifier 'q'.
   SmallVector<int64_t, 8> bound(dividend.size() + 1);

diff  --git a/mlir/lib/Dialect/Linalg/Transforms/Hoisting.cpp b/mlir/lib/Dialect/Linalg/Transforms/Hoisting.cpp
index 3a41a68cb3ac..bcc047baa949 100644
--- a/mlir/lib/Dialect/Linalg/Transforms/Hoisting.cpp
+++ b/mlir/lib/Dialect/Linalg/Transforms/Hoisting.cpp
@@ -559,14 +559,11 @@ static FlatAffineValueConstraints
 initLoopIvsAndBounds(ArrayRef<Operation *> loops) {
   FlatAffineValueConstraints constraints;
   for (Operation *op : loops)
-    constraints.addDimId(constraints.getNumDimIds(),
-                         cast<scf::ForOp>(op).getInductionVar());
+    constraints.appendDimId(cast<scf::ForOp>(op).getInductionVar());
   for (Operation *op : loops)
-    constraints.addDimId(constraints.getNumDimIds(),
-                         cast<scf::ForOp>(op).lowerBound());
+    constraints.appendDimId(cast<scf::ForOp>(op).lowerBound());
   for (Operation *op : loops)
-    constraints.addDimId(constraints.getNumDimIds(),
-                         cast<scf::ForOp>(op).upperBound());
+    constraints.appendDimId(cast<scf::ForOp>(op).upperBound());
   unsigned numLoops = loops.size();
   for (unsigned ivIdx = 0, e = numLoops; ivIdx < e; ++ivIdx) {
     // iv - lb >= 0
@@ -628,7 +625,7 @@ foldUpperBoundsIntoConstraintsSet(FlatAffineValueConstraints &constraints,
           constraints.findId(v, &pos);
           return pos >= constraints.getNumDimIds();
         }
-        constraints.addDimId(constraints.getNumDimIds(), v);
+        constraints.appendDimId(v);
         return false;
       };
 

diff  --git a/mlir/lib/Dialect/SCF/Transforms/LoopSpecialization.cpp b/mlir/lib/Dialect/SCF/Transforms/LoopSpecialization.cpp
index 8b9a13557dca..dd8ae01be1db 100644
--- a/mlir/lib/Dialect/SCF/Transforms/LoopSpecialization.cpp
+++ b/mlir/lib/Dialect/SCF/Transforms/LoopSpecialization.cpp
@@ -186,7 +186,7 @@ static LogicalResult alignAndAddBound(FlatAffineValueConstraints &constraints,
   AffineMap alignedMap =
       alignAffineMapWithValues(map, operands, dims, syms, &newSyms);
   for (unsigned i = syms.size(); i < newSyms.size(); ++i)
-    constraints.addSymbolId(constraints.getNumSymbolIds(), newSyms[i]);
+    constraints.appendSymbolId(newSyms[i]);
   return constraints.addBound(type, pos, alignedMap);
 }
 
@@ -236,11 +236,9 @@ canonicalizeMinMaxOp(RewriterBase &rewriter, Operation *op, AffineMap map,
   unsigned numResults = map.getNumResults();
 
   // Add a few extra dimensions.
-  unsigned dimOp = constraints.addDimId();      // `op`
-  unsigned dimOpBound = constraints.addDimId(); // `op` lower/upper bound
-  unsigned resultDimStart = constraints.getNumDimIds();
-  for (unsigned i = 0; i < numResults; ++i)
-    constraints.addDimId();
+  unsigned dimOp = constraints.appendDimId();      // `op`
+  unsigned dimOpBound = constraints.appendDimId(); // `op` lower/upper bound
+  unsigned resultDimStart = constraints.appendDimId(/*num=*/numResults);
 
   // Add an inequality for each result expr_i of map:
   // isMin: op <= expr_i, !isMin: op >= expr_i
@@ -346,9 +344,7 @@ static LogicalResult rewritePeeledMinMaxOp(RewriterBase &rewriter,
                                            Value iv, Value ub, Value step,
                                            bool insideLoop) {
   FlatAffineValueConstraints constraints;
-  constraints.addDimId(0, iv);
-  constraints.addDimId(1, ub);
-  constraints.addDimId(2, step);
+  constraints.appendDimId({iv, ub, step});
   if (auto constUb = getConstantIntValue(ub))
     constraints.addBound(FlatAffineConstraints::EQ, 1, *constUb);
   if (auto constStep = getConstantIntValue(step))
@@ -443,9 +439,9 @@ mlir::scf::canonicalizeMinMaxOpInLoop(RewriterBase &rewriter, Operation *op,
     if (!stepInt)
       continue;
 
-    unsigned dimIv = constraints.addDimId(iv);
-    unsigned dimLb = constraints.addDimId(lb);
-    unsigned dimUb = constraints.addDimId(ub);
+    unsigned dimIv = constraints.appendDimId(iv);
+    unsigned dimLb = constraints.appendDimId(lb);
+    unsigned dimUb = constraints.appendDimId(ub);
 
     // If loop lower/upper bounds are constant: Add EQ constraint.
     Optional<int64_t> lbInt = getConstantIntValue(lb);


        


More information about the Mlir-commits mailing list