Geração de Código Cap. 8. Introdução Fase final para um compilador Entrada é uma representação intermediária do código fonte e a saída é um programa para.

Slides:



Advertisements
Apresentações semelhantes
TADs Vector, Lista e Sequência
Advertisements

1 Estruturas de Controle Márcia J. N. Rodrigues Lucena Especialização em Técnicas e Ferramentas de Apoio à Decisão Departamento.
Técnicas e Projeto de Sistemas André Mesquita Rincon Processo de Software Técnico Subsequente – Módulo III.
GRAFOS. Motivação Muitas aplicações em computação necessitam considerar conjunto de conexões entre pares de objetos: –Existe um caminho para ir de um.
Algoritmos em Grafos Celso C. Ribeiro Caroline T. Rocha.
INTRODUÇÃO À COMPUTAÇÃO PARALELA
Modularização de Código. Modularizar código Construção do algoritmo em um módulo único (Início...Fim/ Program... End) Único arquivo.
Introdução ao Fortran 4/abril/2006. Pseudocódigo Compreensão do problema Elaboração da lógica de resolução Tradução da lógica para pseudocódigo.
Introdução à Lógica de Programação
Arquitetura de computadores
Críticas sobre Extreme Programming Francisco Hillesheim.
Sistemas Operacionais
Prof. Dr. Helder Anibal Hermini
Arquiteturas de 4, 3, 2, 1 e 0 endereços.
Utilização do montador Daedalus
Algoritmos com laços (ou seja, com conjuntos de instruções que devem ser executados repetidas vezes)
Teste Estrutural de Software
(Como implementar multiplicação e divisão uma vez só :-)
A Arquitetura: conjunto de instruções
Algoritmos Genéticos – Capítulo 12
Introdução A fim de preparar a geração de código, deve-se relacionar o fonte estático do programa às ações em tempo de execução. Durante a execução, o.
Geração de Código Otimizações independentes de máquina.
Geração de Código Algoritmo de Escalonamento de instruções – List Scheduling.
O Fluxo de Testes © Alexandre Vasconcelos
Curso de Engenharia Industrial Madeireira – UFPR Prof. Umberto Klock
FERRAMENTAS DA QUALIDADE
Funções de um computador
1 2º Semestre de 2006 CSC V-CTR USC CTR - Glêvson USC POT - Caio USC COMB - Débora Prof. Cunha Prof. Vieira Dias Prof. Márcio Programa de Pós-Graduação.
1.3 – Interpretadores – Compiladores versus Interpretadores
CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2013 Capítulo XI Encadeamento de Estruturas por Ponteiros.
Capítulo V Análise Sintática
1. Função: - Criar meios para que o processador possa comunicar-se com todos estes componentes com a maior velocidade e confiabilidade possíveis. - Na.
Capítulo I – Conceitos Primários 1.1 – Estrutura de um computador 1.2 – Informações manipuladas por um computador 1.3 – Evolução das linguagens de programação.
Curso Técnico em Informática La Salle - Canoas
5W1H.
Business Process Management e Workflow - jBPM Aluno: Filipe Ferraz Salgado Orientador: Francisco Reverbel Novembro 2006.
MAC499 Trabalho de Formatura Supervisionado Animação Facial Aluno: Marcos Paulo Moreti Orientador: Roberto M. Cesar Jr. Introdução Animação de faces humanas.
ALOCAÇÃO DINÂMICA DE MEMÓRIA
EEL170 COMPUTAÇÃO I Antonio Cláudio Gómez de Sousa 1a série de slides versão 19/03/2012.
OTIMIZAÇÃO DE DESEMPENHO
OTIMIZAÇÃO DE DESEMPENHO
ARQUITETURA DE COMPUTADORES SOFTWARE PROGRAMA SEQUENCIA DE INSTRUÇÕES
Resolução de Sistemas Não-Lineares- Parte 1
Sistemas Lineares Parte 2
Organização de Sistemas de Computadores
Introdução à Arquitetura de Computadores
Desempenho A rápida taxa de melhoria na tecnologia de computadores veio em decorrência de dois fatores: avanços na tecnologia utilizada na construção.
Máquina Multinível Um programa pode ser definido como uma seqüência de instruções que descrevem como executar uma determinada tarefa. Uma instrução pode.
Pipeline É possível obter maior desempenho computacional com:
Laboratório de Programação Prof. Oscar Luiz Monteiro de Farias
Prof. Giovanny Lucero Introdução Prof. Giovanny Lucero
Linguagens Formais e Tradutores Linguagens Regulares (Revisão)
Capítulo 1 Introdução 1.1 O que é um sistema operacional
Tecnologia para Web JavaScript Enrique Pimentel Leite de Oliveira
Recursividade Estrutura de Dados.
WOntoVLab: Uma Arquitetura para Laboratórios Virtuais Baseada em Workflows e Ontologias Aluno: Daniel Cintra Cugler Orientadora: Profª. Dra. Marilde T.
Curso de Programação em C++ Universidade Federal do Ceará Departamento de Engenharia Estrutural e Construção Civil Prof: Evandro Parente Junior Monitor:
Baseado no documento do Prof. Ronaldo Martins da Costa
LINGUAGENS DE PROGRAMAÇÃO
Baseado no documento do Prof. Ronaldo Martins da Costa
Conceitos Básicos de Redes de Computadores e acesso a Internet
Sistemas Operacionais e Windows XP Aula 04 – DCA0302.
04:27 Introdução Tipos de Fluxo de Dados e de Arquivos Manipulação de Arquivos em Java Classes FileReader e FileWriter Classes FileInputStream e FileOutputStream.
Introdução Ciência da Computação estudo de algoritmos –ÊNFASE ao estudo de DADOS armazenamento manipulação refinamento (a partir de dados cru) estrutura.
INPE / CAP-334 Celso L. Mendes Aula 4-D(1) Reestruturação de Programas em Sistemas Vetoriais (II) Tópicos: Suporte à Paralelização Vetorização.
8. Uma Função de duas Variáveis Aleatórias
APRESENTAÇÃO SISTEMAS INTEGRADOS DE MANUFATURA
Professor: Hyggo Almeida
WEKA. Roteiro Introdução Conceitos Exemplos práticos Chamada ao aplicativo.
1 Static Metaprogramming In C++ K. CZARNECKI e U. EISENECKER Universidade Federal de Santa Catarina Centro Tecnológico Departamento de Informática e Estatística.
Transcrição da apresentação:

Geração de Código Cap. 8

Introdução Fase final para um compilador Entrada é uma representação intermediária do código fonte e a saída é um programa para ser executado em uma máquina alvo O programa para a máquina alvo deve preservar o significado semântico do programa fonte e deve utilizar eficientemente os recursos do processador –Deve executar de maneira eficiente! Desafio: gerar código ótimo para uma máquina alvo é um problema indecidível –Muitos subproblemas são intratáveis Nesta etapa, utilizaremos muitos conceitos de Arq. de Computadores!

Blocos Básicos Ajudam a entender e manipular determinadas etapas da geração de código Blocos básicos são seqüências maximais de instruções de 3-end. consecutivas Código da RI (em 3-end.) é dividido em blocos de instruções com as seguintes características: –Fluxo de controle entra no bloco básico através da 1a. Instrução desse bloco –Não existem desvios ou labels no meio de um bloco básico –O controle de execução deve sair do bloco básico apenas pela última instrução

Blocos Básicos Algoritmo para construção de blocos básicos Entrada: seqüência de instruções de 3-end Saída: lista de blocos básicos Método: determina as instruções que são líderes, a primeira instrução de um bloco básico. As instruções que são líderes determinam a criação de novos blocos básicos. As demais instruções são incluídas, na seqüência, em blocos básicos já existentes. As regras para criar líderes são: –A 1a. Instrução do programa é líder –Qualquer instrução que é alvo de um desvio condicional ou incondicional é um líder –Qualquer instrução que segue (está após) um desvio condicional ou incondicional é um líder

Blocos Básicos Exemplo: Determinar os blocos básicos para o seguinte código: (1) i=1 (2) j=1 (3) t1=10*i (4) t2=t1+j (5) t3=8*t2 (6) t4=t3-88 (7) a[t4]=0.0 (8) j=j+1 (9) if j<=10 goto (3) (10) i=i+1 (11) if i<=10 goto (2) (12) i=1 (13) t5=i-1 (14) t6=88*t5 (15) a[t6]=1.0 (16) i=i+1 (17) If i<=10 goto (13) (1) i=1 (2) j=1 (3) t1=10*i (4) t2=t1+j (5) t3=8*t2 (6) t4=t3-88 (7) a[t4]=0.0 (8) j=j+1 (9) if j<=10 goto (3) (10) i=i+1 (11) if i<=10 goto (2) (12) i=1 (13) t5=i-1 (14) t6=88*t5 (15) a[t6]=1.0 (16) i=i+1 (17) If i<=10 goto (13)

Blocos Básicos Exemplo: Determinar os blocos básicos para o seguinte código: (1) i=1 (2) j=1 (3) t1=10*i (4) t2=t1+j (5) t3=8*t2 (6) t4=t3-88 (7) a[t4]=0.0 (8) j=j+1 (9) if j<=10 goto (3) (10) i=i+1 (11) if i<=10 goto (2) (12) i=1 (13) t5=i-1 (14) t6=88*t5 (15) a[t6]=1.0 (16) i=i+1 (17) If i<=10 goto (13) (1) i=1 (2) j=1 (3) t1=10*i (4) t2=t1+j (5) t3=8*t2 (6) t4=t3-88 (7) a[t4]=0.0 (8) j=j+1 (9) if j<=10 goto (3) (10) i=i+1 (11) if i<=10 goto (2) (12) i=1 (13) t5=i-1 (14) t6=88*t5 (15) a[t6]=1.0 (16) i=i+1 (17) If i<=10 goto (13) (1) i=1 (2) j=1 (3) t1=10*i (4) t2=t1+j (5) t3=8*t2 (6) t4=t3-88 (7) a[t4]=0.0 (8) j=j+1 (9) if j<=10 goto (3) (10) i=i+1 (11) if i<=10 goto (2) (12) i=1 (13) t5=i-1 (14) t6=88*t5 (15) a[t6]=1.0 (16) i=i+1 (17) If i<=10 goto (13) Formação do CFG

Informação de próximo-uso (next-use) Uma informação importante para a geração de código é saber quando o valor variável será usado –Se o valor que está atualmente em um registrador não será usado novamente, então, esse registrador pode ser reusado por outra variável Use de um nome em 3-end é definido como segue: –Em um ponto (declaração) i, a variável x recebe um valor; Se a declaração j tem x como um de seus operandos e o controle pode ir de i para j, através de um caminho que não altera o valor de x, então dizemos que j usa x computado em i O que queremos é determinar para cada declaração x=y op z, qual é o próximo uso de x,y e z

Informação de próximo-uso (next-use) Algoritmo: determinar a longevidade (liveness) e informação de próximo-uso para cada declaração em um bloco básico Entrada: Um bloco básico B com código em 3-end. Assumimos que a TS pode armazenar a informação de próximo-uso Saída: em cada declaração i: x=y op z, determinamos longevidade e próximo-uso de x, y e z Método: Iniciar na última declaração de B e pesquisar por todas as declarações de B até a primeira instrução. Em cada declaração i: x=y op z, fazer: 1.Armazenar nas estruturas de i a informação atual da TS sobre o próximo-uso e longevidade de x, y e z 2.Na TS, alterar a informação de longevidade e próximo-uso de x para 0 e 0 3.Na TS, alterar y e z para 1 e na informação de próximo-uso indicar a posição de i

Otimizações básicas em nível de BB Common Subexpression Elimination: eliminação de expressões pode ser detectada observando a construção de DAGs. Para um nó M a ser adicionado no DAG, já existe um nó N com os mesmos filhos, mesma ordem dos filhos e mesmo operador Dead Code Elimination: Eliminação de variáveis que não são mais utilizadas a=b+c b=a-d c=b+c d=a-d a=b+c b=a-d c=b+c d=b a=b+c b=b-d c=c+d e=b+c b=b-d c=c+d e=b+c Variável a não é usada

Otimizações básicas em nível de BB Identidades Algébricas: consiste em substituir instruções que envolvem operações aritméticas por operações mais simples e com o mesmo valor semântico Redução de força Expressões constantes: avaliar expressões com constantes em tempo de compilação e substituí-las pelo seu valor x+0=0+x=x x-0=x x*1=1*x=x x/1=x x 2 =x*x 2*x=x+x x/2=x*0.5 2*3.14=6.28