[cfe-commits] r114618 - in /cfe/trunk: lib/CodeGen/TargetInfo.cpp test/CodeGen/arm-vector-arguments.c
Daniel Dunbar
daniel at zuster.org
Thu Sep 23 18:52:16 PDT 2010
On Thu, Sep 23, 2010 at 3:42 PM, Eli Friedman <eli.friedman at gmail.com> wrote:
> 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?
I don't think so, I believe they both should be passed the same way in
both ABIs, but this gives cleaner IR. This assumes the backend honors
the ABI correctly, of course.
I don't know too much about the AAPCS ABI, however, so I could be wrong.
- Daniel
> -Eli
>
More information about the cfe-commits
mailing list