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

    <tr>
        <th>Summary</th>
        <td>
            `std::format` generates substantially more code than inlined `fmt::format`
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            libc++,
            format
      </td>
    </tr>

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

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

<pre>
    [Clang generates more than 2.5x the amount of assembly](https://godbolt.org/z/sv56Y1sMz) for the sample below when using `std::format`, as opposed to an inline `fmt::format`.

```cpp
#include <string>

#ifdef USE_LIBFMT
#include <fmt/format-inl.h>

namespace format = fmt;
#else
#include <format>

namespace format = std;
#endif

std::string f(int const x)
{
  return format::format("{}", x);
}
```

| Architecture | Options | `std::format` codegen (lines) | `fmt::format` codegen (lines) | Binary size delta |
|--------------|---------|-------------------------------|-------------------------------|--------------------|
| x86_64       |         | 2726                          | 1013 | std is 2.7x larger |
| x86_64       | -O3     | 3661 | 957                           | std is 3.8x larger |
| x86_64 | -Os     | 2632                          | 908 | std is 2.9x larger |
| armv8-a      |         | 2594 | 961                           | std is 2.7x larger |
| armv8-a      | -O3     | 2525                          | 941                           | std is 2.7x larger |
| armv8-a      | -Os     | 2429                          | 917                           | std is 2.6x larger |

Is this something that we can improve upon, or is are the respective libraries designed differently enough that this additional codegen is unavoidable?
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJysVU1v2zgQ_TX0ZWBDGlpfBx3ipAYKbNHD7h72VFDiSGJBkQJJuUl-_YKSk7hxkhaLJQiYpmbe4zxK84T3qjdENcsODHG0TgoTiCGy7G4j5jBYV7ffZbNprHyIUbdamB56MuREIA-jdQRhEAZwl91DGAjEaGcTwHYgvKex0Q8su2NYDiFMnvEbhkeGx97Kxuqws65neHxkePSnLP8n9V8eGVbQWbeAeTFOmqAhbX_Aj4EMzF6ZHlie-CAjGr_prBtFYHnC8BaEBztN1pOEYEEYUEYrQzGhG8OrhB1LbuLMk3W20xT_Ilem1bMkYPzWB6dMz_incyxy1Unq4O8_P3374_Ph-OWvq5RIhMeVZauM3g3P6UaM5CfREqyPgfE7WA52WGFIe7oGXA_8IcgixxOIkapbY59VWuuAjmGpTIDWGh_gnmEV44qYCOAozM7AE92FVljGl6I4sOIuLvB2TV0Ji7tLEc86Fbdw49pBBWrD7AjixtcpKGv8sn7zBqG1knoywLCM1-bju3COvr6-d6MPygj3AF49EkjSQcTd9VDbn8blxtXDq_GfI57Z4b7Mv-V7WEfcgIs1FpjDuyNGpEnKl4UPEpQH3BX3oIXrycEHJNuv_HnN8zxdFlVWvE92ScJ35fskK7x_qSHn-DFqlZQ_l1C9gS7ceCq34h2dsmolrvL090p4W6crkkudMMPsF4Xs_2_2Cxn3WP2CPf3N68Nd_po9ufnsIQzKg7cjhSE2hjCIAD8I2tgzx8nZE8E8WRO_desikFhaPYEjP1Eb1IlAq8YJp8iDpMVKJEjVdeTIBP0AZOzcDyv0QiekVLEFCP387SoPsxEnq6RoNDF-3Miay4pXYkN1WuwLzhPEcjPUTbeXMhEFpVhhwasuSfOsyjOxz4t9mYuNqjHBLMnSLC14gsUuqboiIc6bNsFC4p7tExqF0jutT2O0no3yfqY63SdpUm60aEj7sxlq1bQMD8uMDY8hPvXCxR1dHUG2zdx7tk-08sG_wAYVNNVvt7gX8_Rz44MwQQmtH1Yrjaqsfrr6lny7821mp-tXhqrCMDe71o4Mj_Eg55_t5Ox3aqMjLcV6hsdzvaca_w0AAP__nk8zBA">