6 research outputs found

    Survey on Instruction Selection: An Extensive and Modern Literature Review

    Full text link
    Instruction selection is one of three optimisation problems involved in the code generator backend of a compiler. The instruction selector is responsible of transforming an input program from its target-independent representation into a target-specific form by making best use of the available machine instructions. Hence instruction selection is a crucial part of efficient code generation. Despite on-going research since the late 1960s, the last, comprehensive survey on the field was written more than 30 years ago. As new approaches and techniques have appeared since its publication, this brings forth a need for a new, up-to-date review of the current body of literature. This report addresses that need by performing an extensive review and categorisation of existing research. The report therefore supersedes and extends the previous surveys, and also attempts to identify where future research should be directed.Comment: Major changes: - Merged simulation chapter with macro expansion chapter - Addressed misunderstandings of several approaches - Completely rewrote many parts of the chapters; strengthened the discussion of many approaches - Revised the drawing of all trees and graphs to put the root at the top instead of at the bottom - Added appendix for listing the approaches in a table See doc for more inf

    Estudo e desenvolvimento de sistemas de geração de back-ends do processo de compilação

    Get PDF
    O back-end de um compilador agrupa todo um conjunto de tarefas cuja implementação é intrinsecamente dependente das características do processador para o qual se pretende gerar código. A rápida evolução da industria dos processadores e microcontroladores levou esta área de desenvolvimento de software a realizar fortes investimentos na pesquisa de meios que permitissem dar uma resposta rápida e de qualidade à procura verificada. É dentro deste contexto que surge o tema e o trabalho desenvolvido ao longo desta tese de mestrado, que pretende de alguma forma sintetizar o que já se encontra feito e propor algumas soluções, que apesar de individualmente não serem originais permitem, quando em conjunto, vislumbrar alternativas aos sistemas já concebidos e avançar um pouco mais na área de investigação dos geradores de código final e optimizadores. O trabalho aqui descrito é extremamente abrangente para uma qualquer tese, cobrindo todas as áreas do processo de compilação a partir da análise semântica até à geração do código máquina, passando pela apresentação de modelos de compiladores, representação da informação, sistemas de análise de fluxo de controlo e de dados, alocação de registos local e global, selecção de instruções e geração de selectores, optimização de código a vários níveis, etc. É ainda de referir que do trabalho desenvolvido resultou o Back-End Development System, que como o nome indica é um sistema de apoio ao desenvolvimento das tarefas de back-end de um compilador. The back-end of a compiler gathers a group of tasks, whose implementation is directly dependent on the features of the processor for which machine code is intended to be generated. The fast evolution of processors and micro-controllers industry lead this area of software development to perform strong investments in the research of means, which would give a fast and proper answer to the demand. It is within this context that the theme and the work carried on through this thesis emerges. The aim of this work is to synthesise what has already been done and to give some solutions which, although individually not original, when put together, they allow alternatives to the pre-established systems and move on a little further in the research of generators of final code and optimisers. This work is extremely wide-ranging, covering all areas of the compiling process, going from the semantic analyses till the generation of machine code. It also contains the presentation of models of compilers, representation of information, control and data flow analysis, local and global registers allocation, instructions selection and generation of selectors, code optimisation at several levels, etc. It is also important to refer that from the development work emerged the Back-End Development System, which, as the name itself indicates, is a software system to support development of back-end tasks of a compiler

    Estudo e desenvolvimento de sistemas de geração de back-ends do processo de compilação

    Get PDF
    O back-end de um compilador agrupa todo um conjunto de tarefas cuja implementação é intrinsecamente dependente das características do processador para o qual se pretende gerar código. A rápida evolução da industria dos processadores e microcontroladores levou esta área de desenvolvimento de software a realizar fortes investimentos na pesquisa de meios que permitissem dar uma resposta rápida e de qualidade à procura verificada. É dentro deste contexto que surge o tema e o trabalho desenvolvido ao longo desta tese de mestrado, que pretende de alguma forma sintetizar o que já se encontra feito e propor algumas soluções, que apesar de individualmente não serem originais permitem, quando em conjunto, vislumbrar alternativas aos sistemas já concebidos e avançar um pouco mais na área de investigação dos geradores de código final e optimizadores. O trabalho aqui descrito é extremamente abrangente para uma qualquer tese, cobrindo todas as áreas do processo de compilação a partir da análise semântica até à geração do código máquina, passando pela apresentação de modelos de compiladores, representação da informação, sistemas de análise de fluxo de controlo e de dados, alocação de registos local e global, selecção de instruções e geração de selectores, optimização de código a vários níveis, etc. É ainda de referir que do trabalho desenvolvido resultou o Back-End Development System, que como o nome indica é um sistema de apoio ao desenvolvimento das tarefas de back-end de um compilador. The back-end of a compiler gathers a group of tasks, whose implementation is directly dependent on the features of the processor for which machine code is intended to be generated. The fast evolution of processors and micro-controllers industry lead this area of software development to perform strong investments in the research of means, which would give a fast and proper answer to the demand. It is within this context that the theme and the work carried on through this thesis emerges. The aim of this work is to synthesise what has already been done and to give some solutions which, although individually not original, when put together, they allow alternatives to the pre-established systems and move on a little further in the research of generators of final code and optimisers. This work is extremely wide-ranging, covering all areas of the compiling process, going from the semantic analyses till the generation of machine code. It also contains the presentation of models of compilers, representation of information, control and data flow analysis, local and global registers allocation, instructions selection and generation of selectors, code optimisation at several levels, etc. It is also important to refer that from the development work emerged the Back-End Development System, which, as the name itself indicates, is a software system to support development of back-end tasks of a compiler

    Um modelo arquitectónico para desenvolvimento de compiladores : aplicação à Framework Dolphin

    Get PDF
    Tese de doutoramento em Informática, especialização em Tecnologias da ProgramaçãoA indústria dos microprocessadores é uma área com uma dinâmica ímpar, reconhecida pelo seu avançado estado tecnológico, mas também pela sua constante evolução. Esta dinâmica deve-se em grande parte à pressão que é constantemente exercida no sentido de se obter maior poder computacional. Pressão essa que tem crescido de forma exponencial, e à qual não é alheia a forte expansão da Web e o uso generalizado de conteúdos multimédia. No entanto, esta evolução só é rentabilizada através da utilização de ferramentas adequadas, como é o caso dos compiladores, que por desempenharem um papel fundamental têm forçosamente de acompanhar a evolução dos microprocessadores. É, como tal, exigida uma resposta rápida por parte de quem desenvolve este tipo de ferramentas e a tecnologia que lhes está inerente. Daí que o desenvolvimento de aplicações que visem a construção de compiladores tenha um papel crucial, quer no sentido de tornar mais acessível a realização de uma tarefa que é complexa, quer no sentido de acelerar o processo de desenvolvimento de forma a acompanhar a evolução dos microprocessadores. Objectivos que aliás estão relacionados, dado que este processo será tão mais rápido, quanto mais acessível for a própria construção dos compiladores. Este trabalho de doutoramento tem assim por objectivo contribuir para simplificar o processo de construção de compiladores. Pretende-se mostrar que a melhor forma de alcançar este objectivo, passa pela utilização de uma abordagem, centrada no nível intermédio do processo de compilação, que tem por base uma framework. No sentido de suportar esta abordagem, propõe-se um modelo para a representação de código, que introduz novos conceitos e funcionalidades, que visam facilitar o desenvolvimento dos componentes e contribuir para que estes sejam mais eficientes. A grande contribuição deste trabalho de doutoramento é, no entanto, numa arquitectura que estabelece o comportamento e o relacionamento entre os elementos da representação de código e os componentes que sobre estes trabalham. Esta arquitectura, para alem de garantir a eficiência do processo de compilação, simplifica a reutilização dos componentes, poupando o utilizador à implementação de vários mecanismos relacionados com a consistência e a gestão de dependências entre componentes Do trabalho realizado ao longo deste doutoramento, resultou também uma plataforma para desenvolvimento de compiladores, a framework Dolphin, cuja implementação teve por objectivo testar a viabilidade do modelo de representação de código e da arquitectura propostas nesta dissertação.The microprocessors industry is a remarkable, dynamic, and recognized area not only by its technological progress, but also by its constant evolution. This dynamic is the result of a systematic pressure to obtain more computational power, which has been raised exponentially with the expansion of the Web and with the generalization of multimedia contents. However this evolution can only be profitable with the usage of appropriated tools, like compilers. They play a fundamental role to take advantage of the whole features supplied by the microprocessors. As consequence, compilers must follow the evolution of the microprocessors, and their developers should have an adequate methodological and technological support. In this context, compiler development tools give an essential contribution, making the execution of a complex task less difficult, as well as reducing the necessary time to accomplish it. Notice that both goals are related, a simple construction process, implies a shorter development time. In this sense, the goal established for this Ph.D. project is to simplify the compilers construction process. To achieve this goal, the usage of a data centred approach based on a framework is proposed, relying upon the two main contributions of this thesis. The first one is a code representation model that introduces new concepts and features, to simplify the construction of compiler components and to make them more efficient. The second and main contribution is an architecture that establishes the behaviour and the relationship between the code representation elements and the compilers components. This architecture makes the compilation process more efficient and simplifies the reuse of the components by hiding many implementation details, namely related with components consistency and dependencies. Another important outcome of this work is a platform for compilers development, the Dolphin framework, that was implemented to test and validate the code representation model and the proposed architecture.Programa de Desenvolvimento Educativo para Portugal III (PRODEP III) - concurso número 4, acção 5.3 - Programa de Formação Avançada de Docentes do Ensino Superior - Bolsas de Doutorament

    Simple and Efficient BURS Table Generation

    No full text
    corecore