假设我们已经编译了一些程序给了一些抽象的中间语言:我们的程序是执行下一个操作(基本上是一棵树)的一系列操作和决策(分支)。例如:编译为程序集时最小化跳转的数量
a();
if (bla) then c();
else b(); d();
e();
现在我们需要“包装”该序列我们的线性内存,并通过这样做,我们的代码必须分支(有条件,而不是)。举例来说,可能性之一:
CALL A
TEST bla
BRANCH else
CALL C
JMP esc
else: CALL B
CALL D
esc: CALL E
当然也有关于如何安排线性存储这些块的多种可能性,他们都在分行的量不同/跳跃。我们的目标是尽量减少它们。
问题:
a)如何调用这个问题?有一个通用名称吗? (这是BDD构建的一个实例吗?)
b)这种问题的复杂性是什么(寻找块的排列使得跳转/分支的数量最小)?