@@ -2621,6 +2621,19 @@ Type SubViewOp::inferResultType(MemRefType sourceMemRefType,
2621
2621
dispatchIndexOpFoldResults (offsets, dynamicOffsets, staticOffsets);
2622
2622
dispatchIndexOpFoldResults (sizes, dynamicSizes, staticSizes);
2623
2623
dispatchIndexOpFoldResults (strides, dynamicStrides, staticStrides);
2624
+
2625
+ // Double-check the offsets, sizes, and strides after constant folding.
2626
+ // This allows throwing a more informative assertion message than
2627
+ // what would be thrown at a later point.
2628
+ for (int64_t offset : staticOffsets) {
2629
+ if (!ShapedType::isDynamic (offset))
2630
+ assert (offset >= 0 && " expected subview offsets to be non-negative" );
2631
+ }
2632
+ for (int64_t size : staticSizes) {
2633
+ if (!ShapedType::isDynamic (size))
2634
+ assert (size >= 0 && " expected subview sizes to be non-negative" );
2635
+ }
2636
+
2624
2637
return SubViewOp::inferResultType (sourceMemRefType, staticOffsets,
2625
2638
staticSizes, staticStrides);
2626
2639
}
@@ -2843,8 +2856,6 @@ static LogicalResult produceSubViewErrorMsg(SliceVerificationResult result,
2843
2856
}
2844
2857
2845
2858
LogicalResult SubViewOp::verify () {
2846
- llvm::outs () << " SubViewOp::verify\n " ;
2847
-
2848
2859
for (int64_t offset : getStaticOffsets ()) {
2849
2860
if (offset < 0 && !ShapedType::isDynamic (offset))
2850
2861
return emitError (" expected subview offsets to be non-negative, but got " )
@@ -3105,20 +3116,6 @@ struct SubViewReturnTypeCanonicalizer {
3105
3116
MemRefType operator ()(SubViewOp op, ArrayRef<OpFoldResult> mixedOffsets,
3106
3117
ArrayRef<OpFoldResult> mixedSizes,
3107
3118
ArrayRef<OpFoldResult> mixedStrides) {
3108
- SmallVector<int64_t > staticOffsets, staticSizes, staticStrides;
3109
- SmallVector<Value> dynamicOffsets, dynamicSizes, dynamicStrides;
3110
- dispatchIndexOpFoldResults (mixedOffsets, dynamicOffsets, staticOffsets);
3111
- dispatchIndexOpFoldResults (mixedSizes, dynamicSizes, staticSizes);
3112
- dispatchIndexOpFoldResults (mixedStrides, dynamicStrides, staticStrides);
3113
-
3114
- for (int64_t size : staticSizes) {
3115
- if (size < 0 && !ShapedType::isDynamic (size)) {
3116
- llvm::dbgs () << " expected subview sizes to be non-negative, but got "
3117
- << size << " \n " ;
3118
- return {};
3119
- }
3120
- }
3121
-
3122
3119
// Infer a memref type without taking into account any rank reductions.
3123
3120
MemRefType nonReducedType = cast<MemRefType>(SubViewOp::inferResultType (
3124
3121
op.getSourceType (), mixedOffsets, mixedSizes, mixedStrides));
0 commit comments