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

    <tr>
        <th>Summary</th>
        <td>
            clang-15 compile time regression: 30 seconds -> over 40 minutes
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
      </td>
    </tr>

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

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

<pre>
    During upgrading an internal code base to clang-15, I noticed to our "VM" (essentially a computed-goto based interpreter loop) is taking over 40 minutes to compile in clang-15 (I do not know the exact time, I ran out of patience). With clang-14 it used to take between 30 and 60 seconds.

While I cannot share the original source code, https://godbolt.org/z/4chMrr99f contains a simplified repro.

Looking at the `perf record` results for the first 5 minutes (I ran out of patience to record a longer time slice), all time is spent in a single function:

```
  99.84%  clang    libLLVM-15.so      [.] llvm::GenericCycleInfoCompute<llvm::GenericSSAContext<llvm::MachineFunction> >::run
```

In particular in a single loop consisting of only 4 instructions

```
  0.00 │ 440:┌─→mov    %rax,%r15
 88.51 │     │  mov    (%rax),%rax
  0.03 │     ├──test   %rax,%rax
  8.72 │     └──jne    440
  ```

Not sure what this loop does on a logical level, but it seems like it's following a link list until it finds the end of that list marked by a nullptr.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJx9VF1z2yoQ_TXyy040CH3EPOgh12k6nknuS2faZyytJBoMGkBO0l9_F2QnTZpejYwXAcvZs3v2YPuX9nZxyoywzKOTfbSkAWUCOiM1dLZHOEiPECx0WprxqqgzvoM9GBtUh31csIuDjPPvDzSQsUXv0QQltX4BST6O8xKwvxot7Y3O-vWC2SGNoK2dMy5AeQjyMSKwJ_pcMTgqQwd9upucKI108BVGvGkPvY1I4NHYJwgTAj7LLkBQR1xhOgrHLgHsALMMCk1HCyKHHypMF1cVqACLX4MhDBQyhidEAyUjOnpoGHjsrOl9nrHbjN2s448pQtpDJ03E4CfpMIGwTo0q8ueJmg4TjRHOFMLss_Im43f0jrY_WB1y60aa_aJf1U0Pzgkx0AkTpDKe-PPqOGs1KILncHb2HYR7axNlMqSLs4bN6Aba2FnX04wsv-jgYbAu7RiU8wHqV24TiZ-QFKlYvRAEbc1IKYmsgtcqURjjoQyvHyl3fqacx_xExGYkYobFdEFZEwP-DTKhOr9pCiBEvq0yXsOaD6BHq8P9_fcHynLuLaQnq__Js_oWtD4do8fy5isadKrbvXQa92awu7XQsnL3x55v3252xCg-h3erD7KblMG7V6BfgH7rmlvMp3jXcW-IKUcKWLR076KO5RzT55UPqZgHsIaEQEVmfHBLusn_LyEsZwyyLzwTVbblUFUsQjrPdxeDRWPbZIIf7SkxxGsnnykv0SCZrt6227wufvOWdr7NXs9uL8fF2QPZb3jKzz2I92iSQVUVPqJ587XNr_lffFV_-vppMO6IDJzPf5qNf6P6FhLf05SEQOWY0tBbqnBrUgWPqiNBajyhjqV7oHIn1XvEI21WpHkVMn4dhaK1fUqaou_mkQaKZ6F-puOBQVEXWDsNNQZKbohXpj1H6R5JpIfY9Myi9RxcvsG2aBp-3TSsEpu-LXtRCrkJKmhsXzvZpbslLTkcSbR-FU7sQOfWA1exPj_0xs3idPuhrVBnWw45-aRJqvX174p6x0_sKMo75f2CnoyagFWbqRV1z5BhXVSsrMRWVpwVdTE0XTmIqhqKjZYH1L4lEZIGN6rljHMmmOAlv6Z2iqzBomtkXdQV6wuRVQyPUuk8Xhwb3Ma1CcNhGT0tRr7826KkcEeDePEvlzBZ157sSJeO6ImmTcLcJsD_AU8_DYM">