[llvm-commits] [127876] Explicitly set alignment for Objective-C protocols.

dpatel at apple.com dpatel at apple.com
Thu May 31 14:56:53 PDT 2007


Revision: 127876
Author:   dpatel
Date:     2007-05-31 14:56:52 -0700 (Thu, 31 May 2007)

Log Message:
-----------
Explicitly set alignment for Objective-C protocols.
Set Global Value alignment if it is specified by User.

Modified Paths:
--------------
    apple-local/branches/llvm/gcc/llvm-backend.cpp
    apple-local/branches/llvm/gcc/objc/objc-act.c

Modified: apple-local/branches/llvm/gcc/llvm-backend.cpp
===================================================================
--- apple-local/branches/llvm/gcc/llvm-backend.cpp	2007-05-31 20:27:28 UTC (rev 127875)
+++ apple-local/branches/llvm/gcc/llvm-backend.cpp	2007-05-31 21:56:52 UTC (rev 127876)
@@ -68,8 +68,6 @@
 #include "langhooks.h"
 }
 
-extern int flag_next_runtime;
-
 // Non-zero if bytecode from PCH is successfully read.
 int flag_llvm_pch_read;
 
@@ -735,17 +733,17 @@
     } else if (const char *Section = 
                 LLVM_IMPLICIT_TARGET_GLOBAL_VAR_SECTION(decl)) {
       GV->setSection(Section);
-      // Next runtime expects 4 byte alignment for Objective-C data.
-      if (flag_next_runtime)
-        GV->setAlignment(4);
 #endif
     }
     
-    // Set the alignment for the global.
-    if (DECL_ALIGN_UNIT(decl) && 
-        getTargetData().getABITypeAlignment(GV->getType()->getElementType()) !=
-        DECL_ALIGN_UNIT(decl))
-      GV->setAlignment(DECL_ALIGN_UNIT(decl));
+    // Set the alignment for the global if one of the following condition is met
+    // 1) DECL_ALIGN_UNIT does not match alignment as per ABI specification
+    // 2) DECL_ALIGN is set by user.
+    if (DECL_ALIGN_UNIT(decl)) {
+      unsigned TargetAlign = getTargetData().getABITypeAlignment(GV->getType()->getElementType());
+      if (DECL_USER_ALIGN(decl) || TargetAlign != DECL_ALIGN_UNIT(decl))
+        GV->setAlignment(DECL_ALIGN_UNIT(decl));
+    }
 
     // Handle used decls
     if (DECL_PRESERVE_P (decl))

Modified: apple-local/branches/llvm/gcc/objc/objc-act.c
===================================================================
--- apple-local/branches/llvm/gcc/objc/objc-act.c	2007-05-31 20:27:28 UTC (rev 127875)
+++ apple-local/branches/llvm/gcc/objc/objc-act.c	2007-05-31 21:56:52 UTC (rev 127876)
@@ -9270,6 +9270,11 @@
 					     /* APPLE LOCAL radar 4695109 */
 					     UOBJC_PROTOCOL_EXT_decl, NULL_TREE);
       /* APPLE LOCAL end radar 4585769 - Objective-C 1.0 extensions */
+      /* APPLE LOCAL begin LLVM */
+      /* Force 4 byte alignment for protocols */
+      DECL_ALIGN(decl) = 32;
+      DECL_USER_ALIGN(decl) = 1;
+      /* APPLE LOCAL end LLVM */
       finish_var_decl (decl, initlist);
     }
 }





More information about the llvm-commits mailing list