[LLVMdev] More AVX Advice Needed

David Greene dag at cray.com
Wed Dec 2 15:33:24 PST 2009


On Wednesday 02 December 2009 17:24, Eli Friedman wrote:
> On Wed, Dec 2, 2009 at 3:08 PM, David Greene <dag at cray.com> wrote:
> > On Wednesday 02 December 2009 16:51, Eli Friedman wrote:
> >> On Wed, Dec 2, 2009 at 2:44 PM, David Greene <dag at cray.com> wrote:
> >> > I'm working on some of the AVX insert/extract instructions.  They're
> >> > stupid.  They do not operate on ymm registers, meaning we have to
> >> > use VINSERTF128/VEXTRACTF128 and then do the real operation.
> >> >
> >> > Anyway, I'm looking at how INSERTPS and friends work and noticed that
> >> > there are special SelectionDAG nodes for them and corresponding
> >> > TableGen dag operators (X86insrtps, for example).
> >> >
> >> > What's the reason for using special dag operators as opposed to
> >> > intrinsics?
> >>
> >> INSERTPS isn't an intrinsic because there's a standard way to
> >> represent the operation, and we try to avoid adding intrinsics when
> >> possible.
> >
> > I don't get it.  How is X86insrtps "standard?"  It looks just like an
> > intrinsic to me.
>
> X86insrtps is roughly equivalent to the LLVM IR instruction
> insertelement, so there's no need for an IR intrinsic.
> X86ISD::INSERTPS is an extra instruction for ISel; it's used inside
> the custom lowering for INSERT_VECTOR_ELT and VECTOR_SHUFFLE.

Yes, that's how I found out about it.  :)

Why not just use ISD::INSERT_VECTOR_ELT?

And what's the difference between vector_extract and extractelt in 
TargetSelectionDAG.td?  Ditto vector_insert vs. insertelt.

                               -Dave




More information about the llvm-dev mailing list