This paper tries to answer the questions that what should be
if-converted and when. According to it, aggressively forming hyperblock
in early stages, and selectively doing reverse if-conversion in late
stages can improve the program performance a lot. When decide which
branches should be reverse if-converted, the authors attempt to convert
each branch, compare the performance with that before the conversion,
and choose the better one. Two key issues here are compilation time
and
code size. Several heuristics are used to reduce the total number of
instructions scheduled. Studies on the following directions may lead
to
some good results: schedulers more suitable to do exhaustive
search, heuristics generating more quality codes, techniques reducing
the code sizes.
---------------------------------------
The last several lines on page 28 say " this reuse reduces the total
number of schedules computed to 2p + 1, with ..."
It seems only the original heperblock is considered here.
For example, suppose the original hyperblock is A. We try a branch and
get two more blocks.
A
B C
If the split is confirmed, not only in B do we have rest branches to
check, but also in C. All unchecked possible points are duplicated
in
C. If we want to get a better final codes, the total number of schedules
computed may be far greater than 2p + 1.