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

    <tr>
        <th>Summary</th>
        <td>
            [C++20] [Modules] Record BMI Hash which is consistent if the interfaces doesn't change
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            clang:modules
      </td>
    </tr>

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

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

<pre>
    The motivating example comes from https://github.com/llvm/llvm-project/issues/70569.

For example,

```C++
// a.cppm
export module a;
export int a() {
    return 43;
}

// use.cc
import a;
int use() {
 return a();
}
```

After we change the implementation of `a()` from `return 43;` to `return 44;`, we can avoid recompiling use.cc to use.o since the interface doesn't change.
This is pretty helpful to improve the user's experience by avoiding unnecessary recompilations as much as possible.

</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJykk7uO4zoMhp-GbogTyIqvhYtcEJxTTHMwxbayTMda2JJXlDOTt1_4kpkJZrsFBMv4BX0_KZKK2VwtUQXpEaQ8dZOyv8yPqQQpIT1Hagqd89WnHtWuuVevHeHggrmpYOwV6V0NY0-o3UCMrXcDdiGMDPsDyAvIy9WEbqp32g0gL31_e2z_jN79JB1AXgzzRAzykos0K3cgziAO6_fi_MMC5OnrCWRiXSeQx3mt6uKJaqfHcVgleh-dDzi4ZuoJFeyPT7qxARXIAmSJkG9niIiewuQtJvuPG5CfnyJYvSamndarZIaF-Wky0yemb_wNvhn_weGR3VfDQxvI4xuh7pS9EoaO0MxPM5ANKhhn0bUImXhgM7FWBDLxlE0mMLivarKqIE8LXllUN2ca9KTdMJp-rvSa53xx_nPIxuotBhvIt0oTNo7YgszDFuJWy9fOMBrG0VMId-yoH9upn1FmGL27rZiJyYPMGel9JG9oxtf3NZIlAGtJE7Py94_AlqwZFeMw6W7eR8ds6v5hHTXVvin3pYqoirOyTESex0XUVXVBbZq3lGRaNDLPZZvGhZZZ0yZJ2mQiMpUUch_HohBxEqfFLpM6q_NSqCKTWZELSAQNyvS7uZ13zl-jpZGrPM7iIupVTT1vw6V7Za-wP6xNyNuE-WoZhHq6MiSiNxz4kxVM6JfZ3PpbCkjPCOnxZWOkZ_yftPMNHl_-w38Vd_jWGd3ND62dZcOBbEDTPteIvxUpmnxf_cXQzun-DgAA__9uIFNW">