On 10/3/12 2:53 AM, Konstantin Tokarev wrote:
Hi all,
What values of "pri", "first_pass_pri", "last_pass_pri" mean?
These numbers means the priorities of passes. Here is how creduce
invokes these passes:
- first runs passes which have "first_pass_pri" values;
- then enters the main delta loop, where passes with "pri" values are
invoked in the ascending order of those values. At the beginning of each
iteration of the main loop, creduce records the size the code under
reduction, e.g., size_a. After all "pri" passes are exercised, creduce
compares the size of the reduced code (e.g., size_b) with size_a. If
size_b is less than size_a, creduce will do another iteration, i.e.,
runs all "pri" passes; otherwise, we exists the main delta loop and get
to the last phase. In other words, the main delta loop keeps doing
reduction until reaching a fixpoint. Here the fixpoint is the code size.
- passes with "last_pass_pri" values run only in the last phase.
These passes do some cleaning work, e.g., renaming function, renaming
variables, etc.
For example, let's say we have the following passes:
A1{first_pass_pri = 1} , A2 {first_pass_pri = 2}, A3 {first_pass_pri
= 3}
B1 {pri = 1}, B2 {pri = 2}, B3 {pri = 3}
C1 {last_pass_pri = 1}, C2 {last_pri = 2}
Then the passes will be executed like the following order:
first phase: A1 -> A2 -> A3
main loop:
iteration 1: B1 -> B2 ->B3 (size comparison, succeeded)
iteration 2: B1 -> B2 -> B3 (size comparison, succeeded)
iteration 3: B1 -> B2 -> B3 (size comparison, reaching fixpoint, and
leaving from the main loop)
last phase: C1 -> C2
All done.
If I have passes A and B, how do I make creduce run them in order A, B, A?
If A and B *only* belong to "pri" passes, then you cannot have an order
such as "A, B, A", rather you will have "A, B, A, B". But alternatively,
we could have "A, B, A" order by doing something like:
A {first_pass_pri = 1, pri = 1}
B {pri = 2}
Then you will end up with "A, A, B, A, B...". But I guess this might not
be what you want...
- Yang