Integrate llvm-project at d179421099314431a91b85c01977ba0086ffd6db (#14188)

Co-authored-by: Mahesh Ravishankar <ravishankarm@google.com>
diff --git a/compiler/src/iree/compiler/Codegen/Common/DecomposePackUnPackOps.cpp b/compiler/src/iree/compiler/Codegen/Common/DecomposePackUnPackOps.cpp
index df2f9d3..2ce5edf 100644
--- a/compiler/src/iree/compiler/Codegen/Common/DecomposePackUnPackOps.cpp
+++ b/compiler/src/iree/compiler/Codegen/Common/DecomposePackUnPackOps.cpp
@@ -87,7 +87,7 @@
 
     Location loc = op.getLoc();
     SmallVector<OpFoldResult> srcMixedSizes =
-        tensor::createDimValues(rewriter, loc, op.getInput());
+        tensor::getMixedSizes(rewriter, loc, op.getInput());
     SmallVector<OpFoldResult> mixedStride(inputTy.getRank(),
                                           rewriter.getIndexAttr(1));
     SmallVector<OpFoldResult> mixedOffsets(inputTy.getRank(),
@@ -99,7 +99,7 @@
         op.getInput(), mixedOffsets, srcMixedSizes, mixedStride);
 
     SmallVector<OpFoldResult> destMixedSizes =
-        tensor::createDimValues(rewriter, loc, op.getInit());
+        tensor::getMixedSizes(rewriter, loc, op.getInit());
     auto initTy = llvm::cast<ShapedType>(op.getInit().getType());
     destMixedSizes.resize(initTy.getRank() - numDropDims);
     auto dest = rewriter.create<tensor::EmptyOp>(loc, destMixedSizes,
diff --git a/compiler/src/iree/compiler/Codegen/Common/FlattenMemRefSubspanPass.cpp b/compiler/src/iree/compiler/Codegen/Common/FlattenMemRefSubspanPass.cpp
index 069d2ef..db1f8d6 100644
--- a/compiler/src/iree/compiler/Codegen/Common/FlattenMemRefSubspanPass.cpp
+++ b/compiler/src/iree/compiler/Codegen/Common/FlattenMemRefSubspanPass.cpp
@@ -119,25 +119,28 @@
 static Value createTotalElementCountValue(ShapedType type,
                                           ValueRange dynamicDims, Location loc,
                                           OpBuilder &builder) {
-  MLIRContext *context = builder.getContext();
-
   if (type.hasStaticShape()) {
     assert(dynamicDims.empty());
     return builder.create<arith::ConstantIndexOp>(loc, type.getNumElements());
   }
 
-  int dynamicDimIndex = 0;
-  SmallVector<Value> dims;
+  int64_t numSymbols = 0;
+  int64_t constantIntValue = 1;
+
+  SmallVector<OpFoldResult> dims;
   auto shape = type.getShape();
-  AffineExpr sizeExpr = getAffineConstantExpr(1, context);
   for (int i = 0; i < shape.size(); ++i) {
-    sizeExpr = sizeExpr * getAffineSymbolExpr(i, context);
     if (ShapedType::isDynamic(shape[i])) {
-      dims.push_back(dynamicDims[dynamicDimIndex++]);
+      dims.push_back(dynamicDims[numSymbols]);
+      numSymbols++;
     } else {
-      dims.push_back(builder.create<arith::ConstantIndexOp>(loc, shape[i]));
+      constantIntValue *= shape[i];
     }
   }
+  AffineExpr sizeExpr = builder.getAffineConstantExpr(constantIntValue);
+  for (int i = 0; i < numSymbols; i++) {
+    sizeExpr = sizeExpr * builder.getAffineSymbolExpr(i);
+  }
   return affine::makeComposedAffineApply(builder, loc, sizeExpr, dims);
 }
 
@@ -357,9 +360,10 @@
         makeStridedLinearLayoutMap(strides, 0, builder.getContext());
     // Dynamic strides/offset will create symbols. There should be none for the
     // static case.
+    SmallVector<OpFoldResult> opFoldIndicies = getAsOpFoldResult(indices);
     if (linearLayoutMap.getNumSymbols() == 0) {
       return affine::makeComposedAffineApply(builder, loc, linearLayoutMap,
-                                             indices);
+                                             opFoldIndicies);
     }
   }
 
diff --git a/compiler/src/iree/compiler/Codegen/Common/TileDispatchUsingInterface.cpp b/compiler/src/iree/compiler/Codegen/Common/TileDispatchUsingInterface.cpp
index 04c72c0..febe61f 100644
--- a/compiler/src/iree/compiler/Codegen/Common/TileDispatchUsingInterface.cpp
+++ b/compiler/src/iree/compiler/Codegen/Common/TileDispatchUsingInterface.cpp
@@ -67,9 +67,9 @@
   auto offsetMap = AffineMap::get(0, 3, {s0 + s1 * s2});
   auto stepMap = AffineMap::get(0, 2, {s0 * s1});
   Value distributeLB = affine::makeComposedAffineApply(
-      b, loc, offsetMap, ValueRange{lb, procId, step});
+      b, loc, offsetMap, ArrayRef<OpFoldResult>{lb, procId, step});
   Value distributeStep = affine::makeComposedAffineApply(
-      b, loc, stepMap, ValueRange{step, nprocs});
+      b, loc, stepMap, ArrayRef<OpFoldResult>{step, nprocs});
   return {distributeLB, distributeStep};
 }
 
diff --git a/compiler/src/iree/compiler/Dialect/Flow/Transforms/DetachElementwiseFromNamedOps.cpp b/compiler/src/iree/compiler/Dialect/Flow/Transforms/DetachElementwiseFromNamedOps.cpp
index f615e51..9e228d0 100644
--- a/compiler/src/iree/compiler/Dialect/Flow/Transforms/DetachElementwiseFromNamedOps.cpp
+++ b/compiler/src/iree/compiler/Dialect/Flow/Transforms/DetachElementwiseFromNamedOps.cpp
@@ -71,7 +71,7 @@
     // Create a zero tensor as the new output tensor operand to the Linalg
     // contraction op.
     SmallVector<OpFoldResult> mixedSizes =
-        tensor::createDimValues(rewriter, loc, outputOperand);
+        tensor::getMixedSizes(rewriter, loc, outputOperand);
     auto initOp =
         rewriter.create<tensor::EmptyOp>(loc, mixedSizes, elementType);
     Value zero = rewriter.create<arith::ConstantOp>(
diff --git a/compiler/src/iree/compiler/Dialect/Flow/Transforms/RegionOpUtils.cpp b/compiler/src/iree/compiler/Dialect/Flow/Transforms/RegionOpUtils.cpp
index 6c2cb2e..f55d4f6 100644
--- a/compiler/src/iree/compiler/Dialect/Flow/Transforms/RegionOpUtils.cpp
+++ b/compiler/src/iree/compiler/Dialect/Flow/Transforms/RegionOpUtils.cpp
@@ -62,7 +62,7 @@
 static SmallVector<Range> getLoopRangesFromValue(Value source, Location loc,
                                                  OpBuilder &builder) {
   SmallVector<OpFoldResult> dimValues =
-      tensor::createDimValues(builder, loc, source);
+      tensor::getMixedSizes(builder, loc, source);
   OpFoldResult zero = builder.getIndexAttr(0);
   OpFoldResult one = builder.getIndexAttr(1);
   return llvm::map_to_vector(dimValues, [&](OpFoldResult dimValue) {
diff --git a/compiler/src/iree/compiler/Dialect/Flow/Transforms/SetEncoding.cpp b/compiler/src/iree/compiler/Dialect/Flow/Transforms/SetEncoding.cpp
index 413e55b..f9808ae 100644
--- a/compiler/src/iree/compiler/Dialect/Flow/Transforms/SetEncoding.cpp
+++ b/compiler/src/iree/compiler/Dialect/Flow/Transforms/SetEncoding.cpp
@@ -252,7 +252,7 @@
     RankedTensorType encodingType = encodingOp.getResultType();
     Location loc = fillOp.getLoc();
     SmallVector<OpFoldResult> dimValues =
-        tensor::createDimValues(rewriter, loc, fillOp.getOutputs()[0]);
+        tensor::getMixedSizes(rewriter, loc, fillOp.getOutputs()[0]);
     auto newEmptyOp = rewriter.create<tensor::EmptyOp>(
         loc, dimValues, encodingType.getElementType(),
         encodingType.getEncoding());
diff --git a/compiler/src/iree/compiler/InputConversion/Common/QuantizedConvToConv.cpp b/compiler/src/iree/compiler/InputConversion/Common/QuantizedConvToConv.cpp
index 4416ce2..b9ebf68 100644
--- a/compiler/src/iree/compiler/InputConversion/Common/QuantizedConvToConv.cpp
+++ b/compiler/src/iree/compiler/InputConversion/Common/QuantizedConvToConv.cpp
@@ -31,7 +31,7 @@
 Value emptyCopy(ImplicitLocOpBuilder &rewriter, Value value) {
   Type eTy = getElementTypeOrSelf(value.getType());
   SmallVector<OpFoldResult> mixedSizes =
-      tensor::createDimValues(rewriter, rewriter.getLoc(), value);
+      tensor::getMixedSizes(rewriter, rewriter.getLoc(), value);
   return rewriter.create<tensor::EmptyOp>(mixedSizes, eTy);
 }
 
diff --git a/compiler/src/iree/compiler/InputConversion/StableHLO/StableHLOToLinalgExt.cpp b/compiler/src/iree/compiler/InputConversion/StableHLO/StableHLOToLinalgExt.cpp
index 316d0e6..9f7bf2e 100644
--- a/compiler/src/iree/compiler/InputConversion/StableHLO/StableHLOToLinalgExt.cpp
+++ b/compiler/src/iree/compiler/InputConversion/StableHLO/StableHLOToLinalgExt.cpp
@@ -313,7 +313,7 @@
     auto rank = realType.getRank();
 
     SmallVector<OpFoldResult> mixedSizes =
-        tensor::createDimValues(b, b.getLoc(), real);
+        tensor::getMixedSizes(b, b.getLoc(), real);
     Value emptyTensor =
         b.create<tensor::EmptyOp>(mixedSizes, realType.getElementType());
 
@@ -398,7 +398,7 @@
     SmallVector<OpFoldResult> offsets(ty.getRank(), b.getIndexAttr(0));
     SmallVector<OpFoldResult> strides(ty.getRank(), b.getIndexAttr(1));
     SmallVector<OpFoldResult> sizes =
-        tensor::createDimValues(b, b.getLoc(), adaptor.getOperand());
+        tensor::getMixedSizes(b, b.getLoc(), adaptor.getOperand());
     sizes.back() = b.getIndexAttr(shape.back());
     auto real = b.create<tensor::ExtractSliceOp>(ty, results[0], offsets, sizes,
                                                  strides);
@@ -427,7 +427,7 @@
 
     Location loc = op.getLoc();
     SmallVector<OpFoldResult> mixedSizes =
-        tensor::createDimValues(rewriter, loc, adaptor.getOperands()[0]);
+        tensor::getMixedSizes(rewriter, loc, adaptor.getOperands()[0]);
     Value emptyTensor =
         rewriter.create<tensor::EmptyOp>(loc, mixedSizes, ty.getElementType());
     rewriter.replaceOpWithNewOp<IREE::LinalgExt::ReverseOp>(
@@ -470,7 +470,7 @@
     // Create and initialize output tensors for LinalgExt TopK results
     // Define the output types based on the results of CHLO TopK
     SmallVector<OpFoldResult> mixedSizes =
-        tensor::createDimValues(rewriter, loc, adaptor.getOperand());
+        tensor::getMixedSizes(rewriter, loc, adaptor.getOperand());
     mixedSizes.back() = rewriter.getIndexAttr(adaptor.getK());
     Value emptyTensorOutputValues = rewriter.create<mlir::tensor::EmptyOp>(
         loc, mixedSizes, valueElementType);
diff --git a/llvm-external-projects/iree-dialects/lib/Dialect/LinalgExt/IR/LinalgExtOps.cpp b/llvm-external-projects/iree-dialects/lib/Dialect/LinalgExt/IR/LinalgExtOps.cpp
index dd074fc..8d73076 100644
--- a/llvm-external-projects/iree-dialects/lib/Dialect/LinalgExt/IR/LinalgExtOps.cpp
+++ b/llvm-external-projects/iree-dialects/lib/Dialect/LinalgExt/IR/LinalgExtOps.cpp
@@ -1811,7 +1811,7 @@
 }
 
 SmallVector<OpFoldResult> PackOp::getResultShape(OpBuilder &builder) {
-  return tensor::createDimValues(builder, getLoc(), getOutput());
+  return tensor::getMixedSizes(builder, getLoc(), getOutput());
 }
 
 ShapedType PackOp::getPackedType(ShapedType sourceType,
diff --git a/llvm-external-projects/iree-dialects/lib/Dialect/LinalgExt/Passes/DecomposeSoftmax.cpp b/llvm-external-projects/iree-dialects/lib/Dialect/LinalgExt/Passes/DecomposeSoftmax.cpp
index d625321..079281b 100644
--- a/llvm-external-projects/iree-dialects/lib/Dialect/LinalgExt/Passes/DecomposeSoftmax.cpp
+++ b/llvm-external-projects/iree-dialects/lib/Dialect/LinalgExt/Passes/DecomposeSoftmax.cpp
@@ -128,7 +128,7 @@
     Type elementType = inputType.getElementType();
     int64_t reductionDim = softmaxOp.getDimension();
     SmallVector<OpFoldResult> dims =
-        tensor::createDimValues(rewriter, loc, input);
+        tensor::getMixedSizes(rewriter, loc, input);
     Value outputNd = rewriter.create<tensor::EmptyOp>(loc, dims, elementType);
     dims.erase(dims.begin() + reductionDim);
     // Compute max along dim
diff --git a/llvm-external-projects/iree-dialects/lib/Dialect/LinalgExt/Passes/PadContractionToBlockSize.cpp b/llvm-external-projects/iree-dialects/lib/Dialect/LinalgExt/Passes/PadContractionToBlockSize.cpp
index 8babf93..77523db 100644
--- a/llvm-external-projects/iree-dialects/lib/Dialect/LinalgExt/Passes/PadContractionToBlockSize.cpp
+++ b/llvm-external-projects/iree-dialects/lib/Dialect/LinalgExt/Passes/PadContractionToBlockSize.cpp
@@ -23,7 +23,7 @@
 static Operation *sliceTensor(Location loc, Value expanded, Value original,
                               OpBuilder &builder) {
   SmallVector<OpFoldResult> sizes =
-      tensor::createDimValues(builder, loc, original);
+      tensor::getMixedSizes(builder, loc, original);
   SmallVector<OpFoldResult> offsets(sizes.size(), builder.getI64IntegerAttr(0));
   SmallVector<OpFoldResult> strides(sizes.size(), builder.getI64IntegerAttr(1));
   return builder.create<tensor::ExtractSliceOp>(loc, expanded, offsets, sizes,
diff --git a/llvm-external-projects/iree-dialects/lib/Dialect/LinalgExt/Passes/TileAndDecomposeAttention.cpp b/llvm-external-projects/iree-dialects/lib/Dialect/LinalgExt/Passes/TileAndDecomposeAttention.cpp
index 6c8862b..c1c0094 100644
--- a/llvm-external-projects/iree-dialects/lib/Dialect/LinalgExt/Passes/TileAndDecomposeAttention.cpp
+++ b/llvm-external-projects/iree-dialects/lib/Dialect/LinalgExt/Passes/TileAndDecomposeAttention.cpp
@@ -278,7 +278,7 @@
   Type elementType = queryType.getElementType();
   ArrayRef<int64_t> queryShape = queryType.getShape();
   SmallVector<OpFoldResult> queryDimValues =
-      tensor::createDimValues(rewriter, loc, query);
+      tensor::getMixedSizes(rewriter, loc, query);
   OpFoldResult headDimension = queryDimValues[2];
   OpFoldResult sequenceTileLength = queryDimValues[1];
   OpFoldResult batchTileLength = queryDimValues[0];
@@ -286,7 +286,7 @@
   Value key = attnOp.getKey();
   Value value = attnOp.getValue();
   SmallVector<OpFoldResult> keyDimValues =
-      tensor::createDimValues(rewriter, loc, key);
+      tensor::getMixedSizes(rewriter, loc, key);
   OpFoldResult sequenceLength = keyDimValues[1];
 
   // Construct first loop
diff --git a/llvm-external-projects/iree-dialects/lib/Dialect/LinalgExt/Passes/TileAndDecomposeWinogradPass.cpp b/llvm-external-projects/iree-dialects/lib/Dialect/LinalgExt/Passes/TileAndDecomposeWinogradPass.cpp
index e1581b4..52d197a 100644
--- a/llvm-external-projects/iree-dialects/lib/Dialect/LinalgExt/Passes/TileAndDecomposeWinogradPass.cpp
+++ b/llvm-external-projects/iree-dialects/lib/Dialect/LinalgExt/Passes/TileAndDecomposeWinogradPass.cpp
@@ -36,7 +36,7 @@
   Value zero = builder.create<arith::ConstantIndexOp>(loc, 0);
   Value one = builder.create<arith::ConstantIndexOp>(loc, 1);
   SmallVector<OpFoldResult> dimValues =
-      tensor::createDimValues(builder, loc, tensor);
+      tensor::getMixedSizes(builder, loc, tensor);
   for (int i = numImageDims; i < dimValues.size(); i++) {
     lbs.push_back(zero);
     ubs.push_back(getValueOrCreateConstantIndexOp(builder, loc, dimValues[i]));
diff --git a/third_party/llvm-project b/third_party/llvm-project
index 88f07a3..d179421 160000
--- a/third_party/llvm-project
+++ b/third_party/llvm-project
@@ -1 +1 @@
-Subproject commit 88f07a311947f88de82ad2de9b2d6a26eba21343
+Subproject commit d179421099314431a91b85c01977ba0086ffd6db