@@ -1040,8 +1040,8 @@ def Vector_InsertStridedSliceOp :
1040
1040
PredOpTrait<"operand #0 and result have same element type",
1041
1041
TCresVTEtIsSameAsOpBase<0, 0>>,
1042
1042
AllTypesMatch<["dest", "res"]>]>,
1043
- Arguments<(ins AnyVector:$source, AnyVector:$dest, I64ArrayAttr:$offsets,
1044
- I64ArrayAttr:$strides )>,
1043
+ Arguments<(ins AnyVector:$source, AnyVector:$dest,
1044
+ Vector_StridedSliceAttr:$strided_slice )>,
1045
1045
Results<(outs AnyVector:$res)> {
1046
1046
let summary = "strided_slice operation";
1047
1047
let description = [{
@@ -1060,13 +1060,13 @@ def Vector_InsertStridedSliceOp :
1060
1060
1061
1061
```mlir
1062
1062
%2 = vector.insert_strided_slice %0, %1
1063
- {offsets = [0, 0, 2], strides = [1, 1]}:
1064
- vector<2x4xf32> into vector<16x4x8xf32>
1063
+ {offsets = [0, 0, 2], strides = [1, 1]}
1064
+ : vector<2x4xf32> into vector<16x4x8xf32>
1065
1065
```
1066
1066
}];
1067
1067
1068
1068
let assemblyFormat = [{
1069
- $source `,` $dest attr-dict `:` type($source) `into` type($dest)
1069
+ $source `,` $dest $strided_slice attr-dict `:` type($source) `into` type($dest)
1070
1070
}];
1071
1071
1072
1072
let builders = [
@@ -1081,10 +1081,13 @@ def Vector_InsertStridedSliceOp :
1081
1081
return ::llvm::cast<VectorType>(getDest().getType());
1082
1082
}
1083
1083
bool hasNonUnitStrides() {
1084
- return llvm::any_of(getStrides(), [](Attribute attr ) {
1085
- return ::llvm::cast<IntegerAttr>(attr).getInt() != 1;
1084
+ return llvm::any_of(getStrides(), [](int64_t stride ) {
1085
+ return stride != 1;
1086
1086
});
1087
1087
}
1088
+
1089
+ ArrayRef<int64_t> getOffsets() { return getStridedSlice().getOffsets(); }
1090
+ ArrayRef<int64_t> getStrides() { return getStridedSlice().getStrides(); }
1088
1091
}];
1089
1092
1090
1093
let hasFolder = 1;
@@ -1182,8 +1185,7 @@ def Vector_ExtractStridedSliceOp :
1182
1185
Vector_Op<"extract_strided_slice", [Pure,
1183
1186
PredOpTrait<"operand and result have same element type",
1184
1187
TCresVTEtIsSameAsOpBase<0, 0>>]>,
1185
- Arguments<(ins AnyVector:$vector, I64ArrayAttr:$offsets,
1186
- I64ArrayAttr:$sizes, I64ArrayAttr:$strides)>,
1188
+ Arguments<(ins AnyVector:$vector, Vector_StridedSliceAttr:$strided_slice)>,
1187
1189
Results<(outs AnyVector)> {
1188
1190
let summary = "extract_strided_slice operation";
1189
1191
let description = [{
@@ -1201,12 +1203,8 @@ def Vector_ExtractStridedSliceOp :
1201
1203
1202
1204
```mlir
1203
1205
%1 = vector.extract_strided_slice %0
1204
- {offsets = [0, 2], sizes = [2, 4], strides = [1, 1]}:
1205
- vector<4x8x16xf32> to vector<2x4x16xf32>
1206
-
1207
- // TODO: Evolve to a range form syntax similar to:
1208
- %1 = vector.extract_strided_slice %0[0:2:1][2:4:1]
1209
- vector<4x8x16xf32> to vector<2x4x16xf32>
1206
+ {offsets = [0, 2], sizes = [2, 4], strides = [1, 1]}
1207
+ : vector<4x8x16xf32> to vector<2x4x16xf32>
1210
1208
```
1211
1209
}];
1212
1210
let builders = [
@@ -1217,17 +1215,20 @@ def Vector_ExtractStridedSliceOp :
1217
1215
VectorType getSourceVectorType() {
1218
1216
return ::llvm::cast<VectorType>(getVector().getType());
1219
1217
}
1220
- void getOffsets(SmallVectorImpl<int64_t> &results);
1221
1218
bool hasNonUnitStrides() {
1222
- return llvm::any_of(getStrides(), [](Attribute attr ) {
1223
- return ::llvm::cast<IntegerAttr>(attr).getInt() != 1;
1219
+ return llvm::any_of(getStrides(), [](int64_t stride ) {
1220
+ return stride != 1;
1224
1221
});
1225
1222
}
1223
+
1224
+ ArrayRef<int64_t> getOffsets() { return getStridedSlice().getOffsets(); }
1225
+ ArrayRef<int64_t> getSizes() { return getStridedSlice().getSizes(); }
1226
+ ArrayRef<int64_t> getStrides() { return getStridedSlice().getStrides(); }
1226
1227
}];
1227
1228
let hasCanonicalizer = 1;
1228
1229
let hasFolder = 1;
1229
1230
let hasVerifier = 1;
1230
- let assemblyFormat = "$vector attr-dict `:` type($vector) `to` type(results)";
1231
+ let assemblyFormat = "$vector $strided_slice attr-dict `:` type($vector) `to` type(results)";
1231
1232
}
1232
1233
1233
1234
// TODO: Tighten semantics so that masks and inbounds can't be used
0 commit comments