编译器是否能够优化意大利面条代码?

时间:2014-10-15 08:46:00

标签: c++ c gcc

我正在编写一个最终生成C ++代码的编译器,我不能使用while\for或任何其他正常循环,所以我将它翻译为goto\if和assigments \调用行如下:< / p>

if (i<b) goto loop_959__again;
loop_959__end: ;
}
{
int inumber;
int i;
i=0;
inumber=3;
if (!(inumber<30)) goto loop_4482__end;
loop_4482__again:
float fnumber;
_A1__main__increase(__owner);
i++;
inumber++;
fnumber=3;
loop_4482__step_begin:
if (inumber<30) goto loop_4482__again;
loop_4482__end: ;
}

这看起来真的很痛苦,但是GCC编译器可以编译和优化上面的代码,好像它包含普通循环等吗?

1 个答案:

答案 0 :(得分:10)

编译器使用流程图分析优化程序控制流程,使用goto而不是if分支在该级别实际上等同于编译器的观点。

需要注意的一点是:由于gotos几乎可以在函数的任何位置跳转,如果您的生成器生成irreducible control flow graphs,这肯定会影响编译器的优化功能。