Slides compiladores
Geração de código
Geração de código é a fase final de um compilador.
Compiladores – geração de código
Programa Fonte front-end código intermediário
Otimizador de código
código intermediário
Gerador de código
código objeto
O gerador mapeia a representação intermediaria produzida pelo front-end, ou, se houver uma parte de otimização realizada pelo otimizador de código, para o programa objeto
O gerador de código precisa mapear o programa na RI em uma sequencia que pode ser executada na arquitetura alvo. Esse mapeamento é determinado por fatores como: • O nível da RI • A natureza da arquitetura do conjunto das instruções • A qualidade desejada do código gerado
Compiladores – geração de código
Um grande problema na geração de código é decidir que valores residirão em registradores e em quais registradores. O uso de registradores é subdividino em dois subproblemas: • Alocaçao de registradores, etapa na qual selecionamos o conjunto de variáveis que residirão nos registradores em cada ponto do programa. • Atribuiçao de registradores, etapa na qual determinamos um registrador especifico em que uma variavel residirá.
Compiladores – geração de código
Uma forma de representação do codigo intermediario é de grafo, que é util para discutir a geração de codigo mesmo que o grafo não seja construido explicitamente. A representaçao é construida da seguinte forma: 1. Particionando o codigo em blocos basicos 2. Os blocos basicos formam os nós de um grafo de fluxo
Compiladores – geração de código
• Um bloco básico é uma sequencia máxima de comandos consecutivos de três endereços, em que o fluxo de controle só pode entrar no primeiro comando do bloco e sair no ultimo comando sem interromper ou desviar, exceto possivelmente no ultimo comando do bloco básico • Um gafo de fluxo é uma representação gráfica de um programa, em que os nos do grafo são blocos básicos e as arestas mostram como o controle flui entre os blocos