[cfe-commits] r114618 - in /cfe/trunk: lib/CodeGen/TargetInfo.cpp test/CodeGen/arm-vector-arguments.c

Eli Friedman eli.friedman at gmail.com
Thu Sep 23 15:42:01 PDT 2010


On Wed, Sep 22, 2010 at 6:54 PM, Daniel Dunbar <daniel at zuster.org> wrote:
> Author: ddunbar
> Date: Wed Sep 22 20:54:28 2010
> New Revision: 114618
>
> URL: http://llvm.org/viewvc/llvm-project?rev=114618&view=rev
> Log:
> IRgen/ABI/ARM: Trust the backend to pass vectors correctly for the given ABI.
>  - Therefore, we can lower out the NEON wrapper structs and pass the vectors
>   directly. This makes a huge difference in the cleanliness of the IR after
>   optimization.
>  - I will trust, but verify, via future ABITest testing (for APCS-GNU, at
>   least).
>
> Added:
>    cfe/trunk/test/CodeGen/arm-vector-arguments.c
> Modified:
>    cfe/trunk/lib/CodeGen/TargetInfo.cpp
>
> Modified: cfe/trunk/lib/CodeGen/TargetInfo.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/TargetInfo.cpp?rev=114618&r1=114617&r2=114618&view=diff
> ==============================================================================
> --- cfe/trunk/lib/CodeGen/TargetInfo.cpp (original)
> +++ cfe/trunk/lib/CodeGen/TargetInfo.cpp Wed Sep 22 20:54:28 2010
> @@ -2272,6 +2272,17 @@
>   if (isRecordWithNonTrivialDestructorOrCopyConstructor(Ty))
>     return ABIArgInfo::getIndirect(0, /*ByVal=*/false);
>
> +  // NEON vectors are implemented as (theoretically) opaque structures wrapping
> +  // the underlying vector type. We trust the backend to pass the underlying
> +  // vectors appropriately, so we can unwrap the structs which generally will
> +  // lead to much cleaner IR.
> +  if (const Type *SeltTy = isSingleElementStruct(Ty, getContext())) {
> +    if (SeltTy->isVectorType())
> +      return ABIArgInfo::getDirect(CGT.ConvertType(QualType(SeltTy, 0)));
> +  }

Err, don't you actually need to check that the target supports NEON
and that the vectors in question are actually NEON vectors?

-Eli




More information about the cfe-commits mailing list