[llvm-commits] [llvm-gcc-4.2] r84717 - in /llvm-gcc-4.2/trunk/gcc: config/darwin.h llvm-backend.cpp

Bill Wendling isanbard at gmail.com
Tue Oct 20 17:40:59 PDT 2009


Author: void
Date: Tue Oct 20 19:40:59 2009
New Revision: 84717

URL: http://llvm.org/viewvc/llvm-project?rev=84717&view=rev
Log:
Internal and CFString strings are aligned on a 16-byte boundary. This is
overkill.

Set an explicit alignment on internal and CFString strings. This alignment is 8
on 64-bit targets and 4 on 32-bit ones. Make this conditional so that each
platform may set their own alignment (or none, and keep the original llvm
behavior).

Modified:
    llvm-gcc-4.2/trunk/gcc/config/darwin.h
    llvm-gcc-4.2/trunk/gcc/llvm-backend.cpp

Modified: llvm-gcc-4.2/trunk/gcc/config/darwin.h
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/config/darwin.h?rev=84717&r1=84716&r2=84717&view=diff

==============================================================================
--- llvm-gcc-4.2/trunk/gcc/config/darwin.h (original)
+++ llvm-gcc-4.2/trunk/gcc/config/darwin.h Tue Oct 20 19:40:59 2009
@@ -698,10 +698,21 @@
       char *N = (char *)alloca(strlen(fmt) + 37);                       \
       sprintf(N, fmt, i++);                                             \
       GV->setName(N);                                                   \
+      GV->setAlignment(TARGET_64BIT ? 8 : 4);                           \
     }                                                                   \
   } while (0)
 /* LLVM LOCAL - end radar 6389998 */
 
+/* LLVM LOCAL - begin radar 7291825 */
+/* Give a constant string a sufficient alignment for the platform.  */
+#define TARGET_ADJUST_CSTRING_ALIGN(GV)                                 \
+  do {                                                                  \
+    if (GV->hasInternalLinkage()) {                                     \
+      GV->setAlignment(TARGET_64BIT ? 8 : 4);                           \
+    }                                                                   \
+  } while (0)
+/* LLVM LOCAL - end radar 7291825 */
+
 #endif
 /* LLVM LOCAL end */
 

Modified: llvm-gcc-4.2/trunk/gcc/llvm-backend.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/llvm-backend.cpp?rev=84717&r1=84716&r2=84717&view=diff

==============================================================================
--- llvm-gcc-4.2/trunk/gcc/llvm-backend.cpp (original)
+++ llvm-gcc-4.2/trunk/gcc/llvm-backend.cpp Tue Oct 20 19:40:59 2009
@@ -1406,8 +1406,16 @@
       unsigned TargetAlign =
         getTargetData().getABITypeAlignment(GV->getType()->getElementType());
       if (DECL_USER_ALIGN(decl) ||
-          8 * TargetAlign < (unsigned)DECL_ALIGN(decl))
+          8 * TargetAlign < (unsigned)DECL_ALIGN(decl)) {
         GV->setAlignment(DECL_ALIGN(decl) / 8);
+      }
+#ifdef TARGET_ADJUST_CSTRING_ALIGN
+      else if (DECL_INITIAL(decl) != error_mark_node && // uninitialized?
+               DECL_INITIAL(decl) &&
+               TREE_CODE(DECL_INITIAL(decl)) == STRING_CST) {
+        TARGET_ADJUST_CSTRING_ALIGN(GV);
+      }
+#endif
     }
 
     // Handle used decls





More information about the llvm-commits mailing list