Programs spend most of their time in loops and procedures. Therefore, most program transformations and the necessary static analyses deal with these. It has been long recognized, that different execution contexts for procedures may induce different execution properties. There are well established techniques for interprocedural analysis like the call string approach. Loops have not received similar attention in the area of data flow analysis and abstract interpretation. All executions are treated in the same way, although typically the first and later executions may exhibit very different properties. In this paper a new technique is presented that allows the application of the well known and established interprocedural analysis theory to loops. It turns out that the call string approach has limited flexibility in its possibilities to group several calling contexts together for the analysis. An extension to overcome this problem is presented that relies on a similar approach but gives more useful results in practice. The classical and the new techniques are implemented in our Program Analyzer Generator PAG, which is used to demonstrate our findings by applying the techniques to several real world programs.
[1]
book,et al.
Computer Architecture , a Quantitative Approach
,
1995
.
[2]
Bernhard Steffen,et al.
Property-Oriented Expansion
,
1996,
SAS.
[3]
Reinhard Wilhelm,et al.
Cache Behavior Prediction by Abstract Interpretation
,
1996,
SAS.
[4]
V. Rich.
Personal communication
,
1989,
Nature.
[5]
Barbara G. Ryder,et al.
Elimination algorithms for data flow analysis
,
1986,
CSUR.
[6]
David A. Patterson,et al.
Computer Architecture: A Quantitative Approach
,
1969
.
[7]
Martin Alt,et al.
Generation of Efficient Interprocedural Analyzers with PAG
,
1995,
SAS.