How to use COINS
Contents
- +/-
1. How to use COINS Infrastructure
- 1.1. Getting Overview of the Compiler Infrastructure
- 1.2. Structure of COINS Compiler Infrastructure
- 1.2.1. Overall Structure
- 1.2.2. Classes and Interfaces
- 1.3. Construction of a Compiler based on the COINS infrastructure
- 1.3.1. Compiler Control
- 1.3.2. Getting Triggers of Intermediate Representation
- 1.3.3. Symbol Handling
- 1.3.3.1. Factory Methods
- 1.3.3.2. Subprograms, Variables, Constants
- 1.3.3.3. Symbol Table
- 1.3.3.4. Scope of Symbols
- 1.3.3.5. SymRoot
- 1.3.3.6. Type
- 1.3.3.7. Generation of Temporal Variables and Labels
- 1.3.3.8. Representation of Symbol in Text Form
- 1.3.4. HIR Handling
- 1.3.4.1. Getting Information of HIR
- 1.3.4.2. Representation of HIR in Text Form
- 1.3.4.3. Normal Construction of HIR
- 1.3.4.4. Top down Construction of HIR
- 1.3.4.5. Construction by Sequence of Statements
- 1.3.4.6. Note on HIR Construction and Transformation
- 1.3.4.7. Indispensable Items and Optional Items
- 1.4. Test Program Suite
- 1.4.1. Overview
- 1.4.2. Automatic test
- 1.4.2.1. Sparc
- 1.4.2.2. Intel x86 and others
- 1.4.3. Prepare expected results
- 1.4.3.1. Sparc
- 1.4.3.2. Intel x86 and others
- 1.5. Visualization Tools
- 1.5.1. CoVis: Visualiztion tools for HIR/LIR
- 1.5.2. Trace of the code generation process
- +/-
2. How to use the Compiler Driver
- 2.1. Target, Range, and Structure of this Document
- 2.2. COINS Compiler Driver
- 2.2.1. The design
- 2.2.2. Structure
- 2.3. How to Use the CLI Driver
- 2.3.1. CLI Driver
- 2.3.2. Command Syntax
- 2.3.3. Options
- 2.3.4. -coins Options
- 2.3.5. Input Files
- 2.3.6. Exit Status
- 2.3.7. Some Simple Examples
- 2.4. The Driver API
- 2.4.1. Driver User Interface
- 2.4.2. Driver Implementation
- 2.4.3. Compile Specification
- 2.4.4. Tracer API
- 2.4.5. Warning API
- 2.4.6. Library Directory
- 2.4.7. Property File
- 2.4.8. Suffix Rules
- 2.4.9. `settings' File
- 2.5. Known Bugs and Restrictions
- 2.5.1. Known bugs
- 2.5.2. Restrictions
- +/-
3. How to use C Compiler
- 3.1. How to Compile this Compiler
- 3.2. How to Execute the Compiler
- 3.2.1. Short Descriptions
- 3.2.2. Required Software
- 3.3. Source language
- 3.3.1. C language
- 3.3.2. "asm" statement
- 3.3.2.1. HIR of "asm" statement
- 3.3.2.2. LIR of "asm" statement
- 3.4. Automatic Test of the Compiler
- +/-
4. How to use Fortran 77 Compiler
- 4.1. Introduction
- 4.2. Installation and Setup
- 4.2.1. libf2c Installation
- 4.2.2. Fortran Driver Setup
- 4.3. Usage
- 4.4. Bugs and Limitations
- 4.4.1. Language Specifications
- 4.4.2. Driver Usage
- +/-
5. Optimization for HIR
- 5.1. Overview of HIR Optimization
- 5.2. HIR Basic Optimization
- 5.2.1. Overview of basic optimization
- 5.2.2. Optimizers for basic optimization
- 5.2.2.1. Constant folding
- 5.2.2.2. Constant propagation and folding
- 5.2.2.3. Dead code elimination
- 5.2.2.4. Local common subexpression elimination
- 5.2.2.5. Global variable temporalization
- 5.2.3. Invocation of basic optimizers from your code
- 5.3. HIR Advanced Optimization
- 5.3.1. Overview of advanced optimization
- 5.3.2. Optimizers for advanced optimization
- 5.3.2.1. Loop expansion
- 5.3.2.2. Loop-if expansion
- 5.3.2.3. Inline expansion
- 5.3.2.4. Partial redundancy elimination
- 5.4. Optimization in C-front
- 5.5. HIR Flow Analysis
- 5.5.1. Overview of flow analysis
- 5.5.2. Flow analysis by coins.flow
- 5.5.2.1. Control flow analysis
- 5.5.2.2. Data flow analysis
- 5.5.2.3. Basic data flow information
- 5.5.2.4. Data structure
- 5.5.2.5. Usage
- 5.5.2.6. How to extend flow analysis
- 5.5.3. Flow analysis by coins.aflow
- 5.5.3.1. Flow information
- 5.5.3.2. How to use in your code
- 5.5.3.3. From command line
- 5.6. HIR Alias Analysis
- 5.6.1. Overview of alias analysis
- 5.6.2. How to use
- 5.7. References
- +/-
6. Parallelization for HIR
- 6.1. Loop Parallelizer
- 6.2. Coarse Grain Parallelizing Module
- 6.2.1. OVERVIEW
- 6.2.1.1. Design Concept
- 6.2.1.2. Data Structures
- 6.2.1.3. Scheduler
- 6.2.2. CONSTRAINTS OF CURRENT IMPLEMENTATION
- 6.2.3. HOW TO USE
- 6.2.4. OPTIONS
- +/-
7. Design and Structure of LIR
- 7.1. Design of LIR
- 7.2. Structure of LIR
- 7.3. Syntax and Semantics of LIR
- 7.3.1. Syntax of LIR
- 7.3.2. Semantics of LIR
- +/-
8. SSA Optimization for LIR
- 8.1. OVERVIEW
- 8.1.1. Introduction
- 8.1.2. Translation to SSA form
- 8.1.3. Back translation from SSA form
- 8.1.4. Optimization
- 8.1.5. Details
- 8.2. SSA OPTIONS
- References
- +/-
9. SIMD Parallelization for LIR
- 9.1. Introduction
- 9.2. Precise Description of SIMD Instructions
- 9.3. SIMD Parallelization
- 9.3.1 Methods of SIMD Parallelization
- 9.4. Data Size Inference
- 9.5. How to Use SIMD Parallelization
- 9.5.1. Options
- 9.5.2. Limitations and Cautions
- 9.6. SIMD Benchmark
- References
- +/-
10. Retargetable Code Generator
- 10.1. Backend Process
- 10.2. TMD: Target Machine Description
- 10.2.1. Machine Parameters
- 10.2.1.1. Data Types
- 10.2.1.2. List of Real Registers
- 10.2.1.3. Set of Registers
- 10.2.1.4. Nonterminals for Registers
- 10.2.1.5. Default Register set for Register Variables
- 10.2.2. Instruction Definitions
- 10.2.2.1. Start Symbol
- 10.2.2.2. Example of defrule-construct and Code Generation
- 10.2.2.3. "foreach" Macro Feature
- 10.2.2.4. defrule Form
- 10.2.2.5. defrewrite Form
- 10.2.3. Java Code
- 10.2.3.1. CodeGenerator Methods
- 10.2.3.2. %defbuild/%defemit Macro
- 10.2.3.3. LIR node in Java
- 10.2.4. Representation of Assembly Programs
- +/-
11. Structure and Extensions of the Backend Process
- 11.1. How to Call Backend Processes
- 11.2. How to Add New Process to Backend
- 11.2.1. Example 1: Instruction Scheduler
- 11.2.2. Example 2: Software Pipelining
- 11.2.3. Example 3: Register Promotion
- -/-
12. Performance of COINS compilers