[LLVMdev] Alternate instruction sequences
Carlo Alberto Ferraris
cafxx at strayorange.com
Thu Nov 10 03:59:11 PST 2011
On Thu, 10 Nov 2011 10:46:27 +0100, Duncan Sands wrote:
> Hi Carlo, the general policy is to canonicalize IR to some particular
> choice. For example, if I1, I2, etc are all equivalent to each
> then usually one of them will have been chosen as the canonical form
> (say I1) and all the others will be turned into I1. If this is not
> the best choice for some target, then the code generators for that
> target need to transform it into something better for the target, but
> this is not at the IR level.
This might work for single instructions or simple instruction sequences
but doesn't apply to, let's say, regions. As an example, take a loop
that could be rewritten (unrolled, tiled, etc.) so that different
versions of the same loop have wildly different memory access patterns.
In this case, in order to choose the "best" version, the IR-level
transform would have to know the details of the cache/memory subsytems
of the current arch.
More information about the llvm-dev