MLRISC

MLRISC Contributors Requirements How to Obtain MLRISC

Overview

Problem Statement Contributions MLRISC Based Compiler MLRISC Intermediate Representation MLRisc Generation Back End Optimizations Register Allocation Machine Description Garbage Collection Safety System Integration Optimizations Graphical Interface Line Counts Systems Using MLRISC Future Work

System

Architecture of MLRISC The MLTREE Language MLTree Extensions MLTree Utilities Instruction Selection Assemblers Machine Code Emitters Delay Slot Filling Span Dependency Resolution The Graph Library The Graph Visualization Library Basic Compiler Graphs The MLRISC IR SSA Optimizations ILP Optimizations Optimizations for VLIW/EPIC Architectur... Register Allocator

Back Ends

The Alpha Back End The PA RISC Back End The Sparc Back End The Intel x86 Back End The PowerPC Back End The MIPS Back End The TI C6x Back End

Basic Types

Annotations Cells Cluster Client Defined Constants Client Defined Pseudo Ops Instructions Instruction Streams Label Expressions Labels Regions Regmap

# Cluster

A cluster represents a compilation unit in linearized form, and contains information about the control flow, global annotations, block and edge execution frequencies, and live-in/live-out information.

Its signature is:

     signature FLOWGRAPH = sig
       structure C : CELLS
       structure I : INSTRUCTIONS
       structure P : PSEUDO_OPS
       structure W : FREQ
          sharing I.C = C

       datatype block =
           PSEUDO of P.pseudo_op
         | LABEL of Label.label
         | BBLOCK of
             { blknum      : int,
               freq        : W.freq ref,
               annotations : Annotations.annotations ref,
     	  liveIn      : C.cellset ref,
     	  liveOut     : C.cellset ref,
     	  succ 	      : edge list ref,
     	  pred 	      : edge list ref,
     	  insns	      : I.instruction list ref
             }
         | ENTRY of
             {blknum : int, freq : W.freq ref, succ : edge list ref}
         | EXIT of
             {blknum : int, freq : W.freq ref, pred : edge list ref}
       withtype edge = block * W.freq ref

       datatype cluster =
           CLUSTER of {
             blocks: block list,
             entry : block,
             exit  : block,
             regmap: C.regmap,
             blkCounter : int ref,
             annotations : Annotations.annotations ref
           }
     end

Clusters are used in span dependency resolution, delay slot filling, assembly, and machine code output, since these phases require the code laid out in linearized form.

Lal George
Allen Leung

Generated by mltex2html
Last modified: Fri Oct 11 18:19:52 UTC 2019 by buildd@x86-grnet-02