Optimization of expressions in Fortran
Communications of the ACM
Programming languages and their compilers: Preliminary notes
Programming languages and their compilers: Preliminary notes
Effective partial redundancy elimination
PLDI '94 Proceedings of the ACM SIGPLAN 1994 conference on Programming language design and implementation
A unified approach to global program optimization
POPL '73 Proceedings of the 1st annual ACM SIGACT-SIGPLAN symposium on Principles of programming languages
A program form based on data dependency in predicate regions
POPL '83 Proceedings of the 10th ACM SIGACT-SIGPLAN symposium on Principles of programming languages
An interactive program advising system
SIGCSE '76 Proceedings of the ACM SIGCSE-SIGCUE technical symposium on Computer science and education
An intermediate language for source and target independent code optimization
SIGPLAN '79 Proceedings of the 1979 SIGPLAN symposium on Compiler construction
A methodology for machine language decompilation
ACM '74 Proceedings of the 1974 annual conference - Volume 1
The switching reverse polise algorithm
ACM SIGPLAN Notices
Redundancy elimination revisited
Proceedings of the 17th international conference on Parallel architectures and compilation techniques
A high-level microprogramming language (MPL)
AFIPS '71 (Spring) Proceedings of the May 18-20, 1971, spring joint computer conference
Hi-index | 0.00 |
For purposes of code optimization there are two basic philosophies of expression analysis: one approach would attempt to do a relatively complete analysis, detecting all redundancies which are logically possible. The other approach would aim at those things which are easily detected and/or highly likely to occur. This paper gives a set of algorithms which derive from the latter philosophy but which are based on general properties rather than specific facts about a particular language or machine. The first section of the paper gives details of a notation used for describing code and defining algorithms. The most significant feature of this notation is that it allows operands to be complemented by any number of “complement operators”. This is done because most of the algorithms make frequent use of the properties of such operators. The second section describes a canonical form for expressions and a series of algorithms based on this form and the properties of complement operators. There are various facets of compiler structure which might bear on the exact usage of these algorithms. Although such considerations are not part of the scope of this paper, occasional comments are made about the relationship of an algorithm to other parts of a compiler. The third section contains a discussion of how these algorithms would fit within an overall optimizer structure.