llvm/llvm-project

performance optimization: special-case deduction for variables of type `auto`

オープン

#186,274 opened on 2026/03/12

 (9 件のコメント) (0 件のリアクション) (0 人の担当者)C++ (10,782 件のフォーク)batch import
c++11clang:frontendenhancementgood first issuequality-of-implementationslow-compile

Repository metrics

Stars
 (26,378 個のスター)
PR merge metrics
 (平均マージ 1d 2h) (30d で 1,000 merged PRs)

説明

General-purpose auto deduction involves some heavy machinery: we synthesize a template, perform a substitution on the type, perform deduction against the substituted type, perform another substitution, and so on. All of that adds up to a significant fraction of the total compile time if auto is used heavily.

But in places where auto is used heavily, the complete type is very frequently simply auto (or const auto), in which case we don't actually need any of that heavy machinery. Clang should detect the special case where the type is just auto (Context.AutoDeductTy) and the initializer is not an InitListExpr, and compute the decayed type of the initializer and directly build the deduced type.

$ for i in $(seq 1000000); do echo "auto v$i = 0;"; done >! ~/auto.cpp
$ for i in $(seq 1000000); do echo "int v$i = 0;"; done >! ~/int.cpp  
$ time clang++ ~/auto.cpp -fsyntax-only                               
clang++ ~/auto.cpp -fsyntax-only  6.57s user 0.36s system 99% cpu 6.935 total
$ time clang++ ~/int.cpp -fsyntax-only                                
clang++ ~/int.cpp -fsyntax-only  4.40s user 0.22s system 99% cpu 4.629 total

コントリビューターガイド