[llvm-commits] CVS: llvm/lib/Transforms/IPO/Internalize.cpp

Chris Lattner lattner at cs.uiuc.edu
Wed Jan 18 16:40:51 PST 2006



Changes in directory llvm/lib/Transforms/IPO:

Internalize.cpp updated: 1.28 -> 1.29
---
Log message:

Don't internalize llvm.global[cd]tor unless there are uses of it.  This
unbreaks front-ends that don't use __main (like the new CFE).


---
Diffs of the changes:  (+9 -3)

 Internalize.cpp |   12 +++++++++---
 1 files changed, 9 insertions(+), 3 deletions(-)


Index: llvm/lib/Transforms/IPO/Internalize.cpp
diff -u llvm/lib/Transforms/IPO/Internalize.cpp:1.28 llvm/lib/Transforms/IPO/Internalize.cpp:1.29
--- llvm/lib/Transforms/IPO/Internalize.cpp:1.28	Tue Jan  3 13:13:17 2006
+++ llvm/lib/Transforms/IPO/Internalize.cpp	Wed Jan 18 18:40:39 2006
@@ -109,7 +109,7 @@
   // Never internalize the llvm.used symbol.  It is used to implement
   // attribute((used)).
   ExternalNames.insert("llvm.used");
-        
+  
   // Never internalize anchors used by the debugger, else the debugger won't
   // find them.
   ExternalNames.insert("llvm.dbg.translation_units");
@@ -125,13 +125,19 @@
       // the list if it's empty.
       //
       if (I->hasAppendingLinkage() && (I->getName() == "llvm.global_ctors" ||
-                                       I->getName() == "llvm.global_dtors"))
+                                       I->getName() == "llvm.global_dtors")) {
         I->setConstant(true);
+        
+        // If the global ctors/dtors list has no uses, do not internalize it, as
+        // there is no __main in this program, so the asmprinter should handle
+        // it.
+        if (I->use_empty()) continue;
+      }
       
       I->setLinkage(GlobalValue::InternalLinkage);
       Changed = true;
       ++NumGlobals;
-      DEBUG(std::cerr << "Internalizing gvar " << I->getName() << "\n");
+      DEBUG(std::cerr << "Internalized gvar " << I->getName() << "\n");
     }
       
   return Changed;






More information about the llvm-commits mailing list