[cfe-commits] Alignment of return from __builtin_alloca
Chandler Carruth
chandlerc at google.com
Thu Jun 7 14:32:26 PDT 2012
This seems generally fine to me, although I'd like John or someone to
confirm it's the right behavior on Darwin.
Also, you need test cases. =]
On Thu, Jun 7, 2012 at 2:23 PM, David Sehr <sehr at google.com> wrote:
> All,
>
> I have recently been debugging a failure with one of the tests from
> the gcc torture test suite and discovered that gcc and llvm seem to
> differ on whether __builtin_alloca is aligned more than 0mod4 (gcc
> thinks it's aligned by what clang stores inTargetInfo::SuitableAlign).
> Below is a patch that (1) changes the alignment of __builtin_alloca
> for all targets, (2) adds setting SuitableAlign to the PNaCl target,
> and (3) fixes the size and alignment of v128 for PNaCl. Please let me
> know how to proceed.
>
> David
>
> ----
> Index: lib/Basic/Targets.cpp
> ===================================================================
> --- lib/Basic/Targets.cpp (revision 158168)
> +++ lib/Basic/Targets.cpp (working copy)
> @@ -3888,6 +3888,7 @@
> this->LongWidth = 32;
> this->PointerAlign = 32;
> this->PointerWidth = 32;
> + this->SuitableAlign = 128;
> this->IntMaxType = TargetInfo::SignedLongLong;
> this->UIntMaxType = TargetInfo::UnsignedLongLong;
> this->Int64Type = TargetInfo::SignedLongLong;
> @@ -3899,7 +3900,7 @@
> this->IntPtrType = TargetInfo::SignedInt;
> this->RegParmMax = 2;
> DescriptionString = "e-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-"
> - "f32:32:32-f64:64:64-p:32:32:32-v128:32:32";
> + "f32:32:32-f64:64:64-p:32:32:32-v128:128:128";
> }
>
> void getDefaultFeatures(llvm::StringMap<bool> &Features) const {
> Index: lib/CodeGen/CGBuiltin.cpp
> ===================================================================
> --- lib/CodeGen/CGBuiltin.cpp (revision 158168)
> +++ lib/CodeGen/CGBuiltin.cpp (working copy)
> @@ -536,7 +536,9 @@
> case Builtin::BIalloca:
> case Builtin::BI__builtin_alloca: {
> Value *Size = EmitScalarExpr(E->getArg(0));
> - return RValue::get(Builder.CreateAlloca(Builder.getInt8Ty(), Size));
> + AllocaInst *Alloca = Builder.CreateAlloca(Builder.getInt8Ty(), Size);
> + Alloca->setAlignment(CGM.getTarget().getSuitableAlign() / 8);
> + return RValue::get(Alloca);
> }
> case Builtin::BIbzero:
> case Builtin::BI__builtin_bzero: {
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20120607/dd45c8ed/attachment.html>
More information about the cfe-commits
mailing list