mirror of
https://github.com/llvm/llvm-project.git
synced 2025-04-27 14:46:10 +00:00
Remove sentinel argument from dispatchIndexOpFoldResults.
Post clean-up after merger of kDynamicSize and kDynamicStrideOrOffset. Differential Revision: https://reviews.llvm.org/D139929
This commit is contained in:
parent
f52ca0926c
commit
ded75a282a
@ -39,20 +39,18 @@ getOffsetsSizesAndStrides(ArrayRef<Range> ranges);
|
||||
/// Helper function to dispatch an OpFoldResult into `staticVec` if:
|
||||
/// a) it is an IntegerAttr
|
||||
/// In other cases, the OpFoldResult is dispached to the `dynamicVec`.
|
||||
/// In such dynamic cases, a copy of the `sentinel` value is also pushed to
|
||||
/// In such dynamic cases, ShapedType::kDynamic is also pushed to
|
||||
/// `staticVec`. This is useful to extract mixed static and dynamic entries that
|
||||
/// come from an AttrSizedOperandSegments trait.
|
||||
void dispatchIndexOpFoldResult(OpFoldResult ofr,
|
||||
SmallVectorImpl<Value> &dynamicVec,
|
||||
SmallVectorImpl<int64_t> &staticVec,
|
||||
int64_t sentinel);
|
||||
SmallVectorImpl<int64_t> &staticVec);
|
||||
|
||||
/// Helper function to dispatch multiple OpFoldResults according to the behavior
|
||||
/// of `dispatchIndexOpFoldResult(OpFoldResult ofr` for a single OpFoldResult.
|
||||
void dispatchIndexOpFoldResults(ArrayRef<OpFoldResult> ofrs,
|
||||
SmallVectorImpl<Value> &dynamicVec,
|
||||
SmallVectorImpl<int64_t> &staticVec,
|
||||
int64_t sentinel);
|
||||
SmallVectorImpl<int64_t> &staticVec);
|
||||
|
||||
/// Extract int64_t values from the assumed ArrayAttr of IntegerAttr.
|
||||
SmallVector<int64_t, 4> extractFromI64ArrayAttr(Attribute attr);
|
||||
|
@ -1457,8 +1457,7 @@ void transform::TileToForeachThreadOp::build(
|
||||
ArrayAttr mapping) {
|
||||
SmallVector<int64_t> staticTileSizes;
|
||||
SmallVector<Value> dynamicTileSizes;
|
||||
dispatchIndexOpFoldResults(mixedTileSizes, dynamicTileSizes, staticTileSizes,
|
||||
ShapedType::kDynamic);
|
||||
dispatchIndexOpFoldResults(mixedTileSizes, dynamicTileSizes, staticTileSizes);
|
||||
// Call the default builder which sets up the proper operands segment sizes
|
||||
// attributes for multiple variadic operands. In the absence of this, horrible
|
||||
// bugs ensue.
|
||||
@ -1493,7 +1492,7 @@ void transform::TileToForeachThreadOp::build(
|
||||
SmallVector<int64_t> staticNumThreads;
|
||||
SmallVector<Value> dynamicNumThreads;
|
||||
dispatchIndexOpFoldResults(mixedNumThreads, dynamicNumThreads,
|
||||
staticNumThreads, ShapedType::kDynamic);
|
||||
staticNumThreads);
|
||||
// Call the default builder which sets up the proper operands segment sizes
|
||||
// attributes for multiple variadic operands. In the absence of this, horrible
|
||||
// bugs ensue.
|
||||
|
@ -278,8 +278,7 @@ struct LinalgOpPartialReductionInterface
|
||||
SmallVector<Value> dynamicDims;
|
||||
for (int64_t idx : llvm::seq<int64_t>(0, oldShape.size() + 1)) {
|
||||
if (idx == insertSplitDimension) {
|
||||
dispatchIndexOpFoldResults(sizes[idx], dynamicDims, newOutputShape,
|
||||
ShapedType::kDynamic);
|
||||
dispatchIndexOpFoldResults(sizes[idx], dynamicDims, newOutputShape);
|
||||
continue;
|
||||
}
|
||||
int64_t oldIdx = idx < insertSplitDimension ? idx : idx - 1;
|
||||
|
@ -1769,12 +1769,9 @@ void ReinterpretCastOp::build(OpBuilder &b, OperationState &result,
|
||||
ArrayRef<NamedAttribute> attrs) {
|
||||
SmallVector<int64_t> staticOffsets, staticSizes, staticStrides;
|
||||
SmallVector<Value> dynamicOffsets, dynamicSizes, dynamicStrides;
|
||||
dispatchIndexOpFoldResults(offset, dynamicOffsets, staticOffsets,
|
||||
ShapedType::kDynamic);
|
||||
dispatchIndexOpFoldResults(sizes, dynamicSizes, staticSizes,
|
||||
ShapedType::kDynamic);
|
||||
dispatchIndexOpFoldResults(strides, dynamicStrides, staticStrides,
|
||||
ShapedType::kDynamic);
|
||||
dispatchIndexOpFoldResults(offset, dynamicOffsets, staticOffsets);
|
||||
dispatchIndexOpFoldResults(sizes, dynamicSizes, staticSizes);
|
||||
dispatchIndexOpFoldResults(strides, dynamicStrides, staticStrides);
|
||||
build(b, result, resultType, source, dynamicOffsets, dynamicSizes,
|
||||
dynamicStrides, b.getDenseI64ArrayAttr(staticOffsets),
|
||||
b.getDenseI64ArrayAttr(staticSizes),
|
||||
@ -2577,12 +2574,9 @@ Type SubViewOp::inferResultType(MemRefType sourceMemRefType,
|
||||
ArrayRef<OpFoldResult> strides) {
|
||||
SmallVector<int64_t> staticOffsets, staticSizes, staticStrides;
|
||||
SmallVector<Value> dynamicOffsets, dynamicSizes, dynamicStrides;
|
||||
dispatchIndexOpFoldResults(offsets, dynamicOffsets, staticOffsets,
|
||||
ShapedType::kDynamic);
|
||||
dispatchIndexOpFoldResults(sizes, dynamicSizes, staticSizes,
|
||||
ShapedType::kDynamic);
|
||||
dispatchIndexOpFoldResults(strides, dynamicStrides, staticStrides,
|
||||
ShapedType::kDynamic);
|
||||
dispatchIndexOpFoldResults(offsets, dynamicOffsets, staticOffsets);
|
||||
dispatchIndexOpFoldResults(sizes, dynamicSizes, staticSizes);
|
||||
dispatchIndexOpFoldResults(strides, dynamicStrides, staticStrides);
|
||||
return SubViewOp::inferResultType(sourceMemRefType, staticOffsets,
|
||||
staticSizes, staticStrides);
|
||||
}
|
||||
@ -2627,12 +2621,9 @@ Type SubViewOp::inferRankReducedResultType(ArrayRef<int64_t> resultShape,
|
||||
ArrayRef<OpFoldResult> strides) {
|
||||
SmallVector<int64_t> staticOffsets, staticSizes, staticStrides;
|
||||
SmallVector<Value> dynamicOffsets, dynamicSizes, dynamicStrides;
|
||||
dispatchIndexOpFoldResults(offsets, dynamicOffsets, staticOffsets,
|
||||
ShapedType::kDynamic);
|
||||
dispatchIndexOpFoldResults(sizes, dynamicSizes, staticSizes,
|
||||
ShapedType::kDynamic);
|
||||
dispatchIndexOpFoldResults(strides, dynamicStrides, staticStrides,
|
||||
ShapedType::kDynamic);
|
||||
dispatchIndexOpFoldResults(offsets, dynamicOffsets, staticOffsets);
|
||||
dispatchIndexOpFoldResults(sizes, dynamicSizes, staticSizes);
|
||||
dispatchIndexOpFoldResults(strides, dynamicStrides, staticStrides);
|
||||
return SubViewOp::inferRankReducedResultType(
|
||||
resultShape, sourceRankedTensorType, staticOffsets, staticSizes,
|
||||
staticStrides);
|
||||
@ -2648,12 +2639,9 @@ void SubViewOp::build(OpBuilder &b, OperationState &result,
|
||||
ArrayRef<NamedAttribute> attrs) {
|
||||
SmallVector<int64_t> staticOffsets, staticSizes, staticStrides;
|
||||
SmallVector<Value> dynamicOffsets, dynamicSizes, dynamicStrides;
|
||||
dispatchIndexOpFoldResults(offsets, dynamicOffsets, staticOffsets,
|
||||
ShapedType::kDynamic);
|
||||
dispatchIndexOpFoldResults(sizes, dynamicSizes, staticSizes,
|
||||
ShapedType::kDynamic);
|
||||
dispatchIndexOpFoldResults(strides, dynamicStrides, staticStrides,
|
||||
ShapedType::kDynamic);
|
||||
dispatchIndexOpFoldResults(offsets, dynamicOffsets, staticOffsets);
|
||||
dispatchIndexOpFoldResults(sizes, dynamicSizes, staticSizes);
|
||||
dispatchIndexOpFoldResults(strides, dynamicStrides, staticStrides);
|
||||
auto sourceMemRefType = source.getType().cast<MemRefType>();
|
||||
// Structuring implementation this way avoids duplication between builders.
|
||||
if (!resultType) {
|
||||
|
@ -519,8 +519,7 @@ void EmptyOp::build(OpBuilder &builder, OperationState &result,
|
||||
Attribute encoding) {
|
||||
SmallVector<int64_t> staticShape;
|
||||
SmallVector<Value> dynamicSizes;
|
||||
dispatchIndexOpFoldResults(sizes, dynamicSizes, staticShape,
|
||||
ShapedType::kDynamic);
|
||||
dispatchIndexOpFoldResults(sizes, dynamicSizes, staticShape);
|
||||
build(builder, result, staticShape, elementType, dynamicSizes, encoding);
|
||||
}
|
||||
|
||||
@ -1575,12 +1574,9 @@ RankedTensorType ExtractSliceOp::inferResultType(
|
||||
ArrayRef<OpFoldResult> sizes, ArrayRef<OpFoldResult> strides) {
|
||||
SmallVector<int64_t> staticOffsets, staticSizes, staticStrides;
|
||||
SmallVector<Value> dynamicOffsets, dynamicSizes, dynamicStrides;
|
||||
dispatchIndexOpFoldResults(offsets, dynamicOffsets, staticOffsets,
|
||||
ShapedType::kDynamic);
|
||||
dispatchIndexOpFoldResults(sizes, dynamicSizes, staticSizes,
|
||||
ShapedType::kDynamic);
|
||||
dispatchIndexOpFoldResults(strides, dynamicStrides, staticStrides,
|
||||
ShapedType::kDynamic);
|
||||
dispatchIndexOpFoldResults(offsets, dynamicOffsets, staticOffsets);
|
||||
dispatchIndexOpFoldResults(sizes, dynamicSizes, staticSizes);
|
||||
dispatchIndexOpFoldResults(strides, dynamicStrides, staticStrides);
|
||||
return ExtractSliceOp::inferResultType(sourceShapedTensorType, staticOffsets,
|
||||
staticSizes, staticStrides);
|
||||
}
|
||||
@ -1623,12 +1619,9 @@ RankedTensorType ExtractSliceOp::inferCanonicalRankReducedResultType(
|
||||
ArrayRef<OpFoldResult> strides) {
|
||||
SmallVector<int64_t> staticOffsets, staticSizes, staticStrides;
|
||||
SmallVector<Value> dynamicOffsets, dynamicSizes, dynamicStrides;
|
||||
dispatchIndexOpFoldResults(offsets, dynamicOffsets, staticOffsets,
|
||||
ShapedType::kDynamic);
|
||||
dispatchIndexOpFoldResults(sizes, dynamicSizes, staticSizes,
|
||||
ShapedType::kDynamic);
|
||||
dispatchIndexOpFoldResults(strides, dynamicStrides, staticStrides,
|
||||
ShapedType::kDynamic);
|
||||
dispatchIndexOpFoldResults(offsets, dynamicOffsets, staticOffsets);
|
||||
dispatchIndexOpFoldResults(sizes, dynamicSizes, staticSizes);
|
||||
dispatchIndexOpFoldResults(strides, dynamicStrides, staticStrides);
|
||||
return ExtractSliceOp::inferCanonicalRankReducedResultType(
|
||||
desiredResultRank, sourceRankedTensorType, staticOffsets, staticSizes,
|
||||
staticStrides);
|
||||
@ -1644,12 +1637,9 @@ void ExtractSliceOp::build(OpBuilder &b, OperationState &result,
|
||||
ArrayRef<NamedAttribute> attrs) {
|
||||
SmallVector<int64_t> staticOffsets, staticSizes, staticStrides;
|
||||
SmallVector<Value> dynamicOffsets, dynamicSizes, dynamicStrides;
|
||||
dispatchIndexOpFoldResults(offsets, dynamicOffsets, staticOffsets,
|
||||
ShapedType::kDynamic);
|
||||
dispatchIndexOpFoldResults(sizes, dynamicSizes, staticSizes,
|
||||
ShapedType::kDynamic);
|
||||
dispatchIndexOpFoldResults(strides, dynamicStrides, staticStrides,
|
||||
ShapedType::kDynamic);
|
||||
dispatchIndexOpFoldResults(offsets, dynamicOffsets, staticOffsets);
|
||||
dispatchIndexOpFoldResults(sizes, dynamicSizes, staticSizes);
|
||||
dispatchIndexOpFoldResults(strides, dynamicStrides, staticStrides);
|
||||
auto sourceRankedTensorType = source.getType().cast<RankedTensorType>();
|
||||
// Structuring implementation this way avoids duplication between builders.
|
||||
if (!resultType) {
|
||||
@ -2081,12 +2071,9 @@ void InsertSliceOp::build(OpBuilder &b, OperationState &result, Value source,
|
||||
ArrayRef<NamedAttribute> attrs) {
|
||||
SmallVector<int64_t> staticOffsets, staticSizes, staticStrides;
|
||||
SmallVector<Value> dynamicOffsets, dynamicSizes, dynamicStrides;
|
||||
dispatchIndexOpFoldResults(offsets, dynamicOffsets, staticOffsets,
|
||||
ShapedType::kDynamic);
|
||||
dispatchIndexOpFoldResults(sizes, dynamicSizes, staticSizes,
|
||||
ShapedType::kDynamic);
|
||||
dispatchIndexOpFoldResults(strides, dynamicStrides, staticStrides,
|
||||
ShapedType::kDynamic);
|
||||
dispatchIndexOpFoldResults(offsets, dynamicOffsets, staticOffsets);
|
||||
dispatchIndexOpFoldResults(sizes, dynamicSizes, staticSizes);
|
||||
dispatchIndexOpFoldResults(strides, dynamicStrides, staticStrides);
|
||||
build(b, result, dest.getType(), source, dest, dynamicOffsets, dynamicSizes,
|
||||
dynamicStrides, b.getDenseI64ArrayAttr(staticOffsets),
|
||||
b.getDenseI64ArrayAttr(staticSizes),
|
||||
@ -2542,9 +2529,8 @@ void PadOp::build(OpBuilder &b, OperationState &result, Type resultType,
|
||||
// This will grow staticLow and staticHigh with 1 value. If the config is
|
||||
// dynamic (ie not a constant), dynamicLow and dynamicHigh will grow with 1
|
||||
// value as well.
|
||||
dispatchIndexOpFoldResults(low, dynamicLow, staticLow, ShapedType::kDynamic);
|
||||
dispatchIndexOpFoldResults(high, dynamicHigh, staticHigh,
|
||||
ShapedType::kDynamic);
|
||||
dispatchIndexOpFoldResults(low, dynamicLow, staticLow);
|
||||
dispatchIndexOpFoldResults(high, dynamicHigh, staticHigh);
|
||||
if (!resultType) {
|
||||
resultType = PadOp::inferResultType(sourceType, staticLow, staticHigh);
|
||||
}
|
||||
@ -2891,12 +2877,9 @@ void ParallelInsertSliceOp::build(OpBuilder &b, OperationState &result,
|
||||
ArrayRef<NamedAttribute> attrs) {
|
||||
SmallVector<int64_t> staticOffsets, staticSizes, staticStrides;
|
||||
SmallVector<Value> dynamicOffsets, dynamicSizes, dynamicStrides;
|
||||
dispatchIndexOpFoldResults(offsets, dynamicOffsets, staticOffsets,
|
||||
ShapedType::kDynamic);
|
||||
dispatchIndexOpFoldResults(sizes, dynamicSizes, staticSizes,
|
||||
ShapedType::kDynamic);
|
||||
dispatchIndexOpFoldResults(strides, dynamicStrides, staticStrides,
|
||||
ShapedType::kDynamic);
|
||||
dispatchIndexOpFoldResults(offsets, dynamicOffsets, staticOffsets);
|
||||
dispatchIndexOpFoldResults(sizes, dynamicSizes, staticSizes);
|
||||
dispatchIndexOpFoldResults(strides, dynamicStrides, staticStrides);
|
||||
build(b, result, {}, source, dest, dynamicOffsets, dynamicSizes,
|
||||
dynamicStrides, b.getDenseI64ArrayAttr(staticOffsets),
|
||||
b.getDenseI64ArrayAttr(staticSizes),
|
||||
@ -3063,8 +3046,7 @@ static SmallVector<int64_t> getStaticTilesImpl(OpTy op) {
|
||||
"applies to only pack or unpack operations");
|
||||
SmallVector<Value> dynamicTiles;
|
||||
SmallVector<int64_t> staticTiles;
|
||||
dispatchIndexOpFoldResults(op.getMixedTiles(), dynamicTiles, staticTiles,
|
||||
ShapedType::kDynamic);
|
||||
dispatchIndexOpFoldResults(op.getMixedTiles(), dynamicTiles, staticTiles);
|
||||
return staticTiles;
|
||||
}
|
||||
|
||||
@ -3211,8 +3193,7 @@ void PackOp::build(OpBuilder &builder, OperationState &state, Value source,
|
||||
"original dimensions to be tiled");
|
||||
SmallVector<int64_t> staticTileSizes;
|
||||
SmallVector<Value> dynamicTileSizes;
|
||||
dispatchIndexOpFoldResults(innerTiles, dynamicTileSizes, staticTileSizes,
|
||||
ShapedType::kDynamic);
|
||||
dispatchIndexOpFoldResults(innerTiles, dynamicTileSizes, staticTileSizes);
|
||||
build(builder, state, dest.getType(), source, dest,
|
||||
paddingValue ? paddingValue.value() : nullptr,
|
||||
outerDimsPerm.empty() ? nullptr
|
||||
@ -3420,8 +3401,7 @@ void UnPackOp::build(OpBuilder &builder, OperationState &state, Value source,
|
||||
"original dimensions to be tiled");
|
||||
SmallVector<int64_t> staticTileSizes;
|
||||
SmallVector<Value> dynamicTileSizes;
|
||||
dispatchIndexOpFoldResults(innerTiles, dynamicTileSizes, staticTileSizes,
|
||||
ShapedType::kDynamic);
|
||||
dispatchIndexOpFoldResults(innerTiles, dynamicTileSizes, staticTileSizes);
|
||||
build(builder, state, dest.getType(), source, dest,
|
||||
outerDimsPerm.empty() ? nullptr
|
||||
: builder.getDenseI64ArrayAttr(outerDimsPerm),
|
||||
|
@ -358,7 +358,7 @@ Operation *tensor::bubbleUpPadSlice(OpBuilder &b, tensor::PadOp padOp,
|
||||
// The shape of the result can be obtained from the sizes passed in.
|
||||
SmallVector<Value> dynDims;
|
||||
SmallVector<int64_t> shape;
|
||||
dispatchIndexOpFoldResults(sizes, dynDims, shape, ShapedType::kDynamic);
|
||||
dispatchIndexOpFoldResults(sizes, dynDims, shape);
|
||||
RankedTensorType resultType =
|
||||
RankedTensorType::get(shape, padOp.getResultType().getElementType());
|
||||
|
||||
|
@ -37,8 +37,7 @@ getOffsetsSizesAndStrides(ArrayRef<Range> ranges) {
|
||||
/// come from an AttrSizedOperandSegments trait.
|
||||
void dispatchIndexOpFoldResult(OpFoldResult ofr,
|
||||
SmallVectorImpl<Value> &dynamicVec,
|
||||
SmallVectorImpl<int64_t> &staticVec,
|
||||
int64_t sentinel) {
|
||||
SmallVectorImpl<int64_t> &staticVec) {
|
||||
auto v = ofr.dyn_cast<Value>();
|
||||
if (!v) {
|
||||
APInt apInt = ofr.get<Attribute>().cast<IntegerAttr>().getValue();
|
||||
@ -46,15 +45,14 @@ void dispatchIndexOpFoldResult(OpFoldResult ofr,
|
||||
return;
|
||||
}
|
||||
dynamicVec.push_back(v);
|
||||
staticVec.push_back(sentinel);
|
||||
staticVec.push_back(ShapedType::kDynamic);
|
||||
}
|
||||
|
||||
void dispatchIndexOpFoldResults(ArrayRef<OpFoldResult> ofrs,
|
||||
SmallVectorImpl<Value> &dynamicVec,
|
||||
SmallVectorImpl<int64_t> &staticVec,
|
||||
int64_t sentinel) {
|
||||
SmallVectorImpl<int64_t> &staticVec) {
|
||||
for (OpFoldResult ofr : ofrs)
|
||||
dispatchIndexOpFoldResult(ofr, dynamicVec, staticVec, sentinel);
|
||||
dispatchIndexOpFoldResult(ofr, dynamicVec, staticVec);
|
||||
}
|
||||
|
||||
/// Extract int64_t values from the assumed ArrayAttr of IntegerAttr.
|
||||
|
Loading…
x
Reference in New Issue
Block a user