[cfe-commits] [PATCH] ARM AAPCS-VFP: fix handling of homogeneous aggregate.

Eli Friedman eli.friedman at gmail.com
Mon Oct 29 14:38:30 PDT 2012


On Mon, Oct 29, 2012 at 10:16 AM, manman ren <mren at apple.com> wrote:
>
> If Homogeneous Aggregate can only partially fit into VFP registers, we add padding to make sure
> HA will be on stack and later VFP CPRCs will be on stack as well.
>
> There is a discussion on whether we should use byval to pass things on stack:
> llvm-commits: ABI: how to let the backend know that an aggregate should be allocated on stack
>
> For now, the patch implemented what Eli suggested.

+      llvm::Type *PaddingTy = llvm::VectorType::get(
+          llvm::Type::getFloatTy(getVMContext()), NumVFPs - PreAllocation);

Using illegal vector types here isn't a good idea, even if it may work
for the moment.

+      it->info = ABIArgInfo::getDirect(0, 0, PaddingTy);

getExpandWithPadding would be a bit more clear here.

+        AllocatedVFP = llvm::RoundUpToAlignment(AllocatedVFP,
+                       getContext().getTypeSize(Base) == 64 ? 2 : 4);
+        AllocatedVFP += Members * (getContext().getTypeSize(Base) == 64 ? 2:4);

Use a separate variable for "getContext().getTypeSize(Base) == 64 ?
2:4".  Also, I'm not sure we can actually assume all vectors are
either 32-bit or 64-bit.

+      else {
+        AllocatedVFP = llvm::RoundUpToAlignment(AllocatedVFP, 2);
+        AllocatedVFP += Members * 2; // Base type is double.
+      }

Please assert that the base type is double or long double.

-Eli



More information about the cfe-commits mailing list