📜  门|门CS 2013 |第 48 题

📅  最后修改于: 2021-09-27 05:31:56             🧑  作者: Mango

以下代码段在处理器上执行,该处理器只允许在其指令中使用寄存器操作数。每条指令最多可以有两个源操作数和一个目标操作数。假设在此代码段之后所有变量都已失效。

c = a + b;
   d = c * a;
   e = c + a;
   x = c * c;
   if (x > a) {
      y = a * a;
   }
   else {
     d = d * d;
     e = e * e;
  }

假设处理器的指令集架构只有两个寄存器。唯一允许的编译器优化是代码移动,它将语句从一个地方移动到另一个地方,同时保持正确性。编译后的代码中最少溢出到内存的次数是多少?

(一) 0
(乙) 1
(三) 2
(四) 3答案:(乙)
解释:

r1......r2
a.......b......c = a + b
a.......c......x = c * c
a.......x......but we will have to store c in mem as we don't know if x > a
................. or not
y.......x......y = a * a
choosing the best case of x > a , min spills = 1 

这个问题的测验