[LLVMdev] Vectors in structures

Alasdair Grant Alasdair.Grant at arm.com
Tue Sep 21 18:32:09 PDT 2010


Bob Wilson writes:
> Right.  The contents of the struct don't matter -- the spec is pretty
> clear about that -- so llvm uses vector types instead of doubles, but
> your spec definitely shows them being defined as structs.

It _says_ they are defined as structs - but it doesn't show them
in use, i.e. it doesn't show how a user of the NEON intrinsics is
supposed to be able to make any use of the fact that the types
are defined as structs rather than some completely opaque type.
All it does is explain why the mangling rule looks the way it does.

And whatever the effect of them being structs on the NEON intrinsics
programmer might be, it surely wouldn't prevent them being lowered
to native types when the struct-ness no longer mattered.  And I'd
have thought that would be in the front end.

> Beyond that, if you want any sort of cross-compiler portability, you
> don't want to write code for GCC's implementation.  GCC lets you freely
> intermix vector types, or at least integer vector types, as long as
> they have the same total size.

Yes, other problem cases might be

  int16x4_t x = { 1, 2, 3, 4 };        // gcc only?

  struct float4: float32x4_t { ... };  // armcc only?

We ought to be more specific about the portable subset, and give
more guidance on potential portability issues.  Probably that would
start with a common specification for the NEON intrinsics, independent
of any given ARM or GNU compiler release.

Al

-- IMPORTANT NOTICE: The contents of this email and any attachments are confidential and may also be privileged. If you are not the intended recipient, please notify the sender immediately and do not disclose the contents to any other person, use it for any purpose, or store or copy the information in any medium.  Thank you.




More information about the llvm-dev mailing list