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