示例:
void top(int *a, int *b) { L1 : for (int i = 0; i < *a; i++) { for (int j = 0; j < 5; j++) { *b += *a; } } }
void top(int *a, int *b)
{
L1 : for (int i = 0; i < *a; i++)
for (int j = 0; j < 5; j++)
*b += *a;
}
我可以把上面的嵌套循环L1称为完美循环嵌套吗?完美的循环嵌套应该有恒定的边界。我不清楚这种情况是否会进入恒定循环绑定场景。
cygmwpex1#
由于外部循环体中唯一的语句是内部的for循环,所以这个嵌套的for循环是一个 * 完美嵌套循环 *。请注意,gcc和clang都不会优化内部循环的simple unrolling以外的发布代码。我想知道什么编译器可以将代码减少到:
for
void top(int *a, int *b) { if (*a > 0) *b += *a * *a * 5;}
void top(int *a, int *b) {
if (*a > 0)
*b += *a * *a * 5;
1条答案
按热度按时间cygmwpex1#
由于外部循环体中唯一的语句是内部的
for
循环,所以这个嵌套的for
循环是一个 * 完美嵌套循环 *。请注意,gcc和clang都不会优化内部循环的simple unrolling以外的发布代码。
我想知道什么编译器可以将代码减少到: