Сравнивайте с английским: нажмите на абзац — оригинал откроется в окне. Кнопка EN под абзацем показывает его прямо в тексте.
Введение
В информатике, разреженное условное распространение констант (SCCP) — это оптимизация, часто применяемая в компиляторах после преобразования в статическую форму однозначного присваивания (SSA). Она распространяет константы, то есть вычисляет статические значения, которые могут быть определены во время компиляции. Более того, она может найти больше констант и, следовательно, больше возможностей для оптимизации, чем последовательное применение устранения мертвого кода и распространения констант в любом порядке или в любом количестве повторений. Алгоритм работает путем выполнения абстрактной интерпретации кода в форме SSA. В процессе абстрактной интерпретации обычно используется плоская решетка констант для представления значений и глобальная среда, сопоставляющая переменные SSA со значениями в этой решетке. Ключевым моментом алгоритма является способ обработки интерпретации инструкций ветвления. При обнаружении условия ветвления оцениваются максимально точно, исходя из точности абстрактных значений, связанных с переменными в этом условии. Возможно, что значения будут полностью определены (не являются ни "верхней", ни "нижней" границей), и тогда абстрактное выполнение сможет определить направление ветвления. Если значения не являются константами или переменная в условии не определена, для сохранения консервативности необходимо рассмотреть оба направления ветвления. По завершении абстрактной интерпретации инструкции, которые никогда не выполняются, помечаются как мертвый код. Переменные SSA, которым присвоены константные значения, могут быть затем подставлены (распространены) в точки их использования.
In computer science, sparse conditional constant propagation (SCCP) is an optimization frequently applied in compilers after conversion to static single assignment form (SSA). It propagates constants, which is the calculation of static values which can be calculated at compile time. Moreover, it can find more constant values, and thus more opportunities for improvement, than separately applying dead code elimination and constant propagation in any order or any number of repetitions. The algorithm operates by performing abstract interpretation of the code in SSA form. During abstract interpretation, it typically uses a flat lattice of constants for values and a global environment mapping SSA variables to values in this lattice. The crux of the algorithm comes in how it handles the interpretation of branch instructions. When encountered, the condition for a branch is evaluated as best possible given the precision of the abstract values bound to variables in the condition. It may be the case that the values are perfectly precise (neither top nor bottom) and hence, abstract execution can decide in which direction to branch. If the values are not constant, or a variable in the condition is undefined, then both branch directions must be taken to remain conservative. Upon completion of the abstract interpretation, instructions which were never reached are marked as dead code. SSA variables found to have constant values may then be inlined at (propagated to) their point of use.