死代码(dead code)指的是那些无用或者不可执行的代码。它们通常浪费时间和空间。关键操作则是对过程有直接影响的“有用操作”。一个操作如果能设置过程的返回值、执行输入输出或者改变外部可见内存位置的值,则被认为是关键操作。死代码删除(Dead Code Elimination)是一种代码优化技术,旨在减少代码大小。该过程分为两部分:首先标记过程的入口节点为可达;然后标记所有可达节点的后续节点为可达,直至不再有进一步的标记。这一过程属于过程内优化。不可达过程删除(unreachable-procedure elimination)则是一种过程间优化,通过程序的调用图来标记主程序为可调用,然后标记所有后续节点为可调用,直至不再有进一步的标记。死代码消除分为两步:第一步标记所有直接有用的操作,然后标记所有间接有用的操作(即那些最终喂入直接有用操作的操作)。重复此过程直至所有最终喂入直接有用操作的操作都被发现并标记。第二步删除所有未标记的操作。在处理控制流时,所有“跳转”(无条件分支)都被认为是有用的,如goto Lx。而条件分支只有在有用的操作依赖于它时才是有用的。后向支配性(postdominance)指的是一个节点n如果出现在从m到退出的所有路径上,则n后向支配m。控制依赖性意味着一个操作O依赖于一个分支B,取决于分支B的方向影响O是否执行。节点k在节点i上存在控制依赖性,如果它在路径i->j0->j1->...->k中后向支配所有jx,并且k不严格后向支配i。在标记无条件分支有用时,如果节点k包含有用操作且k对节点i存在控制依赖性,则i中的条件分支被认为是有用的。这一规则可以操作化为:如果块k包含有用操作,则标记k的逆支配前沿RDF(k)中的所有条件分支为有用。RDF通过反向控制流图上的深度优先搜索计算得出。死代码消除的高层次算法包括:标记所有直接有用的操作,重复直至收敛,标记所有间接有用的操作,标记所有有用操作的逆支配前沿中的条件分支为有用,删除所有未标记的操作,移除控制流图中的空节点或删除所有无用的控制流。