Введение

В информатике, разреженное условное распространение констант (SCCP) — это оптимизация, часто применяемая в компиляторах после преобразования в статическую форму однозначного присваивания (SSA). Она распространяет константы, то есть вычисляет статические значения, которые могут быть определены во время компиляции. Более того, она может найти больше констант и, следовательно, больше возможностей для оптимизации, чем последовательное применение устранения мертвого кода и распространения констант в любом порядке или в любом количестве повторений. Алгоритм работает путем выполнения абстрактной интерпретации кода в форме SSA. В процессе абстрактной интерпретации обычно используется плоская решетка констант для представления значений и глобальная среда, сопоставляющая переменные SSA со значениями в этой решетке. Ключевым моментом алгоритма является способ обработки интерпретации инструкций ветвления. При обнаружении условия ветвления оцениваются максимально точно, исходя из точности абстрактных значений, связанных с переменными в этом условии. Возможно, что значения будут полностью определены (не являются ни "верхней", ни "нижней" границей), и тогда абстрактное выполнение сможет определить направление ветвления. Если значения не являются константами или переменная в условии не определена, для сохранения консервативности необходимо рассмотреть оба направления ветвления. По завершении абстрактной интерпретации инструкции, которые никогда не выполняются, помечаются как мертвый код. Переменные SSA, которым присвоены константные значения, могут быть затем подставлены (распространены) в точки их использования.