Programming Languages and Systems (TOPLAS)


Search Issue
enter search term and/or author name


ACM Transactions on Programming Languages and Systems (TOPLAS), Volume 16 Issue 4, July 1994

Transforming acyclic programs
Annalisa Bossi, Sandro Etalle
Pages: 1081-1096
DOI: 10.1145/183432.183434
An unfold/fold transformation system is a source-to-source rewriting methodology devised to improve the efficiency of a program. Any such transformation should preserve the main properties of the initial program: among them, termination. In the...

Static slicing in the presence of goto statements
Jong-Deok Choi, Jeanne Ferrante
Pages: 1097-1113
DOI: 10.1145/183432.183438
A static program slice is an extract of a program which can help our understanding of the behavior of the program; it has been proposed for use in debugging, optimization, parallelization, and integration of programs. This article considers two...

The definition of dependence distance
Michael Wolfe
Pages: 1114-1116
DOI: 10.1145/183432.183440
Several definitions of dependence distance can be found in the literature. A single coherent definition is the vector distance between the iteration vectors of two iterations involved in a dependence relation. Different ways to associate...

Optimal code motion: theory and practice
Jens Knoop, Oliver Rüthing, Bernhard Steffen
Pages: 1117-1155
DOI: 10.1145/183432.183443
An implementation-oriented algorithm for lazy code motion is presented that minimizes the number of computations in programs while suppressing any unnecessary code motion in order to avoid superfluous register pressure. In...

Avoidance and suppression of compensation code in a trace scheduling compiler
Stefan M. Freudenberger, Thomas R. Gross, P. Geoffrey Lowney
Pages: 1156-1214
DOI: 10.1145/183432.183446
Trace scheduling is an optimization technique that selects a sequence of basic blocks as a trace and schedules the operations from the trace together. If an operation is moved across basic block boundaries, one or more compensation copies may be...

Operational semantics-directed compilers and machine architectures
John Hannan
Pages: 1215-1247
DOI: 10.1145/183432.183458
We consider the task of automatically constructing intermediate-level machine architectures and compilers generating code for these architectures, given operational semantics for source languages. We use operational semantics in the form of...

Static analysis of upper and lower bounds on dependences and parallelism
William Pugh, David Wonnacott
Pages: 1248-1278
DOI: 10.1145/183432.183525
Existing compilers often fail to parallelize sequential code, even when a program can be manually transformed into parallel form by a sequence of well-understood transformations (as in the case for many of the Perfect Club Benchmark programs)....

Functions as passive constraints in LIFE
Hassan Aït-Kaci, Andreas Podelski
Pages: 1279-1318
DOI: 10.1145/183432.183526
LIFE is a programming language proposing to integrate logic programming, functional programming, and object-oriented programming. It replaces first-order terms with &psgr;-terms, data structures that allow computing with partial information....

Optimally profiling and tracing programs
Thomas Ball, James R. Larus
Pages: 1319-1360
DOI: 10.1145/183432.183527
This paper describes algorithms for inserting monitoring code to profile and trace programs. These algorithms greatly reduce the cost of measuring programs with respect to the commonly used technique of placing code in each basic block. Program...

Modular logic programming
Antonio Brogi, Paolo Mancarella, Dino Pedreschi, Franco Turini
Pages: 1361-1398
DOI: 10.1145/183432.183528
Modularity is a key issue in the design of modern programming languages. When designing modular features for declarative languages in general, and for logic programming languages in particular, the challenge lies in avoiding the superimposition...