1 \documentclass[pdftex,
a4paper,
11pt
]{report}
3 \usepackage[utf8
]{inputenc}
4 \usepackage[T1]{fontenc}
5 \usepackage[english
]{babel
}
12 \newcommand\PIPS{PIPS
\xspace}
15 \title{\PIPS~--- List of code transformations
}
27 % memory allocation alteration
29 % loop transformations
34 \item loop interchange
35 \item loop normalization
36 % inter procedural transformations
38 % basic bloc transformations
39 \item forward substitution
41 \item constant propagation
42 \item dead code elimination
45 \item array linearization
46 \item common subexpression elimination
47 \item directive generation
49 \item goto elimination
50 \item instruction selection
51 \item invariant code motion
52 \item iteration clamping
53 \item loop unswitching
54 \item memory footprint reduction
55 \item n adress code generation
57 \item parallelism detection
58 \item parallelism extraction
60 \item reduction detection
61 \item redundant load-store elimination
62 \item split update operator
63 \item statement isolation
64 \item strengh reduction
71 % memory allocation alteration
73 \item scalar/array expansion
74 \item scalar/array privatization
75 \item scalarization
% according to .pdf, not supported by Pips
76 \item variable copying
% not supported by Pips
77 % loop transformations
78 \item index set splitting
% not supported by Pips
79 \item loop peeling
% not supported by Pips
81 \item loop rerolling
% not supported by Pips
82 \item full loop unrolling
83 \item idiom recognition
84 \item unswitching
% not supported by Pips
85 \item loop fusion
% not supported by Pips
86 \item loop fission/loop distribution
87 \item loop normalization
88 \item unimodular loop transformation/hyperplane method
89 \item loop interchange
90 \item loop reversal
% not supported by Pips
92 \item non-unimodular loop transformation
93 \item strip-mining (loop sectionning)
94 \item loop coalescing/loop collapsing
% not supported by Pips
96 \item loop parallelization
97 \item loop vectorization
% not supported by Pips
98 \item loop invariant code motion
99 \item software pipelining
% not supported by Pips
100 \item locality increazing
101 % interprocedural transformations
102 \item loop embedding/loop jamming
% not supported by Pips
103 \item procedure inlining
% not supported by Pips
104 \item procedure cloning
105 % basic bloc transformations
107 \item forward expression substitution
108 \item induction variable substitution
% not supported by Pips
110 \item statement reordering
% not supported by Pips
111 \item expression optimization
112 \item partial redundancy elimination
114 \item unreachable code
115 \item semantically uneachable code
116 \item if and loop elimination
117 \item use-def elimination
118 \item constant propagation
121 \chapter{List of
\PIPS transformations
}
123 \section{Memory allocation alteration
}
127 \item[scalar renaming
]{is the process of renaming scalar variables to
128 suppress false data dependencies.
}
130 \item[privatization
]{is the process of detecting variables that are
131 private to a loop body, i.e.\ written first, then read.
}
136 \section{Loop transformations
}
140 \item[loop unrolling
]{
141 is a loop transformation.
142 Unrolling a loop by a factor of \(n\) consists in the substitution of a loop
143 body by itself, replicated \(n\) times. A prelude and/or postlude are
144 added to preserve the number of iteration.
}
147 is a loop transformation that replaces two loops by a single loops whose
148 body is the concatenation of the bodies of the two initial loops.
}
151 is a loop nest transformation that changes the loop execution order
152 through a partitions of the iteration space into
153 chunks, so that the iteration is performed over each chunk and in the
156 \item[loop interchange
]{is a loop transformation that permutes two
157 loops from a loop nest.
}
159 \item[loop unswitching
]{is a loop transformation that replaces a
160 loop containing a test independent from the loop execution by a test
161 containing the loop without the test in both true and false branch.
}
163 \item[loop normalization
]{is a loop transformation that changes
164 the loop initial increment value or the loop range to enforce certain values,
169 \section{Interprocedural transformations
}
171 \section{Base blocs transformations
}
173 \section{Dead code removal
}
182 is a function transformation. Inlining a function
183 \texttt{foo
} in its caller
\texttt{bar
} consists in the substitution
184 of the calls to
\texttt{foo
} in
\texttt{bar
} by the function body
185 after replacement of the formal parameters by their effective
189 \item[forward substitution
]{
190 is the process of replacing a reference read in an
191 expression by the latest expression affected to it.
}
197 \item[reduction detection
]{
198 is an analysis that identifies statements that perform a reduction over a
201 \item[parallelism detection
]{
202 is a common name for analysis that detect if a loop can be run in parallel.
}
204 \item[parallelism extraction
]{
205 is a common name for code transformations that modifies loop nest to make it legal to
206 run them in parallel.
}
208 \item[directive generation
]{
209 is a common name for code transformations that annotate the code with directives.
}
211 \item[constant propagation
]{
212 is a pass that replaces a variable by its value when this value is
213 known at compile time.
}
215 \item[instruction selection
]{
216 is the process of mapping parts of the IR to machine instructions.
}
218 \item[goto elimination
]{
219 is the process of replacing
\texttt{goto
} instructions by a hierarchical control flow
223 is the process of extracting part of a function body into a new function
224 and replacing it in the initial function by a function call.
}
226 \item[common subexpression elimination
]{
227 is the process of replacing similar expressions by a variable that holds
228 the result of their evaluation.
}
232 \item[statement isolation
]{is the process of replacing all
233 variables referenced in a statement by newly declared variables. A
235 and an epilogue are added to copy old variable values to new variable, back
238 \item[dead code elimination
]{is the process of pruning from a
239 function all the statements whose results are
242 \item[array linearization
]{is the process of converting
243 multidimensional array into unidimensional arrays, possibly with a
244 conversion from array to pointer.
}
247 \item[iteration clamping
]{is a loop transformation that extends
248 the loop range but guards the loop body with the former range.
}
250 \item[flatten code
]{is the process of pruning a function body from
251 declaration blocks so that all declarations are made at the top level.
}
253 \item[strength reduction
]{is the process of replacing an operation
254 by an operation of lower cost.
}
256 \item[split update operator
]{is the process of replacing an update
257 operator by its expanded form.
}
259 \item[n address code generation
]{is the process of splitting
260 complex expression in simpler ones that take at most \(n\) operands.
}
262 \item[memory footprint reduction
]{is the process of tiling a loop
263 to make sure the iteration over the tile has a memory footprint bounded by
266 \item[redundant load-store elimination
]{is an inter procedural transformation
267 that optimizes data transfers by delaying and merging them.
}
269 \item[invariant code motion
]{is a loop transformation that moves outside
271 the code from its body that is independent from the iteration.
}
275 \item[loop rerolling
]{finds manually unrolled loop and replace
276 them by their non-unrolled version.
}
281 \bibliographystyle{alpha
}