Hi dexonsmith, gottesmm,

Currently, there is no good way to tell if the bitcode is compiled
with ARC or not. However, it is required to run objc-arc-contract
pass for ObjC ARC. Introduces a new module flag for ObjC-ARC and
use that to decide if objc-arc-contract pass is required or not.

http://reviews.llvm.org/D7799

Files:
  lib/CodeGen/BackendUtil.cpp
  lib/CodeGen/CGObjCMac.cpp

Index: lib/CodeGen/BackendUtil.cpp
===================================================================
--- lib/CodeGen/BackendUtil.cpp
+++ lib/CodeGen/BackendUtil.cpp
@@ -568,7 +568,7 @@
   // Add ObjC ARC final-cleanup optimizations. This is done as part of the
   // "codegen" passes so that it isn't run multiple times when there is
   // inlining happening.
-  if (LangOpts.ObjCAutoRefCount &&
+  if (TheModule->getModuleFlag("Objective-C ARC") &&
       CodeGenOpts.OptimizationLevel > 0)
     PM->add(createObjCARCContractPass());
 
Index: lib/CodeGen/CGObjCMac.cpp
===================================================================
--- lib/CodeGen/CGObjCMac.cpp
+++ lib/CodeGen/CGObjCMac.cpp
@@ -4283,6 +4283,13 @@
     }
   }
 
+  // Add ObjCAutoRefCount as a module flag
+  if (CGM.getLangOpts().ObjCAutoRefCount) {
+    // AutoRefCount will overwrites files which don't have ARC.
+    Mod.addModuleFlag(llvm::Module::Override,
+                      "Objective-C ARC", (uint32_t)1);
+  }
+
   // Indicate whether we're compiling this to run on a simulator.
   const llvm::Triple &Triple = CGM.getTarget().getTriple();
   if (Triple.isiOS() &&

EMAIL PREFERENCES
  http://reviews.llvm.org/settings/panel/emailpreferences/
Index: lib/CodeGen/BackendUtil.cpp
===================================================================
--- lib/CodeGen/BackendUtil.cpp
+++ lib/CodeGen/BackendUtil.cpp
@@ -568,7 +568,7 @@
   // Add ObjC ARC final-cleanup optimizations. This is done as part of the
   // "codegen" passes so that it isn't run multiple times when there is
   // inlining happening.
-  if (LangOpts.ObjCAutoRefCount &&
+  if (TheModule->getModuleFlag("Objective-C ARC") &&
       CodeGenOpts.OptimizationLevel > 0)
     PM->add(createObjCARCContractPass());
 
Index: lib/CodeGen/CGObjCMac.cpp
===================================================================
--- lib/CodeGen/CGObjCMac.cpp
+++ lib/CodeGen/CGObjCMac.cpp
@@ -4283,6 +4283,13 @@
     }
   }
 
+  // Add ObjCAutoRefCount as a module flag
+  if (CGM.getLangOpts().ObjCAutoRefCount) {
+    // AutoRefCount will overwrites files which don't have ARC.
+    Mod.addModuleFlag(llvm::Module::Override,
+                      "Objective-C ARC", (uint32_t)1);
+  }
+
   // Indicate whether we're compiling this to run on a simulator.
   const llvm::Triple &Triple = CGM.getTarget().getTriple();
   if (Triple.isiOS() &&
_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits

Reply via email to