sublime-project file
[pipstransfo.git] / pipstransfo.tex
1 \documentclass[pdftex, a4paper, 11pt]{report}
2
3 \usepackage[utf8]{inputenc}
4 \usepackage[T1]{fontenc}
5 \usepackage[english]{babel}
6
7 \usepackage{listings}
8 \usepackage{hyperref}
9
10
11 \title{PIPS - List of code transformations}
12
13
14
15 \begin{document}
16
17
18 \chapter{List of Pips transformations}
19
20 \section{Memory allocation alteration}
21
22 \section{Loop transformations}
23
24 \section{Inter-procedural transformations}
25
26 \section{Base blocs transformations}
27
28 \section{Dead code removal}
29
30
31
32
33 \begin{description}
34 \item[loop unrolling]{
35 is a loop transformation. Unrolling a loop by a factor of $n$ consists in the substitution of a loop
36 body by itself, replicated $n$ times. A prelude and/or postlude are
37 added to preserve the number of iteration.}
38
39 \item[inlining]{
40 is a function transformation. Inlining a function
41 \texttt{foo} in its caller \texttt{bar} consists in the substitution
42 of the calls to \texttt{foo} in \texttt{bar} by the function body
43 after replacement of the formal parameters by their effective
44 parameters.
45 }
46
47 \item[forward substitution]{
48 is the process of replacing a reference read in an
49 expression by the latest expression affected to it.}
50
51 \item[loop fusion]{
52 is a loop transformation that replaces two loops by a single loops whose
53 body is the concatenation of the bodies of the two initial loops.}
54
55 \item[loop tiling]{
56 is a loop nest transformation that changes the loop execution order
57 through a partitions of the iteration space into
58 chunks, so that the iteration is performed over each chunk and in the
59 chunks.}
60
61 \item[reduction detection]{
62 is an analysis that identifies statements that perform a reduction over a
63 variable.}
64
65 \item[parallelism detection]{
66 is a common name for analysis that detect if a loop can be run in parallel.}
67
68 \item[parallelism extraction]{
69 is a common name for code transformations that modifies loop nest to make it legal to
70 run them in parallel.}
71
72 \item[directive generation]{
73 is a common name for code transformations that annotate the code with directives.}
74
75 \item[constant propagation]{
76 is a pass that replaces a variable by its value when this value is
77 known at compile time.}
78
79 \item[instruction selection]{
80 is the process of mapping parts of the IR to machine instructions.}
81
82 \item[goto elimination]{
83 is the process of replacing \texttt{goto} instructions by a hierarchical control flow
84 graph.}
85 \item[outlining]{
86 is the process of extracting part of a function body into a new function
87 and replacing it in the initial function by a function call.}
88
89 \item[common subexpression elimination]{
90 is the process of replacing similar expressions by a variable that holds
91 the result of their evaluation.}
92
93 \item[loop interchange]{is a loop transformation that permutes two
94 loops from a loop nest.}
95
96 \item[loop unswitching]{is a loop transformation that replaces a
97 loop containing a test independent from the loop execution by a test
98 containing the loop without the test in both true and false branch.}
99
100 \item[statement isolation]{is the process of replacing all
101 variables referenced in a statement by newly declared variables. A
102 prologue
103 and an epilogue are added to copy old variable values to new variable, back
104 and forth.}
105
106 \item[dead code elimination]{is the process of pruning from a
107 function all the statements whose results are
108 never used.}
109
110 \item[array linearization]{is the process of converting
111 multidimensional array into unidimensional arrays, possibly with a
112 conversion from array to pointer.}
113
114 \item[privatization]{is the process of detecting variables that
115 are private to a loop body, i.e.\ written first, then read.}
116
117 \item[loop normalization]{is a loop transformation that changes
118 the loop initial increment value or the loop range to enforce certain values, generally
119 1.}
120
121 \item[iteration clamping]{is a loop transformation that extends
122 the loop range but guards the loop body with the former range.}
123
124 \item[flatten code]{is the process of pruning a function body from
125 declaration blocks so that all declarations are made at the top level.}
126
127 \item[strength reduction]{is the process of replacing an operation
128 by an operation of lower cost.}
129
130 \item[split update operator]{is the process of replacing an update
131 operator by its expanded form.}
132
133 \item[n address code generation]{is the process of splitting
134 complex expression in simpler ones that take at most $n$ operands.}
135
136 \item[memory footprint reduction]{is the process of tiling a loop
137 to make sure the iteration over the tile has a memory footprint bounded by
138 a given value.}
139
140 \item[redundant load-store elimination]{is an inter procedural transformation
141 that optimizes data transfers by delaying and merging them.}
142
143 \item[invariant code motion]{is a loop transformation that moves outside
144 of the loop
145 the code from its body that is independent from the iteration.}
146
147
148
149 \item[loop rerolling]{finds manually unrolled loop and replace
150 them by their non-unrolled version.}
151 \end{description}
152
153 \end{document}