diff --git a/mlir/lib/Transforms/Utils/LoopUtils.cpp b/mlir/lib/Transforms/Utils/LoopUtils.cpp --- a/mlir/lib/Transforms/Utils/LoopUtils.cpp +++ b/mlir/lib/Transforms/Utils/LoopUtils.cpp @@ -1052,6 +1052,8 @@ Optional mayBeConstantTripCount = getConstantTripCount(forOp); if (mayBeConstantTripCount.hasValue()) { uint64_t tripCount = mayBeConstantTripCount.getValue(); + if (tripCount == 0) + return success(); if (tripCount == 1) return promoteIfSingleIteration(forOp); return loopUnrollByFactor(forOp, tripCount); diff --git a/mlir/test/Dialect/Affine/unroll.mlir b/mlir/test/Dialect/Affine/unroll.mlir --- a/mlir/test/Dialect/Affine/unroll.mlir +++ b/mlir/test/Dialect/Affine/unroll.mlir @@ -641,3 +641,11 @@ // UNROLL-BY-4-NEXT: return %[[RES]] return %sum : f32 } + +// UNROLL-FULL: func @unroll_zero_trip_count_case +func @unroll_zero_trip_count_case() { + // CHECK-NEXT: affine.for %{{.*}} = 0 to 0 + affine.for %i = 0 to 0 { + } + return +}