diff --git a/2024-02-15.md b/2024-02-15.md new file mode 100644 index 0000000..6152e32 --- /dev/null +++ b/2024-02-15.md @@ -0,0 +1,35 @@ +# IF688 - Teoria e Implementação de Linguagens Computacionais + +## Introdução a Otimização de Código + +### Objetivo + +O objetivo desta aula é introduzir o conceito de otimização de código, discutindo otimizações locais em particular, além de apresentar o conceito de _Static Single Assignment_ (SSA) como representação intermediária de código para expor otimizações. + +### Questões para Discussão + +- Quais tipos de otimizações podemos efetuar em código? +- Em que nível de abstração devemos realizar otimizações? +- Qual o principal preceito associado à aplicação de otimizações? +- Quais os diferentes níveis de granularidade onde podemos aplicar otimizações? +- Qual a principal vantagem de utilizar _Static Single Assignment_ como representação intermediária de código? +- Como implementar otimizações locais? +- Como implementar eliminação de expressões redundantes usando _Local Value Numbering_? +- Quais os pormenores de _Local Value Numbering_? + +### Material usado em sala de aula + +- [Slides](https://drive.google.com/file/d/1j2rCNcLbRzEfxd5GfggizphloYTo6k7t/view) + +### Vídeos +- [Introdução à Análise e Otimização de Código](https://www.youtube.com/watch?v=84EGVK1UlDA) +- [Otimizações Locais](https://www.youtube.com/watch?v=_d3iWKx-xDI) +- [Exemplo de Otimizações Locais interagindo](https://youtu.be/wXepvg3SneE) +- [Local Value Numbering](https://youtu.be/9BHK3q_2BGQ) + +### Links Relacionados + +- [Optimizing Compiler](https://en.wikipedia.org/wiki/Optimizing_compiler) +- [Static Single Assignment](https://en.wikipedia.org/wiki/Static_single_assignment_form) +- [Common subexpression elimination](https://en.wikipedia.org/wiki/Common_subexpression_elimination) +- [Constant folding](https://en.wikipedia.org/wiki/Constant_folding) \ No newline at end of file diff --git a/2024-02-20.md b/2024-02-20.md new file mode 100644 index 0000000..087e089 --- /dev/null +++ b/2024-02-20.md @@ -0,0 +1,40 @@ +# IF688 - Teoria e Implementação de Linguagens Computacionais + +## Otimizações Globais e _Data-flow Analysis_ + +### Objetivo + +O objetivo desta aula é apresentar o conceito de otimizações globais, envolvendo um CFG inteiro, bem como introduzir o conceito de análise de fluxo de dados, como forma de calcular informações necessárias para aplicar otimizações. Na aula discutimos duas análises simples que diferem na forma como a informação é propagada, sendo _global constant propagation_ um exemplo onde usamos o conceito de análises de fluxo de dados _forward-flow_, enquanto _liveness_ é usada como estudo de caso para análises _backward-flow_. + +### Questões para Discussão + +- O que distingue otimização local de global? +- Como definir uma análise de fluxo de dados iterativa? +- Quais os desafios associados à definição de análises globais? +- O que significa definir uma análise conservadora? +- Como aplicar otimizações baseadas nos resultados de análises de fluxo de dados? +- Como utilizar funções de transferência para calcular informação de propagação de constantes? +- Qual a intuição para afirmar que uma análise de fluxo de dados interativa termina? +- Como definir se uma variável está viva ou morta? +- Por qual razão é necessário que a análise seja feita de maneira _backwards_? +- Como seria a definição de liveness para uma variável `x` em um statement `S`? +- Como computar liveness? + +### Material usado em sala de aula + +- [Slides](https://drive.google.com/file/d/11T_1OMQRNLgrZffp7KNEWHEyuNi1BLju/view) + +### Vídeos + +- [Otimizações Globais (intraprocedural)](https://www.youtube.com/watch?v=5QCPI-tLaig) +- [Expressando critérios de corretude](https://www.youtube.com/watch?v=gJzEQc3pmpo) +- [Global Constant Propagation](https://www.youtube.com/watch?v=WrUgJ8dedQw) +- [Criando funções de transferência para Global Constant Propagation](https://www.youtube.com/watch?v=FcXLDT34WUY) +- [Algoritmo de ponto fixo para calcular valores constantes em variáveis](https://www.youtube.com/watch?v=U1RGdehABYE) +- [Introdução a Liveness](https://youtu.be/_7jahD1WmQI) +- [Calculando Liveness entre instruções](https://youtu.be/--OoAmvAdUQ) + +### Links Relacionados + +- [Data-flow Analysis](https://en.wikipedia.org/wiki/Data-flow_analysis) +- [Live variable analysis](https://en.wikipedia.org/wiki/Live_variable_analysis) \ No newline at end of file diff --git a/2024-02-22.md b/2024-02-22.md new file mode 100644 index 0000000..72e6b6b --- /dev/null +++ b/2024-02-22.md @@ -0,0 +1,28 @@ +# IF688 - Teoria e Implementação de Linguagens Computacionais + +## Representando funções de transferência entre blocos básicos + +### Objetivo + +O objetivo desta aula é reforças a definição de funções de transferência, representadas por meio de equações que estabelecem como informação flui entre blocos básicos, usando _liveness_ e _dominance_ como estudos de caso. + +### Questões para Discussão + +- Como definir se uma variável está viva ou morta? +- Como representar análises com equações? +- O que significa _dominance_ para um bloco básico? + +### Material usado em sala de aula + +- [Slides](https://drive.google.com/file/d/15IKH1C-fWdYtP57mJ-H6at7wZLvVNSuO/view) + +### Vídeos + +- [Calculando Liveness de múltiplas variáveis entre blocos básicos](https://youtu.be/JbfOmxBLWCg) +- [Usando Liveness para detectar variáveis não inicializadas](https://youtu.be/cKJ_YahGqPU) +- [Dominance](https://youtu.be/PPhPov2oiec) + +### Links Relacionados + +- [Data-flow Analysis](https://en.wikipedia.org/wiki/Data-flow_analysis) +- [Live variable analysis](https://en.wikipedia.org/wiki/Live_variable_analysis) \ No newline at end of file diff --git a/README.md b/README.md index afae194..4c9733e 100644 --- a/README.md +++ b/README.md @@ -107,11 +107,11 @@ Na disciplina, utilizaremos uma mistura de aulas tradicionais com exercícios e | 30.01.24 | Terça | [Representação Intermediária de Código](2024-01-30.md) | | | 01.02.24 | Quinta | [Representação Intermediária de Código](2024-01-30.md) | | | 06.02.24 | Terça | [APS - ANTLR](2024-02-06.md) | | -| 08.02.24 | Quinta | APS - LLVM | | +| 08.02.24 | Quinta | APS - ANTLR | | | 13.02.24 | Terça | **CARNAVAL** | | -| 15.02.24 | Quinta | Análise e Otimização de Código | | -| 20.02.24 | Terça | Análise e Otimização de Código | | -| 22.02.24 | Quinta | Análise e Otimização de Código | | +| 15.02.24 | Quinta | [Análise e Otimização de Código](2024-02-15.md) | | +| 20.02.24 | Terça | [Análise e Otimização de Código](2024-02-20.md) | | +| 22.02.24 | Quinta | [Análise e Otimização de Código](2024-02-22.md) | | | 27.02.24 | Terça | Ambientes de Execução | | | 29.02.24 | Quinta | Ambientes de Execução | | | 05.03.24 | Terça | Geração de Código | |