Tim Frink wrote:> Based on that, they get one path through> the program that is executed most frequently.>> I'm now wondering what sort of optimizations can be performed to that> path.

A single instruction of a VLIW machine consists of a (fixed) number
of operations that the machine can execute in parallel. The operations
must be independent, i.e. one operation cannot use the output of
another as an input in the same cycle. This means that a VLIW machine
is potentially capable of impressive amounts of instruction level
parallelism, but only if the compiler is able to find it.

Typical basic blocks are relatively short, which limits the practical
amount of instruction level parallelism that the compiler can exploit.
So the trick that e.g. the Multiflow compiler used is to guess based
on the profiling information which basic blocks will usually be
executed in sequence, and do instruction scheduling (ordering of
instructions) on this larger region. Look up trace scheduling,
superblocks and hyperblocks for more information.

Since the IA-64 architecture can be thought of as VLIW-on-demand,
I suppose this is quite relevant there as well.
--
Pertti