[llvm-commits] [llvm-gcc-4.2] r108910 - in /llvm-gcc-4.2/trunk/gcc: gimplify.c llvm-convert.cpp
Eric Christopher
echristo at apple.com
Tue Jul 20 13:09:48 PDT 2010
Author: echristo
Date: Tue Jul 20 15:09:48 2010
New Revision: 108910
URL: http://llvm.org/viewvc/llvm-project?rev=108910&view=rev
Log:
Propagate alignment information for vlas.
Modified:
llvm-gcc-4.2/trunk/gcc/gimplify.c
llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp
Modified: llvm-gcc-4.2/trunk/gcc/gimplify.c
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/gimplify.c?rev=108910&r1=108909&r2=108910&view=diff
==============================================================================
--- llvm-gcc-4.2/trunk/gcc/gimplify.c (original)
+++ llvm-gcc-4.2/trunk/gcc/gimplify.c Tue Jul 20 15:09:48 2010
@@ -1258,6 +1258,13 @@
args = tree_cons (NULL, DECL_SIZE_UNIT (decl), NULL);
t = built_in_decls[BUILT_IN_ALLOCA];
+ /* LLVM LOCAL begin add alloca alignment */
+ /* We may have specified an alignment on the alloca - store it on the
+ function call so that we can emit this later and not lose it. */
+ DECL_USER_ALIGN (t) = DECL_USER_ALIGN (decl);
+ DECL_ALIGN(t) = DECL_ALIGN(decl);
+ /* LLVM LOCAL end add alloca alignment */
+
t = build_function_call_expr (t, args);
t = fold_convert (ptr_type, t);
t = build2 (MODIFY_EXPR, void_type_node, addr, t);
Modified: llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp?rev=108910&r1=108909&r2=108910&view=diff
==============================================================================
--- llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp (original)
+++ llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp Tue Jul 20 15:09:48 2010
@@ -6629,7 +6629,15 @@
if (!validate_arglist(arglist, INTEGER_TYPE, VOID_TYPE))
return false;
Value *Amt = Emit(TREE_VALUE(arglist), 0);
- Result = Builder.CreateAlloca(Type::getInt8Ty(Context), Amt);
+ AllocaInst *AI = Builder.CreateAlloca(Type::getInt8Ty(Context), Amt);
+
+ // If this was originally a vla alloca find the alignment and set it
+ // on our alloca.
+ tree fndecl = get_callee_fndecl(exp);
+ unsigned align = DECL_ALIGN(fndecl) ? DECL_ALIGN(fndecl)/8 : 1;
+ AI->setAlignment(align);
+ Result = AI;
+
return true;
}
More information about the llvm-commits
mailing list