Superscalar and superpipelined processors utilize parallelism
to achieve peak performance that can be several times higher
than that of conventional scalar processors. In order for this
potential to be translated into the speedup of real programs,
the compiler must be able to schedule instructions so that the
parallel hardware is effectively utilized. Previous work has
shown that prepass code scheduling helps to produce a better
schedule for scientific programs. But the importance of
prescheduling has never been demonstrated for control-intensive
non-numeric programs. These programs are significantly
different from the scientific programs because they contain
frequent branches. The compiler must do global scheduling in
order to find enough independent instructions.
In this paper, the code optimizer and scheduler of
the IMPACT-I C compiler is described. Within this framework,
we study the importance of prepass code scheduling for a set
of production C programs. It is shown that, in contrast to
the results previously obtained for scientific programs,
prescheduling is not important for compiling control-intensive
programs to the current generation of superscalar and
superpipelined processors. However, if some of the current
restrictions on upward code motion can be removed in future
architectures, prescheduling would substantially improve the
execution time of this class of programs on both superscalar
and superpipelined processors.