ZHCUAQ1F july 2015 – april 2023
advice #30000: Loop at line 10 cannot be scheduled efficiently,
as it contains a function call ("function_name").
尝试内联调用或考虑重写循环.
编译器尝试在优化级别 --opt_level=3(或 -O3)上执行软件流水线循环优化。如果循环中有调用,编译器会尝试完全内联被调用的函数,但有时难以实现。如果编译器无法内联被调用的函数,则无法执行软件流水线。这会严重降低循环的性能。
在下面的测试用例中,对函数“func2”的调用会阻止软件流水线。内联函数“func2”或重写循环来避免函数调用可以避免流水线不合格。如果循环流水线成功,您可能会看到性能得以提高。
void func1(int *p, int *q, int n)
{
unsigned int i;
for (i = 0; i < n; i++)
{
int t = func2(i);
p[i] = q[i] + t;
}
}