Program Features
for loop is simple?
for loop is nested?
for loop is perfectly nested?
for loop has constant lower bound?
for loop has constant upper bound?
for loop has constant stride?
for loop has unit stride?
number of iterations in for loop
loop step within for loop
loop nest depth
no. of array references within loop
no. of instructions in loop
no. of load instructions in loop
no. of store instructions in loop
no. of compare instructions in loop
no. of branch instructions in loop
no. of divide instructions in loop
no. of call instructions in loop
no. of generic instructions in loop
no. of array instructions in loop
no. of memory copy instructions in loop
no. of other instructions in loop
no. of float variables in loop
no. of int variables in loop
both int and floats used in loop?
loop contains an if-construct?
loop contains an if statement in for-construct?
loop iterator is an array index?
all loop indices are constants?
array is accessed in a non-linear manner?
loop strides on leading array dimensions only?
loop has calls?
loop has branches?
loop has regular control fow?
Transformations used for small space
Loop unrolling with parameters 1, 2, 3, 4
Loop flattening
FOR loop normalization
Non-perfectly nested loop conversion
Break load constant instructions
Common subexpression elimination
Dead code elimination
Hoisting of loop invariants
IF hoisting
Move loop-invariant conditionals
Copy propagation
Transformations used for large space
Loop Unrolling with parameters 1, 2, 3, 4
Array Padding with parameters 0, 2, 4
Expression Tree Breakup with parameters 0, 1, 2, 3, 4
Splitting of deep FOR loops with parameters 1, 2, 3, 4
Reassociation
Control Simplification
Forward Propagation
Copy Propagation
Constant Propagation
Induction Variable Detection
Reduction Detection
MOD/REF Annotations
Privatisation
Scalarisation
Bounds Comparison Substitution
Common Subexpression Elimination
Dead Code Elimination
Elimination of unused symbols
Elimination of unused types
Hoisting of loop invariants
Bit Packing
IF Hoisting
Find FOR loops
Global variable privatisation
Reconstruct explicit array references
FOR Loop Normalisation
Unstructured control flow optimisation
Replace call-by-reference
Move loop-invariant conditionals
Scalarise constant array references
Aggressively scalarise constant array references
Kill redundant line marks
Turn imperfectly nested loops into perfectly nested loops
Array Delinearisation
Form Arrays
Chain multiple array references
Annotate array forms
Extract array upper bounds
Replace constant variables
Improve array bound information
Common Subexpression Elimination (no pointers)
Scalarisation
Mark constant variables
Fix address taken
Loop flattening
Dismantle TREE_FORs
Dismantle TREE_LOOPs
Dismantle TREE_BLOCKs
Dismantle array instructions
Dismantle multi-way branches
Dismantle min instructions
Dismantle max instructions
Dismantle abs instructions
Dismantle divfloor instructions
Dismantle divceil instructions
Dismantle divmod instructions
Dismantle memcpy instructions
Dismantle integer min instructions
Dismantle integer max instructions
Dismantle integer abs instructions
Dismantle composite float instructions
Dismantle composite float and integer instructions
Fix bad nodes
Strictly fix bad nodes
Constant Folding
Dismantle non-constant FORs
Dismantle TREE_FORs with spilled index variable
Dismantle TREE_FORs with modified index variable
Dismantle empty TREE_FORs
Lift call expressions
Dismantle TREE_BLOCKs with empty symbol table
Eliminate struct copies
Eliminate sub-variables
Globalise local static variables
Guard FORs
Break load constant instructions
Put in explicit load/stores for non-local variables
Eliminate enumeration types
All these transformations were applied source to source by using the SUIF1 compiler.
For more information on the SUIF1 compiler please go to
the SUIF1 compiler website.