llvm/llvm-project

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

Open

#186 274 ouverte le 12 mars 2026

Voir sur GitHub
 (9 commentaires) (0 réactions) (0 assignés)C++ (10 782 forks)batch import
c++11clang:frontendenhancementgood first issuequality-of-implementationslow-compile

Métriques du dépôt

Stars
 (26 378 stars)
Métriques de merge PR
 (Merge moyen 1j 2h) (1 000 PRs mergées en 30 j)

Description

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

Guide contributeur