Skip to content

Instantly share code, notes, and snippets.

@DanielAugusto191
Created November 8, 2023 22:28
Show Gist options
  • Select an option

  • Save DanielAugusto191/5e9d7b2dbbda196a5982e9f9dda8a17c to your computer and use it in GitHub Desktop.

Select an option

Save DanielAugusto191/5e9d7b2dbbda196a5982e9f9dda8a17c to your computer and use it in GitHub Desktop.
Value Numbering.md

Value Numbering é uma tecnica para determinas se duas computações no programa são equivalentes e eliminar uma delas, preservando a semantica do programa.

Global Value Numbering (GVN)

GVN é uma tecnica de otimização de compiladores basiado na IR SSA. Global porque o mapeamento é feito entre basic blocks boundaries também. Funciona atribuindo valores numericos para variaveis e expressões, e o mesmo valor é atribuido para variaveis e expressoes equivalentes. Por exemplo:

:= 3:= 3:= x + 4:= w + 4

Um GVN pode atribuir o mesmo valor para w e x,e outro valor para y e z. Um exemplo de mapeamento: {w->1, x->1, y->2, z->2}. Assim o código acima pode ser tranformado em:

:= 3:= w
y := w + 4:= y

Local Value Numbering (LVN)

LVN é uma tecnica de otimização de compiladores que tenta achar multiplas instancias para espressoes equivalentes e troca-las para a primeira ocorrencia. Diferente de GVN, LVN opera apenas em um unico Basic Block. Atribui um unico numero para cada operação e guarda essas associações, as proximas instruções vao procurar nesse mapeamento, e se encontraram funções iguais, troque essa instrução pelo resultado anterior. Por exemplo:

	a ← 4         a is tagged as #1
	b ← 5         b is tagged as #2
	c ← a + b     c (#1 + #2) is tagged as #3
	d ← 5         d is tagged as #2, the same as b
	e ← a + d     e, being '#1 + #2' is tagged as #3

Problems

Not Using SSA Using mathematical identities

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment