В информатике sparse conditional constant propagation (SCCP) — это оптимизация, часто применяемая в компиляторах после преобразования в статическую форму одиночного присваивания (SSA). Она распространяет константы , что является вычислением статических значений, которые могут быть вычислены во время компиляции. Более того, она может найти больше постоянных значений и, таким образом, больше возможностей для улучшения, чем отдельное применение устранения мертвого кода и распространения констант в любом порядке или любом количестве повторений. [1] [2]
Алгоритм работает , выполняя абстрактную интерпретацию кода в форме SSA. Во время абстрактной интерпретации он обычно использует плоскую решетку констант для значений и глобальную среду, сопоставляющую переменные SSA со значениями в этой решетке. Суть алгоритма заключается в том, как он обрабатывает интерпретацию инструкций ветвления . При обнаружении условие для ветвления оценивается как наилучшее возможное с учетом точности абстрактных значений, привязанных к переменным в условии. Может быть так, что значения идеально точны (ни верхние, ни нижние), и, следовательно, абстрактное выполнение может решить, в каком направлении следует ветвление. Если значения не являются константами или переменная в условии не определена, то необходимо выбрать оба направления ветвления, чтобы оставаться консервативными.
После завершения абстрактной интерпретации инструкции, которые никогда не были достигнуты, помечаются как мертвый код. Переменные SSA, у которых обнаружено постоянное значение, могут быть затем встроены (распространены) в точке их использования. [ нужен пример ]