ZHCUAQ1F july 2015 – april 2023
advice #30006: 第22行的循环不能被有效调度,因为其包含一个函数调用(“function_name”)。尝试将function_name设置为内联函数。
为了提高性能,在优化级别 --opt_level=2 (-O2) 和 --opt_level=3 (-O3) 上,编译器尝试对循环进行软件流水线处理。有时编译器可能无法内联循环中的函数调用。由于编译器无法内联函数调用,因此无法对循环进行软件流水线处理,也无法有效地调度循环。
例如,在下面的测试用例中,对函数“func2”的调用阻止了软件流水线:
void func1(int *p, int *q, int n)
{
unsigned int i;
for (i = 0; i < n; i++) {
int t = func2(i);
; other operations
}
}
int function func2() { ...}
但是,如果函数 func2 被内联,则可以节省函数调用的开销。编译器可以自由地使用周围代码在上下文中优化函数。自动内联由“内联”关键字控制;使用该关键字可以启用特定函数的内联:
inline int function func2() { ...}
另请参阅节 4.15.6中的 Advice #30000。