[LLVMdev] LLVM Loop Vectorizer

Chris Lattner clattner at apple.com
Fri Oct 5 17:29:20 PDT 2012

On Oct 5, 2012, at 2:11 PM, "Villmow, Micah" <Micah.Villmow at amd.com> wrote:

> Is it possible to not make it 'Target*'? I'm spending a lot of time moving TargetData out, would hate to have to do it again at some point in the future for TargetVectorData. :)

There is an important difference here (and a common point of confusion) between TargetData and the the stuff Nadav is talking about.  TargetData has *never* really been about modeling stuff at the "lib target" level: it's a concrete class that can't be extended by a target, and its behavior is fully described by LangRef.  TargetData (now DataLayout!) is really an IR concept, not a target concept.  Obviously it is used to model things that are target specific (which is why I made the mistake of putting it where it is, and why other people continue to be confused by it) but it really is a completely different concept than what Nadav is talking about for getting cost information.  

The stuff at the "libtarget level" are meant to be subclassed by targets, and are needed to specify things that vary based on context and are not capable of being serialized into a string.  Consider a query like "how expensive is a shuffle with this type on this shuffle mask".  Clearly the only way to implement this is by having the target implement a virtual method call.

Another sore point (for me) is that TargetLoweringInfo is a terrible mish-mash of stuff that things like LSR and things like SelectionDagLowering need.  It definitely needs to be cleaned up and have some sanity beat into it (we don't want LSR thinking about MCExprs!), but this is a problem with the design of TargetLoweringInfo itself, not a problem with the concept of mid-level optimizers being parameterized by target information.


More information about the llvm-dev mailing list