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

Chris Lattner sabre at nondot.org
Fri Jul 24 11:34:28 PDT 2009


Author: lattner
Date: Fri Jul 24 13:34:27 2009
New Revision: 76989

URL: http://llvm.org/viewvc/llvm-project?rev=76989&view=rev
Log:
make SectionForGlobal non-virtual, add a hook for pic16 to do its "address=" hack.

Modified:
    llvm/trunk/include/llvm/Target/TargetAsmInfo.h
    llvm/trunk/lib/Target/PIC16/PIC16TargetAsmInfo.cpp
    llvm/trunk/lib/Target/PIC16/PIC16TargetAsmInfo.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=76989&r1=76988&r2=76989&view=diff

==============================================================================
--- llvm/trunk/include/llvm/Target/TargetAsmInfo.h (original)
+++ llvm/trunk/include/llvm/Target/TargetAsmInfo.h Fri Jul 24 13:34:27 2009
@@ -594,6 +594,19 @@
       return 0;
     }
     
+    /// SectionForGlobal - This hooks returns proper section name for given
+    /// global with all necessary flags and marks.
+    // FIXME: MOVE TO TARGETLOWERING.
+    const Section* SectionForGlobal(const GlobalValue *GV) const;
+    
+    /// getSpecialCasedSectionGlobals - Allow the target to completely override
+    /// section assignment of a global.
+    /// FIXME: ELIMINATE
+    virtual const Section *
+    getSpecialCasedSectionGlobals(const GlobalValue *GV,
+                                  SectionKind::Kind Kind) const{
+      return 0;
+    }
     
     /// SectionKindForGlobal - This hook allows the target to select proper
     /// section kind used for global emission.
@@ -601,10 +614,6 @@
     virtual SectionKind::Kind
     SectionKindForGlobal(const GlobalValue *GV) const;
 
-    /// SectionForGlobal - This hooks returns proper section name for given
-    /// global with all necessary flags and marks.
-// FIXME: Eliminate this.
-    virtual const Section* SectionForGlobal(const GlobalValue *GV) const;
 
     const std::string &getSectionFlags(unsigned Flags) const;
     virtual std::string printSectionFlags(unsigned flags) const { return ""; }

Modified: llvm/trunk/lib/Target/PIC16/PIC16TargetAsmInfo.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/PIC16/PIC16TargetAsmInfo.cpp?rev=76989&r1=76988&r2=76989&view=diff

==============================================================================
--- llvm/trunk/lib/Target/PIC16/PIC16TargetAsmInfo.cpp (original)
+++ llvm/trunk/lib/Target/PIC16/PIC16TargetAsmInfo.cpp Fri Jul 24 13:34:27 2009
@@ -203,15 +203,13 @@
 
   // First, if this is an automatic variable for a function, get the section
   // name for it and return.
-  const std::string name = GV->getName();
-  if (PAN::isLocalName(name)) {
+  std::string name = GV->getName();
+  if (PAN::isLocalName(name))
     return getSectionForAuto(GV);
-  }
 
   // Record Exteranl Var Defs.
-  if (GV->hasExternalLinkage() || GV->hasCommonLinkage()) {
+  if (GV->hasExternalLinkage() || GV->hasCommonLinkage())
     ExternalVarDefs->Items.push_back(GV);
-  }
 
   // See if this is an uninitialized global.
   const Constant *C = GV->getInitializer();
@@ -243,10 +241,12 @@
   delete ExternalVarDefs;
 }
 
-// Override the default implementation. Create PIC16sections for variables 
-// which have a section name or address.
-const Section* 
-PIC16TargetAsmInfo::SectionForGlobal(const GlobalValue *GV) const {
+
+/// getSpecialCasedSectionGlobals - Allow the target to completely override
+/// section assignment of a global.
+const Section *
+PIC16TargetAsmInfo::getSpecialCasedSectionGlobals(const GlobalValue *GV,
+                                                  SectionKind::Kind Kind) const{
   // If GV has a sectin name or section address create that section now.
   if (GV->hasSection()) {
     if (const GlobalVariable *GVar = cast<GlobalVariable>(GV)) {
@@ -260,9 +260,8 @@
       }
     }
   }
-  
-  // Use section depending on the 'type' of variable
-  return SelectSectionForGlobal(GV);
+
+  return 0;
 }
 
 // Create a new section for global variable. If Addr is given then create

Modified: llvm/trunk/lib/Target/PIC16/PIC16TargetAsmInfo.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/PIC16/PIC16TargetAsmInfo.h?rev=76989&r1=76988&r2=76989&view=diff

==============================================================================
--- llvm/trunk/lib/Target/PIC16/PIC16TargetAsmInfo.h (original)
+++ llvm/trunk/lib/Target/PIC16/PIC16TargetAsmInfo.h Fri Jul 24 13:34:27 2009
@@ -91,7 +91,13 @@
     const std::vector<PIC16Section*> &getROSections() const {
       return ROSections;
     }
-    virtual const Section *SectionForGlobal(const GlobalValue *GV) const;
+    
+    /// getSpecialCasedSectionGlobals - Allow the target to completely override
+    /// section assignment of a global.
+    virtual const Section *
+    getSpecialCasedSectionGlobals(const GlobalValue *GV,
+                                  SectionKind::Kind Kind) const;
+    
   };
 
 } // namespace llvm

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

==============================================================================
--- llvm/trunk/lib/Target/TargetAsmInfo.cpp (original)
+++ llvm/trunk/lib/Target/TargetAsmInfo.cpp Fri Jul 24 13:34:27 2009
@@ -263,10 +263,18 @@
 
 
 const Section *TargetAsmInfo::SectionForGlobal(const GlobalValue *GV) const {
-  // Select section name
+  SectionKind::Kind Kind = SectionKindForGlobal(GV);
+
+  // Select section name.
   if (GV->hasSection()) {
+    
+    // If the target has special section hacks for specifically named globals,
+    // return them now.
+    if (const Section *TS = getSpecialCasedSectionGlobals(GV, Kind))
+      return TS;
+    
     // Honour section already set, if any.
-    unsigned Flags = SectionFlagsForGlobal(GV, SectionKindForGlobal(GV));
+    unsigned Flags = SectionFlagsForGlobal(GV, Kind);
 
     // This is an explicitly named section.
     Flags |= SectionFlags::Named;
@@ -282,9 +290,8 @@
   // If this global is linkonce/weak and the target handles this by emitting it
   // into a 'uniqued' section name, create and return the section now.
   if (GV->isWeakForLinker()) {
-    if (const char *Prefix =
-          getSectionPrefixForUniqueGlobal(SectionKindForGlobal(GV))) {
-      unsigned Flags = SectionFlagsForGlobal(GV, SectionKindForGlobal(GV));
+    if (const char *Prefix = getSectionPrefixForUniqueGlobal(Kind)) {
+      unsigned Flags = SectionFlagsForGlobal(GV, Kind);
 
       // FIXME: Use mangler interface (PR4584).
       std::string Name = Prefix+GV->getNameStr();





More information about the llvm-commits mailing list