📜  门| GATE CS 2013 |第48章

📅  最后修改于: 2021-06-29 19:11:01             🧑  作者: 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;
  }

假设处理器的指令集体系结构只有两个寄存器。唯一允许的编译器优化是代码移动,它可以在保持正确性的同时将语句从一个位置移动到另一个位置。编译后的代码中溢出到内存的最小数量是多少?

(A) 0
(B) 1
(C) 2
(D) 3答案: (B)
解释:

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 

这个问题的测验