<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/217895>217895</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            [MLIR][SparseTensor] `--sparsifier` produces invalid IR for `scf` nested in `affine.for`
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            mlir:sparsetensor,
            mlir
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          zxt5
      </td>
    </tr>
</table>

<pre>
    


## Reproducer

### small.mlir
```mlir
func.func @f(%c: i1) -> i64 {
  %z = arith.constant 0 : i64
  %one = arith.constant 1 : i64
  %r = affine.for %i = 0 to 4 iter_args(%acc = %z) -> i64 {
    %v = scf.if %c -> i64 {
      %s = arith.addi %acc, %one : i64
      scf.yield %s : i64
    } else {
 scf.yield %acc : i64
    }
    affine.yield %v : i64
  }
  return %r : i64
}
```

### To reproduce:

```
mlir-opt small.mlir -o /dev/null # parses and verifies
```
```
mlir-opt small.mlir --sparsifier -o /dev/null
```

### Crash:

```
small.mlir:4:8: error: 'affine.for' op expects region #0 to have 0 or 1 blocks
  %r = affine.for %i = 0 to 4 iter_args(%acc = %z) -> i64 {
       ^
small.mlir:4:8: note: see current operation: 
%2 = "affine.for"(%0) <{lowerBoundMap = affine_map<() -> (0)>, operandSegmentSizes = array<i32: 0, 0, 1>, step = 1 : index, upperBoundMap = affine_map<() -> (4)>}> ({
^bb0(%arg1: index, %arg2: i64):
 "cf.cond_br"(%arg0)[^bb1, ^bb2] <{operandSegmentSizes = array<i32: 1, 0, 0>}> : (i1) -> ()
^bb1:  // pred: ^bb0
  %3 = "arith.addi"(%arg2, %1) <{overflowFlags = #arith.overflow<none>}> : (i64, i64) -> i64
 "cf.br"(%3)[^bb3] : (i64) -> ()
^bb2:  // pred: ^bb0
 "cf.br"(%arg2)[^bb3] : (i64) -> ()
^bb3(%4: i64):  // 2 preds: ^bb1, ^bb2
  "cf.br"()[^bb4] : () -> ()
^bb4:  // pred: ^bb3
 "affine.yield"(%4) : (i64) -> ()
}) : (i64) -> i64
```

### The ordering matters:
```
mlir-opt small.mlir --lower-affine --convert-scf-to-cf -o /dev/null   # fine
```
```
mlir-opt small.mlir --convert-scf-to-cf --lower-affine -o /dev/null   # same error
```


</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJy0VsFy4jgQ_Rpx6TIlSzaGA4cEQtVU7Vxm5p6S7bbRrpFckswk-fotyTI4CclsDpuiCEiv-71-arcQ1spWIW5Jfk_y_UIM7qjN9uXJ5YtS189bQu_ii3HCOPzA3uh6qNDMl_2OPYmuW546GXZWdHzF782gqqV_A5LRhrA1YXlF-B3IlLANJIQ_gFxlQIp7Qu8ACMtfgPA9CCPdcVlpZZ1QDiiEoFU2obTCW7j0Lc6MqKaRCpeNNn5NhjUKTkMG0qF5FKa1ozhRVWHXC7mpMGQ9B4ytmqVs_PfqFi4g7UylqGsJIwdhu2sVV8H-z2d9ltjVU_h8mxR7wM7iRPMKPGp_A4-fogMX7Pm1URFn0A1GTb5N--Pu5WjfNsAvDWbqDsKntpmhfS8kunezVoFEA2GHGs-EHdTQdeAz9cJYtCBUDWc0spFo3xL_KW1ifRIf-p7jsyJ2RtjjTfWz_uZ3GeF3a-8MGqP9AhBWXLuLsAJ0D_jUY-UsGGyl9nby0GxHcUagoA2kUHa6-sf-j13qTz9_-FC_0s4fFlhEqAZjUDnQPRrhpFahLu9OziINm9fIRhHUMxO-I8V9p3-judeDqr-LflbL40n0HuHxUSVhax9I-IN_BgKlqn9ie0LlfsoXnB4YI54J30nOvBjqseEtjYHW4UgUn3hV45NfH_r-C0qyqKTYx4XRP5I_lCWNVps2fcUwrrHp8fAJfMt4k6rGT6L6sbyaJEwbyvVj9qEs05DBf2Ik30f3_qMJ6cUEOtMcWnA9G6djiVMVQbt_DAg7QG-wDgFjfbH5-OWML1NqLp_FotPrceszmqbTvw-daG2M5mP0tEX4TmmF74V6y3bRuUvfXv2bWcdnvvHRrWuKm8Wyz4t9xzBW90USPsZmrxrgwsoCr70Qzw989Pu1hgt5NiP_gDn7sDwey5tP-UuV2Xhwn5RV7D-AxPn_4eQ_ImhTo5GqhZNwDo2NM_SPczqMjGQUDElSaXVG4xJbNYnTSdW8vyEg3BEe_-VL4Ub2NwJuk1lxwjjq39mwqLe83vCNWOA2LdYFZ8VqTRfHLRO8qdabjHJRrNd5lZUCm6bGvBCYF7VYyC2jbEXXLE3zPMvosknLPNtkrGnKmq1SRjKKJyG7ZdedT0tt2oW0dsAtS4v1Jl90osTOhp9ujMXBHq49dKhsnNC7aY_5SbMwW58rKYfWkox20jp7ze6k68JPwe9_fftB8j3J73-GfL_GfL4zV3R-t5IVhXjlW5DqLDpZw7cfEO6uFbVV4xEKrcMapPJrsxtkRReD6bZH5_rQL6GjW-mOQ7ms9Imwg5cW_yW90X9j5Qg7BBcsYYdoxHnL_g0AAP__fxDp5A">