[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