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
SML/NJ Validate this page
Generated by mltex2html
Last modified: Thu Jan 9 19:38:15 EST 2003 by leunga@slinky