Technical Overview

Symbolic analysis:
Symbolic analysis is performed via symbolic interpretation. The values or ranges of values for each variable is tracked, and after interpreting each statement, its side effects are computed and the affected variables are modified, resulting in the creation of a new version for that variable. This variable versioning is implemented directly into the IR, as well as support for conditional algebra, allowing control sensitive information to be encoded into expressions of the IR.

Pointer Analysis:
PROMIS uses an effective and powerful axiom-based pointer analysis technique. Axioms are defined describing the inherent structural information about data structures and pointer variables are analyzed to collect data access path information, which is stored in the IR. Symbolic analysis and pointer analysis can aid one another (through the disambiguation of pointers and the control sensitive value information of pointer expressions), facilitating aggressive optimization.

Internal Representation (IR):
Our novel Internal Representation maintains all vital program structures and is common to both the frontend and backend. PROMIS employs a robust interface which hides the implementation details of IR data structures from the compiler developer, resulting in a highly modular compiler which can be easily interfaced to other front/backends.

Support for Java:
Adding a parser for Java Bytecode to the PROMIS front end will allow us to research the benefits of parallel optimizations in a Java context.

Frontend/Backend Integration:
Integrated compilation is achieved by the unified internal representation, which allows dependence information obtained in the frontend to propagate to the backend. The IR has three levels of representation and can be lowered or raised without loss of dependence information; a unique property of the PROMIS IR. High level analysis and transformation techniques can be seamlessly applied to the low-level IR.

Adaptive, Retargetable Code Generation:
Through the powerful, multi-level IR and the tightly integrated UMD (universal machine descriptor) module, PROMIS can be retargeted for a variety of RISC processors supporting ILP or multithreading. A powerful feature of PROMIS is its ability to generate adaptive code aimed at delivering high performance on systems whose resource availability changes dynamically.

C code generator:
Adding a C Code generator to the PROMIS will allow us to debug the PROMIS easily and evaluate the performance of PROMIS generated codes compared with other C compilers.

Support of IML:
Adding a routine which converts DOALL loops to callers of the iml_DOALL function will allow us to use the IML as one of implementations of parallel programming environment.

PROMIS Instruction Set Architecture (ISA):
Developing a Universal Machine Description will be used for PROMIS.

Graphical User Interface (GUI):
The PROMIS GUI provides both a graphical and textual view of the internal representation, aiding in user assisted optimization. In addition, a tree structure contains a snapshot of all internal variables and structures. It allows users to expand and collapse nodes, focusing on the pertinent areas of interest. A Statistic Collector window displays various performance characteristics throughout compilation, allowing users to see the effect of the optimizations in progress. GUI supports a variety of editing sessions for the compiler and application developer, and is readily customized for different programming styles and environments.