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

    <tr>
        <th>Summary</th>
        <td>
            [Modules] Initializers of used variable templates evaluated in every importer
        </td>
    </tr>

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

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

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

<pre>
    Given the following two translation units:

```cpp
export module a;

#define REPEAT8(x) \
        (x), \
        (x), \
        (x), \
        (x), \
        (x), \
        (x), \
        (x), \
        (x)


unsigned a() {
        unsigned x = 0;
        REPEAT8(REPEAT8(REPEAT8(REPEAT8(REPEAT8(REPEAT8(++x))))));
        return x;
}

template<typename>
unsigned aa = a();

void aaa() {
        aa<int>;
}
```

```cpp
export module b;

import a;
```

And compiled with

```shell
clang++ -std=c++20 -x c++-module --precompile -c a.cpp -o a.pcm
clang++ -std=c++20 -fmodule-file=a=a.pcm -x c++-module -c b.cpp
```

Causes the compilation of b.cpp to take longer than expected, especially if optimizations are turned on. Passing -ftime-trace shows that most of the non-optimizer time is spent in EvaluateAsInitializer on `aa`. If optimizations are turned on, it then spends a bunch of extra time compiling `module b` for optimizations, primarily SROAPass, but that is possibly just a duplicate of https://github.com/llvm/llvm-project/issues/60996
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzMVd2uozYQfhrnZkTkmJ-ECy5ykpNqL6qutn2BwQzBW2Mj2-SnT18ZknNyTqOqq96sRAiMh_l-PLbRe3U0RBXLX1i-X-AYOuuqBk-q8cEaWtS2uVa_qBMZCB1Ba7W2Z2WOEM4WgkPjNQZlDYxGBc_SLeN7xu_3gs-XHIY5QpfBugC9bUZNgCx9-ZAv0oZaZQi-vX593f6xYWJzYaIElu_ueeUtxsTuJw8_Cpvuo5ncbgCZ2Eyy1m_yy7fBC7B0D_zBmvLdjR9_YuKFiZeZ58frAcBRGJ2By3tsvX9kHqgfNAZi6S5cBzLYE0tfP6vCiflN3KepPVkVM54pR2TpTpkQK_4T_95CP9JX9Sdw1U-jD-32rOrWNCBtPyhNDZxV6J5C-o60nmNSoznO_kLiQ8PSvZxfBYfkAreX5MYqSQZHNwBIJOBSDgMkFnA5yP6_lGznSkmrNLF0j_EXv30GJqFevtnzVO8OR09-WtYzq3kh23b-EoKFgH8SaGuO5CB0aIAuA8lATex58gNJhVpfQbVgh6B69ddUwwM6gthS1IA1S_gaNxpzhKQNqqckOJQEvrPnCI9x3nyIwJGLsSa5FYuoqidQHvxAJoAy8HpCPWKgrf9iVFCopzRrgBUckRV8CV_-lU2krkKEMlPVxgNCPRrZRQZ0CQ5n1NmUSJsV_K2zCg6tdR8BYsnBqR6d0lf4_dtv2yg4RusxzAqVh8F6r2p9he-jD4DQjINWEgNF3C6EYdo-xYGJw1GFbqyX0vZMHLQ-3f-SwdnvJAMTB-X9SJ6JQ8HLslg0VdqUaYkLqlbFep1nIuWbRVeluOJyhe06o00pc2xkVudZK9abnKcCy4WqBBcpF2It0nwjNksSKeeFWGerTGZS5Czj1KPSy0hgad1xMUFXxYpnfKGxJu2n80MIQ2eYBpkQ8Thx1US6Ho-eZVwrH_x7laCCng6eXydrPcv38DClProyemrghE5hrQnuu5AHujVBEzuCTuSuMK9xcovR6ep_uBlV_R0AAP__ZYcXYg">