[libc++] Add basic constant folding for std::format (#107197) ``` ------------------------------------------------------------------- Benchmark old new ------------------------------------------------------------------- BM_format_string<char>/1 42.1 ns 7.67 ns BM_format_string<char>/2 22.3 ns 3.84 ns BM_format_string<char>/4 10.6 ns 1.92 ns BM_format_string<char>/8 5.31 ns 0.815 ns BM_format_string<char>/16 2.79 ns 0.480 ns BM_format_string<char>/32 1.63 ns 0.550 ns BM_format_string<char>/64 0.782 ns 0.276 ns BM_format_string<char>/128 0.397 ns 0.145 ns BM_format_string<char>/256 0.211 ns 0.066 ns BM_format_string<char>/512 0.154 ns 0.035 ns BM_format_string<char>/1024 0.146 ns 0.021 ns BM_format_string<char>/2048 0.125 ns 0.033 ns BM_format_string<char>/4096 0.097 ns 0.016 ns BM_format_string<char>/8192 0.077 ns 0.012 ns BM_format_string<char>/16384 0.066 ns 0.010 ns BM_format_string<char>/32768 0.062 ns 0.016 ns BM_format_string<char>/65536 0.062 ns 0.016 ns BM_format_string<char>/131072 0.443 ns 0.015 ns BM_format_string<char>/262144 0.629 ns 0.017 ns BM_format_string<char>/524288 0.715 ns 0.020 ns BM_format_string<char>/1048576 0.757 ns 0.020 ns BM_format_string<wchar_t>/1 38.8 ns 34.0 ns BM_format_string<wchar_t>/2 19.4 ns 16.9 ns BM_format_string<wchar_t>/4 9.88 ns 8.45 ns BM_format_string<wchar_t>/8 6.30 ns 6.47 ns BM_format_string<wchar_t>/16 3.11 ns 3.21 ns BM_format_string<wchar_t>/32 1.60 ns 1.63 ns BM_format_string<wchar_t>/64 0.899 ns 0.925 ns BM_format_string<wchar_t>/128 0.676 ns 0.693 ns BM_format_string<wchar_t>/256 0.658 ns 0.685 ns BM_format_string<wchar_t>/512 0.556 ns 0.531 ns BM_format_string<wchar_t>/1024 0.428 ns 0.402 ns BM_format_string<wchar_t>/2048 0.328 ns 0.319 ns BM_format_string<wchar_t>/4096 0.276 ns 0.274 ns BM_format_string<wchar_t>/8192 0.252 ns 0.251 ns BM_format_string<wchar_t>/16384 0.248 ns 0.246 ns BM_format_string<wchar_t>/32768 0.229 ns 0.232 ns BM_format_string<wchar_t>/65536 0.248 ns 0.246 ns BM_format_string<wchar_t>/131072 0.250 ns 0.240 ns BM_format_string<wchar_t>/262144 3.03 ns 3.03 ns BM_format_string<wchar_t>/524288 3.14 ns 3.15 ns BM_format_string<wchar_t>/1048576 3.60 ns 3.61 ns BM_string_without_formatting<char> 32.2 ns 0.470 ns BM_string_without_formatting<wchar_t> 38.8 ns 10.2 ns ```
Welcome to the LLVM project!
This repository contains the source code for LLVM, a toolkit for the construction of highly optimized compilers, optimizers, and run-time environments.
The LLVM project has multiple components. The core of the project is itself called “LLVM”. This contains all of the tools, libraries, and header files needed to process intermediate representations and convert them into object files. Tools include an assembler, disassembler, bitcode analyzer, and bitcode optimizer.
C-like languages use the Clang frontend. This component compiles C, C++, Objective-C, and Objective-C++ code into LLVM bitcode -- and from there into object files, using LLVM.
Other components include: the libc++ C++ standard library, the LLD linker, and more.
Consult the Getting Started with LLVM page for information on building and running LLVM.
For information on how to contribute to the LLVM project, please take a look at the Contributing to LLVM guide.
Join the LLVM Discourse forums, Discord chat, LLVM Office Hours or Regular sync-ups.
The LLVM project has adopted a code of conduct for participants to all modes of communication within the project.