On Thu, Sep 23, 2010 at 3:42 PM, Eli Friedman <[email protected]> wrote: > On Wed, Sep 22, 2010 at 6:54 PM, Daniel Dunbar <[email protected]> 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 > _______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
