A method for analyzing and optimizing programs that contain pointers or
aggregates or both, such as found in the languages C, C++, FORTRAN-90,
Ada, and Java is disclosed. The program is represented as a control flow
graph. The method applies to storage locations (lvalues) computed by
instructions in a program. The data flow analysis distinguishes when a
definition might reach a use, and if so, whether the expression defining
the address of the defined lvalue may have changed. The method ignores
changes to the addressing expression where a definition does not reach.
The lattice values and functions employed by the analysis are compactly
represented as packed bit vectors, and operated upon in a parallel bitwise
fashion. Despite the generality of definitions that define lvalues
specified by expressions, the present invention computes the reachability
of the definitions with a single data-flow framework that requires only
one fixed-point solution per data-flow problem.
Un método para analizar y optimizar los programas que contienen indicadores o los agregados o ambos, tales como encontrado en las idiomas C, C++, FORTRAN-90, el Ada, y Java se divulga. Se representa el programa como un gráfico del flujo del control. El método aplica al almacenaje las localizaciones (lvalues) computadas por instrucciones en un programa. Los datos flujo análisis distinguen cuando una definición pudo alcanzar un uso, y si es así si la expresión que define la dirección del lvalue definido pudo haber cambiado. El método no hace caso de cambios a la expresión de dirección adonde una definición no alcanza. Los valores y las funciones del enrejado empleados por el análisis compacto se representan como vectores embalados del pedacito, y funcionado sobre en un paralelo forme bitwise. A pesar de la generalidad de las definiciones que definen los lvalues especificaron por las expresiones, los actuales cálculos de la invención el reachability de las definiciones con un solo marco del flujo de datos que requiere solamente una solución de punto fijo por problema del flujo de datos.