llvm/llvm-project

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

Open

#186,274 创建于 2026年3月12日

在 GitHub 查看
 (9 评论) (0 反应) (0 负责人)C++ (26,378 star) (10,782 fork)batch import
c++11clang:frontendenhancementgood first issuequality-of-implementationslow-compile

描述

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

贡献者指南