func.func @stride_slice() {
  %c15 = arith.constant 15 : i32
  %c16 = arith.constant 16 : i32
  %0 = linalg.init_tensor [12, 15] : tensor<12x15xi32>
  %1 = linalg.generic {
      indexing_maps = [affine_map<(d0, d1) -> (d0, d1)>],
      iterator_types = ["parallel", "parallel"]}
      outs(%0 : tensor<12x15xi32>) {
    ^bb0(%b0 : i32):
      %2 = linalg.index 0 : index
      %3 = linalg.index 1 : index
      %4 = arith.index_cast %2 : index to i32
      %5 = arith.index_cast %3 : index to i32
      %6 = arith.muli %c15, %4 : i32
      %7 = arith.addi %6, %5 : i32
      linalg.yield %7 : i32
    } -> tensor<12x15xi32>
  %2 = linalg.init_tensor [14, 16] : tensor<14x16xi32>
  %3 = linalg.generic {
      indexing_maps = [affine_map<(d0, d1) -> (d0, d1)>],
      iterator_types = ["parallel", "parallel"]}
      outs(%2 : tensor<14x16xi32>) {
    ^bb0(%b0 : i32):
      %4 = linalg.index 0 : index
      %5 = linalg.index 1 : index
      %6 = arith.index_cast %4 : index to i32
      %7 = arith.index_cast %5 : index to i32
      %8 = arith.muli %c16, %6 : i32
      %9 = arith.addi %8, %7 : i32
      linalg.yield %9 : i32
    } -> tensor<14x16xi32>
  %4 = tensor.extract_slice %1[2, 3] [3, 3] [2, 3] : tensor<12x15xi32> to tensor<3x3xi32>
  %5 = tensor.extract_slice %3[3, 2] [3, 3] [3, 2] : tensor<14x16xi32> to tensor<3x3xi32>
  %6 = linalg.init_tensor [3, 3] : tensor<3x3xi32>
  %7 = linalg.generic {
      indexing_maps = [affine_map<(d0, d1) -> (d0, d1)>, affine_map<(d0, d1) -> (d0, d1)>,
                       affine_map<(d0, d1) -> (d0, d1)>],
      iterator_types = ["parallel", "parallel"]}
      ins(%4, %5 : tensor<3x3xi32>, tensor<3x3xi32>)
      outs(%6 : tensor<3x3xi32>) {
    ^bb0(%b0 : i32, %b1 : i32, %b2: i32):
      %8 = arith.addi %b0, %b1 : i32
      linalg.yield %8 : i32
    } -> tensor<3x3xi32>
  %8 = arith.constant dense<42> : tensor<10x12xi32>
  %9 = tensor.insert_slice %7 into %8[1, 2] [3, 3] [2, 3] : tensor<3x3xi32> into tensor<10x12xi32>
  check.expect_eq_const(%9, dense<[
    [42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42],
    [42, 42, 83, 42, 42, 88, 42, 42, 93, 42, 42, 42],
    [42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42],
    [42, 42, 161, 42, 42, 166, 42, 42, 171, 42, 42, 42],
    [42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42],
    [42, 42, 239, 42, 42, 244, 42, 42, 249, 42, 42, 42],
    [42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42],
    [42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42],
    [42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42],
    [42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42]]> : tensor<10x12xi32>) : tensor<10x12xi32>
  return
}

#map = affine_map<(d0) -> (d0)>
func.func @issue_8825() {
  %c0 = arith.constant 0 : index
  %c0_i64 = arith.constant 0 : i64
  %c3_i64 = arith.constant 3 : i64
  %c2_i64 = arith.constant 2 : i64
  %arg0 = arith.constant dense<[0.0, 1.0, 2.0, 3.0]> : tensor<4xf32>
  %0 = tensor.dim %arg0, %c0 : tensor<4xf32>
  %1 = arith.index_cast %0 : index to i64
  %2 = arith.addi %c2_i64, %1 : i64
  %3 = arith.cmpi sge, %c2_i64, %c0_i64 : i64
  %4 = arith.select %3, %c2_i64, %2 : i64
  %5 = arith.cmpi slt, %4, %c0_i64 : i64
  %6 = arith.select %5, %c0_i64, %4 : i64
  %7 = arith.cmpi sgt, %6, %1 : i64
  %8 = arith.select %7, %1, %6 : i64
  %9 = arith.index_cast %8 : i64 to index
  %10 = arith.cmpi sge, %0, %9 : index
  %11 = arith.select %10, %0, %9 : index
  %12 = arith.subi %11, %9 : index
  %13 = tensor.extract_slice %arg0[%9] [%12] [1] : tensor<4xf32> to tensor<?xf32>
  %14 = linalg.init_tensor [%12] : tensor<?xf32>
  %16 = linalg.generic {indexing_maps = [#map, #map], iterator_types = ["parallel"]} ins(%13 : tensor<?xf32>) outs(%14 : tensor<?xf32>) {
    ^bb0(%arg1: f32, %arg2: f32):
      %16 = arith.sitofp %c3_i64 : i64 to f32
      %17 = arith.mulf %arg1, %16 : f32
      linalg.yield %17 : f32
    } -> tensor<?xf32>
  %17 = tensor.cast %16 : tensor<?xf32> to tensor<2xf32>
  check.expect_almost_eq_const(%17, dense<[6.0, 9.0]> : tensor<2xf32>) : tensor<2xf32>
  return
}
