Induction Variable Analysis with Delayed Abstractions

This paper presents the design of an induction variable analyzer suitable for the analysis of typed, low-level, three address representations in SSA form. At the heart of our analyzer is a new algorithm recognizing scalar evolutions. We define a representation called trees of recurrences that is able to capture different levels of abstractions: from the finer level that is a subset of the SSA representation restricted to arithmetic operations on scalar variables, to the coarser levels such as the evolution envelopes that abstract sets of possible evolutions in loops. Unlike previous work, our algorithm tracks induction variables without prior classification of a few evolution patterns: different levels of abstraction can be obtained on demand. The low complexity of the algorithm fits the constraints of a production compiler as illustrated by the evaluation of our implementation on standard benchmark programs.

[1]  D. Naishlos,et al.  Autovectorization in GCC , 2004 .

[2]  Diego Novillo Tree SSA A New Optimization Infrastructure for GCC , 2004 .

[3]  Utpal Banerjee,et al.  Loop Transformations for Restructuring Compilers: The Foundations , 1993, Springer US.

[4]  Kyle A. Gallivan,et al.  A unified framework for nonlinear dependence testing and symbolic analysis , 2004, ICS '04.

[5]  Peng Wu,et al.  Vectorization for SIMD architectures with alignment constraints , 2004, PLDI '04.

[6]  William Pugh,et al.  A practical algorithm for exact array dependence analysis , 1992, CACM.

[7]  Henry S. Warren,et al.  Hacker's Delight , 2002 .

[8]  Mike Paterson,et al.  Linear unification , 1976, STOC '76.

[9]  Michael Wolfe,et al.  High performance compilers for parallel computing , 1995 .

[10]  Raymond Lo,et al.  Loop induction variable canonicalization in parallelizing compilers , 1996, Proceedings of the 1996 Conference on Parallel Architectures and Compilation Technique.

[11]  Alfred V. Aho,et al.  Compilers: Principles, Techniques, and Tools , 1986, Addison-Wesley series in computer science / World student series edition.

[12]  Vikram S. Adve,et al.  LLVM: a compilation framework for lifelong program analysis & transformation , 2004, International Symposium on Code Generation and Optimization, 2004. CGO 2004..

[13]  Guang R. Gao,et al.  Designing the McCAT Compiler Based on a Family of Structured Intermediate Representations , 1992, LCPC.

[14]  Keshav Pingali,et al.  A singular loop transformation framework based on non-singular matrices , 1992, International Journal of Parallel Programming.

[15]  Eugene V. Zima,et al.  On computational properties of chains of recurrences , 2001, ISSAC '01.

[16]  Ken Kennedy,et al.  Optimizing Compilers for Modern Architectures: A Dependence-based Approach , 2001 .

[17]  Mark N. Wegman,et al.  Efficiently computing static single assignment form and the control dependence graph , 1991, TOPL.

[18]  Rudolf Eigenmann,et al.  Parallelization in the Presence of Generalized Induction and Reduction Variables , 1995 .

[19]  Michael Wolfe,et al.  Beyond induction variables: detecting and classifying sequences using a demand-driven SSA form , 1995, TOPL.

[20]  Michael Wolfe,et al.  Beyond induction variables , 1992, PLDI '92.

[21]  Constantine D. Polychronopoulos,et al.  Symbolic analysis for parallelizing compilers , 1996, TOPL.

[22]  Roberto Giacobazzi,et al.  Making abstract domains condensing , 2002, TOCL.

[23]  Jeffery von Ronne,et al.  SafeTSA: a type safe and referentially secure mobile-code representation based on static single assignment form , 2001, PLDI '01.

[24]  Antoine Mid The Octagon Abstract Domain , 2001 .

[25]  Martin Hopkins,et al.  XIL and YIL: The Intermediate Languages of TOBEY , 1995, Intermediate Representations Workshop.

[26]  Paul S. Wang,et al.  Chains of recurrences—a method to expedite the evaluation of closed-form functions , 1994, ISSAC '94.

[27]  Michael D. Ernst Papers from the 1995 ACM SIGPLAN workshop on Intermediate representations , 1995, POPL 1995.

[28]  Trevor Mudge,et al.  MiBench: A free, commercially representative embedded benchmark suite , 2001 .

[29]  Daniel Berlin High-Level Loop Optimizations for GCC , 2004 .

[30]  Philippe Granger,et al.  Static Analysis of Linear Congruence Equalities among Variables of a Program , 1991, TAPSOFT, Vol.1.

[31]  Jason Merrill Generic and gimple: A new tree represen-tation for entire functions , 2003 .

[32]  Antoine Miné,et al.  The octagon abstract domain , 2001, Proceedings Eighth Working Conference on Reverse Engineering.

[33]  Robert A. van Engelen,et al.  Efficient Symbolic Analysis for Optimizing Compilers , 2001, CC.

[34]  Eugene V. Zima,et al.  Multidimensional chains of recurrences , 1998, ISSAC '98.

[35]  D. Zhang,et al.  The value evolution graph and its use in memory reference analysis , 2004, Proceedings. 13th International Conference on Parallel Architecture and Compilation Techniques, 2004. PACT 2004..

[36]  Allen,et al.  Optimizing Compilers for Modern Architectures , 2004 .

[37]  Steven S. Muchnick,et al.  Advanced Compiler Design and Implementation , 1997 .

[38]  David A. Padua,et al.  Induction Variable Analysis without Idiom Recognition: Beyond Monotonicity , 2001, LCPC.