因此,我对编译器重新排列特定语句的任何方法感兴趣,以便更好地分配内存,例如注册分配。因此,在某些情况下,可以更早地评估语句,以便我们可以重用中间寄存器。考虑:
input(a1,a2,a3)
b = f1(a1,a2);
c = f2(b,a3);
d = f3(b,a1,a2);
k = f4(c,1);
l = f5(d,a3);
r = k + l + b + c;
这里编译器将使用4"寄存器" - 1)b,2)c,3)d和l,4)k和r将是前面的任何一个。 相反,如果我们这样做,这在寄存器分配方面可能更有效:
input(a1,a2,a3)
b = f1(a1,a2);
c = f2(b,a3);
r = b + c + f4(c,1);
c = f3(b,a1,a2);
r += f5(c,a3);
我们可以使用3个寄存器。
我正在寻找的是一个计算图,我拥有所有变量依赖项,以便为寄存器生成更好的优化代码。问题是有没有算法这样做?
PS:注意这个例子可能不是最好的,但是没有其他简单的想法。