Global Value Numbering

CSU499 Project

Kartik Singhal

CSED NIT Calicut

Monday May 6, 2013


  • Problem Definition
  • Introduction
    • GVN
    • Known Algorithms
  • Work Done
    • Monsoon Semester 2012
    • Winter Semester 2013
  • Conclusion
  • Primary References
  • Credits

Problem Definition

To study global value numbering,
 a compiler optimization, in detail;

to review and compare known algorithms;

to implement one of the best among them;

and in the process,
 improve upon the algorithm if possible.

Global Value Numbering

Global value numbering (GVN) is a program analysis
 that categorizes expressions in the program
 that compute the same value.

This information can be used
 to remove redundant computations.

Known Algorithms

  • Kildall '73precise global analysis algorithm for program optimization

  • AWZ '88an efficient algorithm, uses a value graph to represent symbolic execution of program, uses SSA, remains incomplete.

  • RKS '99 - polynomial time algorithm, extended AWZ, more equivalences, optimal for acyclic programs,  remains incomplete.

  • Gargi '02  - proposed balanced algorithms, extends AWZ, discovers more equivalences but is still incomplete.

  • Gulwani '04 - polynomial time algorithm which is optimal if only equalities of bounded size are considered.

Work Done

Monsoon Semester 2012

  • Literature Survey on GVN to solidify understanding

  • Study of available compiler infrastructures, chose GCC
    for implementation (Popular, Industry-standard, Open Source)

  • High level study of GCC architecture:
    • Study of GCC IR forms - GENERIC, GIMPLE and RTL
    • Pipeline flow in GCC

  • A naïve implementation of constant propagation
    optimization for hands-on experience

Structure of GCC

Plugin Mechanism

Work Done

Winter Semester 2013

  • Choice of GVN algorithm for implementation

  • Study of GCC APIs for Pass Implementation

  • Actual implementation

Chosen Algorithm

A Simple Algorithm for Global Value Numbering
- N Saleena, Vineeth Paleri. 2013. arXiv:1303.1880

  • Completeness in terms of number of redundancies identified, same as that of Kildall '73

  • Value expression to represent a set of equivalent expressions

  • Simplicity in understanding

Study of GCC APIs

  • Using GCC version 4.6.3

  • Extensive study done to gain familiarity with GCC
    Application Programming Interface for pass implementation
    using GCC source code, GCC Internals Documentation
    and other online resources.

  • What helped:

Plugin Implementation

  • Simple Algorithm for GVN

  • For GCC version 4.6.3

  • Focused on verifying correctness and completeness
    without regard to efficiency in the first attempt.

  • Current implementation handles only linear code.

  • Pass applied after cfg pass.

  • Expression pools at all program points are maintained in
    a custom data structure and transfer function applied over
    them iteratively.

Test Program

After CFG pass

Dump produced by plugin (1/3)


Dump produced by plugin (2/3)


Dump produced by plugin


Challenges Faced

  • GCC is a long running (about 27 years!), production
    quality framework, and consists of over 4 millions LOC
    spread over more than 35,000 files; 
    which is a fairly
    difficult code base to understand.

    - Attending the IITB 
    workshop in summer 2012 got
      me started.

  • The GCC Internals Documentation, although about
    700 pages in length, is considered quite sparse in terms
    of completeness.

    - Getting 
    help over GCC mailing list and GCC dev IRC
    however slow in response at times, was
      a good experience.


  • Value numbering is studied in detail and multiple 
    known algorithms for global analysis evaluated for

  • Familiarity with functionality of GCC as a compiler
    research infrastructure gained including some
    understanding of GCC source code.

  • One of the algorithms implemented as a dynamic plugin
    for linear code.

  • The complete goals of the project were not met due to
    over-optimistic estimate of time required for implementation.
    Lack of documentation and some difficulty faced in getting
    timely help added to the delay.

Primary References

  • VanDrunen, T. J. 2004. Partial redundancy elimination for global value numbering. (Doctoral dissertation, Purdue University)
  • Gary A. Kildall. 1973. A unified approach to global program optimization. POPL '73. ACM, 194-206.
  • B. Alpern, M. N. Wegman, and F. K. Zadeck. 1988. Detecting equality of variables in programs. POPL '88. ACM, 1-11.
  • Rüthing, O., Knoop, J., & Steffen, B. 1999. Detecting equalities of variables: Combining efficiency with precision. Static Analysis, 848-848.
  • Karthik Gargi. 2002. A sparse algorithm for predicated global value numbering. PLDI '02. ACM, 45-56.
  • Gulwani, S., & Necula, G. 2004. A polynomial-time algorithm for global value numbering. Static Analysis, 703-1020.
  • Saleena Nabeezath, Vineeth Paleri. 2013. A Simple Algorithm for Global Value Numbering. arXiv:1303.1880.


global value numbering

By Kartik Singhal

global value numbering

  • 3,240