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

    <tr>
        <th>Summary</th>
        <td>
            [SimplifyCFG] Assertion failed: IterCnt++ < 1000 && "Iterative simplification didn't converge!"
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            c,
            llvm:optimizations
      </td>
    </tr>

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

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

<pre>
    Reproducible:
clang -c -O3 1.c
cat 1.c
```c++
int a, c, d;
long volatile e;
static int f() {
  for (;;)
    for (int b = 0; b > -14; b--) {
      c = 0;
      for (; c <= 38; ++c) {
        int *g = &d;
        for (; a < 0; a = 0)
          ;
        ++*g &&e;
      }
 }
}
void h() { f(); }
```

The code fragment where assertion happens:
```c++
[llvm\lib\Transforms\Scalar\SimplifyCFGPass.cpp]

/// Call SimplifyCFG on all the blocks in the function,
/// iterating until no more changes are made.
static bool iterativelySimplifyCFG
 ......
 unsigned IterCnt = 0;
  (void)IterCnt;
  while (LocalChange) {
 assert(IterCnt++ < 1000 && "Iterative simplification didn't converge!");
 .....
``` 

The assertion statement was introduced by the following commit:

```
commit a9b0776a81e84d8042716863842fe1f8adf39cad
Author: Max Kazantsev <mkazantsev@azul.com>
Date:   Mon Oct 25 16:43:11 2021 +0700

 [SimplifyCFG] Sanity assert in iterativelySimplifyCFG
    We observe a hang within iterativelySimplifyCFG due to infinite
    loop execution. Currently, there is no limit to this loop, so
    in case of bug it just works forever. This patch adds an assert
    that will break it after 1000 iterations if it didn't converge.
```

</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJysVV-P2zYM_zTKC5FAlmMnechDzukNxVZ0WAvsmZbpWD1ZMiQ51-unHyQ7fy7t9jRDSESK_Jkif6TRe3UyRHtWPLHiuMAxdNbtX2rSVnY4vOCits3b_i8anG1GqWpNLD8wfmT8IDWaEywlLD_nkK3krMVwE1jJpyWZeIoraZUJgExUIONPw_JZr605wdlqDEoT0FXvAwYlIbq1TGyZ2AHbzGcArXUQtflTXGJ30V9Pol8NLD8CZ_lT2n6AZbZOwnL5ABcfebW-195elAyqaJMncbqc_AUSpKiZOJwSJBNl84D6Dhcj7hQmzjHcX2h6fgKYc5teIkomSnowYZvjLF53183Zqga6W1ovKU73ulpf6jiL6fdrRyBtQ9A6PPVkArx25AjQe3JBWQMdDgMZf2XMr-nAiietzz0rKq1qVlRfHRrfWtd7VlRfJGp0caP6Qav2rXr-7U_0fiWHgRXH-3iYeJ4WVKg13DmANRBVoSOotZUvHpRJUjsaGUNlonoEUYEcBmVOMJqgNBgLvXUEskNzIg_oCHpsaPWOpLW1-uJ6Jv12F8VcglV6ZmE0qQEb-BjIVZEqD8RjYhsrxMRutrg7e-1inzCx_cNK1FWK6z0Hp1Iwsb04p7QnkmWc85kuwIT4eAkZ_BSxkphq2KjGMLEJIK05k4tvyJgQE0Pur_RQYnikyo0WMVU0EQZjJUKaLdRA_TYVxWptX2Pmpe17FW78-RUZJxvAXc03mxK3GW3XzZavxSYrt2W-XYuWsnaLTZvvJDaT0yENOpYf4BN-h9_xB5rg6Rwz079cJLbm-GPUK2l7ln-YHI8Y4gQEgE_WwGcZQBSQlSw_rHOWH7IMBBdZbEm-4e_aBVjxdM-G4ghf0KjwNmcmUvI_iQMAfxPY2pM7EyDEesOrCt2_OkIzEgQLyrTKqEA3IG3tAPSd5BgrsoJqdI5M0G9xIofUxspHymsVkxsshE755BYtvL1BKQMSPYFtoR5PoAJ8G32AV-tefJxtdCa3gq_RfcAgO8Cm8YDmQs4rUOgwwKvSGmpH-BKRsA3kJqrON7TGg2rj2U_EfGTgJC6afd7s8h0uaJ-V2yzbbUq-WXR7KbZN2XLKSkSSkhd5jQWnMpO7pqmL9ULtBRc5X2cZ3wjON6saZZnnuMl5sctbLNiaU49Kr-L4Wll3WijvR9qXghe7hcaatE9fViFkapmKCZFGXX6wQ1C9-jHdKB4Wx4Xbx8NlPZ48W3OtfPA36KCCTt_pBw4drm3VotLURHL-792-GJ3edyEMaZan-XhSoRvr1BviOV1q-lsOzn4jGZh4TtnwTDynhPwTAAD___hvb_s">