PIPS is a source-to-source Fortran translator (Figure 1), Fortran still being the language of choice for most scientific applications. Beside standard Fortran 77, various dialects can be used as input (HPF ) or output (CMF , Fortran 77 with CRAY directives, Fortran 77 with HPF parallelism directives, etc.) to express parallelism or code/data distributions.
Figure 1: User view of the PIPS system.
Fortran can be seen here as a kind of portable language to run on various computers without having to deal with an assembly code back-end, although the PIPS infrastructure could be used as a basis to generate optimized assembly code. Other parsers or prettyprinters could be added and the internal representation could be extended if need be to cope with other imperative languages such as C.
Following the field research history, PIPS has first been used to improve
the vectorization of Fortran code for parallel vector computers with
shared memory (Fortran 77 with DOALL
, Fortran 77 with Cray
micro-tasking directives, Fortran 90). It is now mainly targeted at
generating code for distributed memory machines, using different methods
(processor and memory bank code for control distribution [1],
CMF , CRAFT polyhedral method [9] or message-passing
code from HPF [2]).
In PIPS , the translation process is broken into smaller modular independent operations called phases that communicate only by sharing resources (such as the module code, semantical information, etc.) stored in a resource manager PIPSDBM . Since PIPS is an interprocedural environment, procedures and functions are very important in PIPS and are indifferently referred to as modules in the sequel. For the user and the programmer, the phases can be classified into various categories according to their usage.
Figure 2: Programmer view of the PIPS system.
A first class of phases are called analyses and compute some internal information that can be later used to parallelize (or generate) some code, some user information (such as a program complexity measure) to be later displayed by a prettyprinter , etc. The most interesting analyses available in PIPS are the semantical analyses such as some predicates on some integer variables of the program [5] or the regions that describes some array elements [4].
Another important class is the set of the code generation phases that produce a new code from the information given by the analyses. Important code generators are the parallelizer, the code distributor [1] and the HPF compiler [3].
A third class contains the prettyprinters that transform and merge some internal PIPS resources (code, preconditions , etc.) in a user viewable file.
The last phases are called transformations because they modify the program code. The available transformations are loop distribution, scalar and array privatization based on regions [4], etc. In this article, we present a dead code elimination transformation.
All the resources about a program are kept in a workspace database with the help of PIPSDBM and the global coherence is insured with the interprocedural PIPSMAKE manager. More details can be found in [8].