Нумерация значений

Нумерация значений (англ. Value Numbering) — один из видов анализа потока данных, применяемый оптимизирующим компилятором с целью обнаружения избыточных вычислений в коде (промежуточном представлении) программы. Результатами анализа могут воспользоваться оптимизации: распространение копий, удаление частичных избыточностей, удаление общих подвыражений, оптимизация условий (англ. If Optimization), inline-подстановка. Анализ разбивает множество всех рассматриваемых операций, вырабатывающих какой-либо результат (число или предикат), на подмножества операций, в каждом из которых все операции вырабатывают одинаковый результат не зависимо от ввода. Такие подмножества (а так же, иногда, номера этих подмножеств) называют классами конгруэнтности или классами эквивалентности. Классы конгруэнтности пронумерованы, номер класса конгруэнтности называют номером значения. Таким образом, задачу нумерации значений можно сформулировать следующим образом: присвоить уникальный номер каждому значению, вырабатываемому внутри рассматриваемого участка программы. Для осуществления нумерации значений может потребоваться построенный Def-Use-граф или SSA-форма. Нумерация значений может быть локальной (в пределах одного базового блока), глобальной (в пределах CFG-графа одной процедуры) и межпроцедурной.

Источник: Википедия

а б в г д е ё ж з и й к л м н о п р с т у ф х ц ч ш щ э ю я