[llvm-commits] [llvm] r77142 - in /llvm/trunk: include/llvm/Target/TargetAsmInfo.h lib/Target/TargetAsmInfo.cpp

Chris Lattner sabre at nondot.org
Sun Jul 26 00:15:20 PDT 2009


Author: lattner
Date: Sun Jul 26 02:14:28 2009
New Revision: 77142

URL: http://llvm.org/viewvc/llvm-project?rev=77142&view=rev
Log:
make SectionKind keep track of whether a global had an explicit
section specified for it or not.

Modified:
    llvm/trunk/include/llvm/Target/TargetAsmInfo.h
    llvm/trunk/lib/Target/TargetAsmInfo.cpp

Modified: llvm/trunk/include/llvm/Target/TargetAsmInfo.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Target/TargetAsmInfo.h?rev=77142&r1=77141&r2=77142&view=diff

==============================================================================
--- llvm/trunk/include/llvm/Target/TargetAsmInfo.h (original)
+++ llvm/trunk/include/llvm/Target/TargetAsmInfo.h Sun Jul 26 02:14:28 2009
@@ -125,14 +125,19 @@
     };
     
   private:
-    Kind K : 7;
+    Kind K : 6;
     
     /// Weak - This is true if the referenced symbol is weak (i.e. linkonce,
     /// weak, weak_odr, etc).  This is orthogonal from the categorization.
     bool Weak : 1;
+    
+    /// ExplicitSection - This is true if the global had a section explicitly
+    /// specified on it.
+    bool ExplicitSection : 1;
   public:
     
     bool isWeak() const { return Weak; }
+    bool hasExplicitSection() const { return ExplicitSection; }
     
     bool isText() const { return K == Text; }
     
@@ -185,10 +190,12 @@
       return K == ReadOnlyWithRelLocal;
     }
     
-    static SectionKind get(Kind K, bool isWeak) {
+    static SectionKind get(Kind K, bool isWeak,
+                           bool hasExplicitSection = false) {
       SectionKind Res;
       Res.K = K;
       Res.Weak = isWeak;
+      Res.ExplicitSection = hasExplicitSection;
       return Res;
     }
   };

Modified: llvm/trunk/lib/Target/TargetAsmInfo.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/TargetAsmInfo.cpp?rev=77142&r1=77141&r2=77142&view=diff

==============================================================================
--- llvm/trunk/lib/Target/TargetAsmInfo.cpp (original)
+++ llvm/trunk/lib/Target/TargetAsmInfo.cpp Sun Jul 26 02:14:28 2009
@@ -217,27 +217,26 @@
   return Flags;
 }
 
-static SectionKind SectionKindForGlobal(const GlobalValue *GV,
-                                        const TargetMachine &TM) {
+static SectionKind::Kind SectionKindForGlobal(const GlobalValue *GV,
+                                              const TargetMachine &TM) {
   Reloc::Model ReloModel = TM.getRelocationModel();
-  bool isWeak = GV->isWeakForLinker();
   
   // Early exit - functions should be always in text sections.
   const GlobalVariable *GVar = dyn_cast<GlobalVariable>(GV);
   if (GVar == 0)
-    return SectionKind::get(SectionKind::Text, isWeak);
+    return SectionKind::Text;
 
   
   // Handle thread-local data first.
   if (GVar->isThreadLocal()) {
     if (isSuitableForBSS(GVar))
-      return SectionKind::get(SectionKind::ThreadBSS, isWeak);
-    return SectionKind::get(SectionKind::ThreadData, isWeak);
+      return SectionKind::ThreadBSS;
+    return SectionKind::ThreadData;
   }
 
   // Variable can be easily put to BSS section.
   if (isSuitableForBSS(GVar))
-    return SectionKind::get(SectionKind::BSS, isWeak);
+    return SectionKind::BSS;
 
   Constant *C = GVar->getInitializer();
   
@@ -253,16 +252,16 @@
       // If initializer is a null-terminated string, put it in a "cstring"
       // section if the target has it.
       if (isConstantString(C))
-        return SectionKind::get(SectionKind::MergeableCString, isWeak);
+        return SectionKind::MergeableCString;
       
       // Otherwise, just drop it into a mergable constant section.  If we have
       // a section for this size, use it, otherwise use the arbitrary sized
       // mergable section.
       switch (TM.getTargetData()->getTypeAllocSize(C->getType())) {
-      case 4:  return SectionKind::get(SectionKind::MergeableConst4, isWeak);
-      case 8:  return SectionKind::get(SectionKind::MergeableConst8, isWeak);
-      case 16: return SectionKind::get(SectionKind::MergeableConst16, isWeak);
-      default: return SectionKind::get(SectionKind::MergeableConst, isWeak);
+      case 4:  return SectionKind::MergeableConst4;
+      case 8:  return SectionKind::MergeableConst8;
+      case 16: return SectionKind::MergeableConst16;
+      default: return SectionKind::MergeableConst;
       }
       
     case Constant::LocalRelocation:
@@ -270,22 +269,22 @@
       // the relocation entries will actually be constants by the time the app
       // starts up.
       if (ReloModel == Reloc::Static)
-        return SectionKind::get(SectionKind::ReadOnly, isWeak);
+        return SectionKind::ReadOnly;
               
       // Otherwise, the dynamic linker needs to fix it up, put it in the
       // writable data.rel.local section.
-      return SectionKind::get(SectionKind::ReadOnlyWithRelLocal, isWeak);
+      return SectionKind::ReadOnlyWithRelLocal;
               
     case Constant::GlobalRelocations:
       // In static relocation model, the linker will resolve all addresses, so
       // the relocation entries will actually be constants by the time the app
       // starts up.
       if (ReloModel == Reloc::Static)
-        return SectionKind::get(SectionKind::ReadOnly, isWeak);
+        return SectionKind::ReadOnly;
       
       // Otherwise, the dynamic linker needs to fix it up, put it in the
       // writable data.rel section.
-      return SectionKind::get(SectionKind::ReadOnlyWithRel, isWeak);
+      return SectionKind::ReadOnlyWithRel;
     }
   }
 
@@ -295,16 +294,16 @@
   // globals together onto fewer pages, improving the locality of the dynamic
   // linker.
   if (ReloModel == Reloc::Static)
-    return SectionKind::get(SectionKind::DataNoRel, isWeak);
+    return SectionKind::DataNoRel;
 
   switch (C->getRelocationInfo()) {
   default: llvm_unreachable("unknown relocation info kind");
   case Constant::NoRelocation:
-    return SectionKind::get(SectionKind::DataNoRel, isWeak);
+    return SectionKind::DataNoRel;
   case Constant::LocalRelocation:
-    return SectionKind::get(SectionKind::DataRelLocal, isWeak);
+    return SectionKind::DataRelLocal;
   case Constant::GlobalRelocations:
-    return SectionKind::get(SectionKind::DataRel, isWeak);
+    return SectionKind::DataRel;
   }
 }
 
@@ -315,7 +314,11 @@
   assert(!GV->isDeclaration() && !GV->hasAvailableExternallyLinkage() &&
          "Can only be used for global definitions");
   
-  SectionKind Kind = SectionKindForGlobal(GV, TM);
+  SectionKind::Kind GVKind = SectionKindForGlobal(GV, TM);
+  
+  SectionKind Kind = SectionKind::get(GVKind, GV->isWeakForLinker(),
+                                      GV->hasSection());
+
 
   // Select section name.
   if (GV->hasSection()) {





More information about the llvm-commits mailing list