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

    <tr>
        <th>Summary</th>
        <td>
            [CF][Canonicalizer] infinite loop trying to simplify control flow
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            new issue
      </td>
    </tr>

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

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

<pre>
    The following test case will result in a compile-time infinite loop if you run `mlir-opt -canonicalizer`

```
module {
  func.func @infloop_() {
    %false = arith.constant false
    cf.cond_br %false, ^bb1, ^bb2
  ^bb1:  // 2 preds: ^bb0, ^bb2
    cf.br ^bb2
  ^bb2:  // 2 preds: ^bb0, ^bb1
    cf.br ^bb1
 }
}
```
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJyMUtGumzAM_ZrwYhWFlEB54KH3dnzB3q9CcEomk6Ak3Kr7-incrtO6l0mWbR3bB3J0VIz26hB7Jt-YvBRqS7MPfYjap7QoR3gvRj_d--8zgvFE_mbdFRLGBFpFhJslgoBxowTWgQLtl9USHpJdEKwz1tmEQN6vYA3c_QZhc8AavpANB78mOGjlvLNakf2JgTWc8XOOhj-Cnxc_bYTA2jfGzwBmc7rMCVjNrTOZ_YOJExPdcweACWkURQR2vIAKNs2l9i4m5RLsg8eeNhmfPsbwPGHiHZj8No7VsxP79gM85lYMTAwgYA04xQztQ_5ysfNn6hcS8X8k1b8kO8TaS9boK_9Wqpj649QdO1VgX7XyJFrZNnUx9zhVdWN0LSVWqBpulFLjNI5KVIpLYwrbCy4k76qOd7LhdamFaZranFCPapqEZjXHRVkqiT6X0odrYWPcsK9k19bHgtSIFHcXCeHwBvuUCZFNFfp8dBi3a2Q1JxtT_EOTbKLdfu8Dk5dc_3KDvLyYKIX77kAP0S4rWXMH7V0KnsCQvxVboH5Oac1ifql7tWnexlL7hYkhf_dRDmvwP1AnJob9byMTw-M5n734FQAA___CCfFq">