Some options could be passed to PROMISE to control the
transformations of the program being compiled using
lcc option -Wm. There is also additional lcc option -M
preventing call to PROMISE so actually lcc -M means 'lcc
without PROMISE'.
PROMISE options are divided into the three sets: general
options, options controlling intraprocedural optimizations
and interprocedural options.
General options are:
-l - prints list of function names in current module
-v - prints optimization profile for current module
(see below)
-g def;def;... - defines group of functions. Each
def has the form group_id=func_id,func_id,... where
group_id is group identifier, func_ids are identifiers of
functions in current module
Intraprocedural options are:
-p spec;spec;... - specify optimization
profile. Optimization profile allows to define separate set
of transformations for each function (or group of
functions). Option -v could be used to check whether
PROMISE has understood you correctly. spec has the
form group_id=pass,pass,..., where group_id
is group identifier (see option -g definition above)
or function identifier, pass - optimization pass
identifier. Note that there is special group *
denoting all the functions in the current
module that do not belong to either group. Optimization
pass identifier is one of the
following:
ssa - perform transformation to
SSA
cp - perform constant
propagation
dce - perform dead code elimination
(actually eliminates dead assignments)
cse - perform common subexpressions
elimination
line - perform jump
optimization
dump - dump intermediate program
representation
Additionally unreachable code is eliminated before the
start of any optimization. Note that phi-nodes
elimination is forced only during conversion back to pickle,
so it is possible to perform all of the optimizations over the SSA.
Interprocedural options are:
-ip pass,pass,... - specify interprocedural
passes. This option forces transformations over all the
functions in the current module and does not affect
optimization profile. Interprocedural passes are:
inline - perform inlining
icp - perform interprocedural constant
propagation
idce - perform interprocedural dead code elimination
(actually eliminates dead assignments)
Note that you must have main function in the
module being interprocedurally optimized since it is
required for call graph construction.
Examples:
lcc -Wm"-l" foo.c -c -o foo.o - print names of all
functions declared in foo.c
lcc -Wm"-g noopt=main -p *=ssa,cp,cse,dce" foo.c -c -o foo.o-
perform ssa, cp, cse and dce optimizations over the all
functions in foo.c except main.
|