1.1 EventCategory

枚举类型 EventCategory,用于表示不同的事件类别(Event Category),GccTrace代码处理框架中的分类标识

enum EventCategory {
  TU,
  PREPROCESS,
  FUNCTION,
  STRUCT,
  NAMESPACE,
  GIMPLE_PASS,
  RTL_PASS,
  SIMPLE_IPA_PASS,
  IPA_PASS,
  UNKNOWN
};

1.2 GCC 阶段与 EventCategory 的映射

枚举值

GCC 阶段

关键优化/操作

TU

整个编译单元

表示一个完整的源文件(.c/.cpp)的编译过程

PREPROCESS

预处理器

宏展开、头文件包含等预处理操作

FUNCTION

函数级优化

函数定义、调用或优化相关事件

STRUCT

结构体/类处理

内存布局、字段重排

NAMESPACE

C++ 命名空间

符号解析、可见性控制

GIMPLE_PASS

GIMPLE IR 优化

GCC 编译器的 GIMPLE IR 优化阶段:常量传播、循环优化

RTL_PASS

RTL 优化

GCC 编译器的 RTL优化阶段:寄存器分配、指令选择

SIMPLE_IPA_PASS

轻量级过程间分析

局部变量传播

IPA_PASS

全局过程间分析

LTO、全程序内联

UNKNOWN

未知或未分类

未分类的事件

2.1 PREPROCESS

统计PREPROCESS?

为什么大型 C/C++ 项目的构建优化必须从预处理入手?

  • 效应放大:源头的微小问题(如循环包含)在预处理阶段会被指数级放大。

  • 时间占比:预处理往往占据了 30%-70% 的构建时间,是名副其实的“复杂性黑洞”。

  • 工具革新:不同于传统的 -ftime-reportGccTrace 能够深入文本处理层面,统计 PREPROCESS 数据,填补了传统工具在精细度上的空白。

结论:GccTrace 让预处理阶段从“黑盒”走向“透明”。通过数据驱动优化,我们有望削减 50%+ 的预处理耗时。这不仅是工具的胜利,更是构建优化方法论的升级。

3.1 FUNCTION

GCC的编译过程大致分为预处理、编译(前端处理、中间代码生成和优化)、汇编和链接几个阶段。其中,编译阶段又可以细分为多个步骤,例如语法分析、语义分析、中间代码生成(如GIMPLE、RTL)、优化等。函数作为代码的基本单元,在每个阶段都有不同的处理。

待更新