[llvm-commits] [llvm] r77184 - in /llvm/trunk: include/llvm/Target/ lib/CodeGen/ lib/CodeGen/AsmPrinter/ lib/Target/ lib/Target/ARM/ lib/Target/ARM/AsmPrinter/ lib/Target/CellSPU/ lib/Target/MSP430/ lib/Target/Mips/ lib/Target/PIC16/ lib/Target/PowerPC/ lib/Target/PowerPC/AsmPrinter/ lib/Target/Sparc/ lib/Target/SystemZ/ lib/Target/X86/ lib/Target/X86/AsmPrinter/ lib/Target/XCore/

Chris Lattner sabre at nondot.org
Sun Jul 26 22:32:17 PDT 2009


Author: lattner
Date: Mon Jul 27 00:32:16 2009
New Revision: 77184

URL: http://llvm.org/viewvc/llvm-project?rev=77184&view=rev
Log:
Eliminate SectionFlags, just embed a SectionKind into Section
instead and drive things based off of that.

Modified:
    llvm/trunk/include/llvm/Target/ELFTargetAsmInfo.h
    llvm/trunk/include/llvm/Target/TargetAsmInfo.h
    llvm/trunk/lib/CodeGen/AsmPrinter/AsmPrinter.cpp
    llvm/trunk/lib/CodeGen/ELFWriter.cpp
    llvm/trunk/lib/CodeGen/ELFWriter.h
    llvm/trunk/lib/Target/ARM/ARMTargetAsmInfo.cpp
    llvm/trunk/lib/Target/ARM/AsmPrinter/ARMAsmPrinter.cpp
    llvm/trunk/lib/Target/CellSPU/SPUTargetAsmInfo.cpp
    llvm/trunk/lib/Target/DarwinTargetAsmInfo.cpp
    llvm/trunk/lib/Target/ELFTargetAsmInfo.cpp
    llvm/trunk/lib/Target/MSP430/MSP430TargetAsmInfo.cpp
    llvm/trunk/lib/Target/Mips/MipsTargetAsmInfo.cpp
    llvm/trunk/lib/Target/PIC16/PIC16AsmPrinter.cpp
    llvm/trunk/lib/Target/PIC16/PIC16TargetAsmInfo.cpp
    llvm/trunk/lib/Target/PowerPC/AsmPrinter/PPCAsmPrinter.cpp
    llvm/trunk/lib/Target/PowerPC/PPCTargetAsmInfo.cpp
    llvm/trunk/lib/Target/Sparc/SparcTargetAsmInfo.cpp
    llvm/trunk/lib/Target/Sparc/SparcTargetAsmInfo.h
    llvm/trunk/lib/Target/SystemZ/SystemZTargetAsmInfo.cpp
    llvm/trunk/lib/Target/TargetAsmInfo.cpp
    llvm/trunk/lib/Target/X86/AsmPrinter/X86ATTAsmPrinter.cpp
    llvm/trunk/lib/Target/X86/X86TargetAsmInfo.cpp
    llvm/trunk/lib/Target/X86/X86TargetAsmInfo.h
    llvm/trunk/lib/Target/XCore/XCoreTargetAsmInfo.cpp

Modified: llvm/trunk/include/llvm/Target/ELFTargetAsmInfo.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Target/ELFTargetAsmInfo.h?rev=77184&r1=77183&r2=77184&view=diff

==============================================================================
--- llvm/trunk/include/llvm/Target/ELFTargetAsmInfo.h (original)
+++ llvm/trunk/include/llvm/Target/ELFTargetAsmInfo.h Mon Jul 27 00:32:16 2009
@@ -31,19 +31,16 @@
     virtual const Section *
     getSectionForMergeableConstant(SectionKind Kind) const;
     
-    /// getFlagsForNamedSection - If this target wants to be able to infer
-    /// section flags based on the name of the section specified for a global
-    /// variable, it can implement this.  This is used on ELF systems so that
-    /// ".tbss" gets the TLS bit set etc.
-    virtual unsigned getFlagsForNamedSection(const char *Section) const;
+    virtual SectionKind::Kind getKindForNamedSection(const char *Section,
+                                                     SectionKind::Kind K) const;
+    void getSectionFlagsAsString(SectionKind Kind,
+                                 SmallVectorImpl<char> &Str) const;
     
     const char *getSectionPrefixForUniqueGlobal(SectionKind Kind) const;
     
     virtual const Section* SelectSectionForGlobal(const GlobalValue *GV,
                                                   SectionKind Kind) const;
-    virtual void getSectionFlags(unsigned Flags,
-                                 SmallVectorImpl<char> &Str) const;
-
+    
     const Section *DataRelSection;
     const Section *DataRelLocalSection;
     const Section *DataRelROSection;

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

==============================================================================
--- llvm/trunk/include/llvm/Target/TargetAsmInfo.h (original)
+++ llvm/trunk/include/llvm/Target/TargetAsmInfo.h Mon Jul 27 00:32:16 2009
@@ -22,6 +22,9 @@
 
 namespace llvm {
   template <typename T> class SmallVectorImpl;
+  class TargetMachine;
+  class GlobalValue;
+  class Mangler;
   
   // DWARF encoding query type
   namespace DwarfEncoding {
@@ -39,8 +42,12 @@
   ///
   /// The comments below describe these as if they were an inheritance hierarchy
   /// in order to explain the predicates below.
-  struct SectionKind {
+  class SectionKind {
+  public:
     enum Kind {
+      /// Metadata - Debug info sections or other metadata.
+      Metadata,
+      
       /// Text - Text section, used for functions and other executable code.
       Text,
       
@@ -140,6 +147,8 @@
     bool isWeak() const { return Weak; }
     bool hasExplicitSection() const { return ExplicitSection; }
     
+    
+    bool isMetadata() const { return K == Metadata; }
     bool isText() const { return K == Text; }
     
     bool isReadOnly() const {
@@ -191,7 +200,7 @@
       return K == ReadOnlyWithRelLocal;
     }
     
-    static SectionKind get(Kind K, bool isWeak,
+    static SectionKind get(Kind K, bool isWeak = false,
                            bool hasExplicitSection = false) {
       SectionKind Res;
       Res.K = K;
@@ -201,65 +210,18 @@
     }
   };
 
-  namespace SectionFlags {
-    const unsigned Invalid    = -1U;
-    const unsigned None       = 0;
-    const unsigned Code       = 1 << 0;  ///< Section contains code
-    const unsigned Writable   = 1 << 1;  ///< Section is writeable
-    const unsigned BSS        = 1 << 2;  ///< Section contains only zeroes
-    const unsigned Mergeable  = 1 << 3;  ///< Section contains mergeable data
-    const unsigned Strings    = 1 << 4;  ///< Section contains C-type strings
-    const unsigned TLS        = 1 << 5;  ///< Section contains thread-local data
-    const unsigned Debug      = 1 << 6;  ///< Section contains debug data
-    const unsigned Linkonce   = 1 << 7;  ///< Section is linkonce
-    const unsigned TypeFlags  = 0xFF;
-    // Some gap for future flags
-    
-    /// Named - True if this section should be printed with ".section <name>",
-    /// false if the section name is something like ".const".
-    const unsigned Named      = 1 << 23; ///< Section is named
-    const unsigned EntitySize = 0xFF << 24; ///< Entity size for mergeable stuff
-
-    static inline unsigned getEntitySize(unsigned Flags) {
-      return (Flags >> 24) & 0xFF;
-    }
-
-    // FIXME: Why does this return a value?
-    static inline unsigned setEntitySize(unsigned Flags, unsigned Size) {
-      return (Flags & ~EntitySize) | ((Size & 0xFF) << 24);
-    }
-
-    struct KeyInfo {
-      static inline unsigned getEmptyKey() { return Invalid; }
-      static inline unsigned getTombstoneKey() { return Invalid - 1; }
-      static unsigned getHashValue(const unsigned &Key) { return Key; }
-      static bool isEqual(unsigned LHS, unsigned RHS) { return LHS == RHS; }
-      static bool isPod() { return true; }
-    };
-  }
-
-  class TargetMachine;
-  class CallInst;
-  class GlobalValue;
-  class Type;
-  class Mangler;
-
   class Section {
     friend class TargetAsmInfo;
     friend class StringMapEntry<Section>;
     friend class StringMap<Section>;
 
     std::string Name;
-    unsigned Flags;
-    explicit Section(unsigned F = SectionFlags::Invalid) : Flags(F) { }
+    SectionKind Kind;
+    explicit Section() { }
 
   public:
-    unsigned getEntitySize() const { return (Flags >> 24) & 0xFF; }
-
     const std::string &getName() const { return Name; }
-    unsigned getFlags() const { return Flags; }
-    
-    bool hasFlag(unsigned F) const { return (Flags & F) != 0; }
+    SectionKind getKind() const { return Kind; }
   };
 
   /// TargetAsmInfo - This class is intended to be used as a base class for asm
@@ -678,9 +640,9 @@
     virtual ~TargetAsmInfo();
 
     const Section* getNamedSection(const char *Name,
-                                   unsigned Flags = SectionFlags::None) const;
+                                   SectionKind::Kind K) const;
     const Section* getUnnamedSection(const char *Directive,
-                                     unsigned Flags = SectionFlags::None) const;
+                                     SectionKind::Kind K) const;
 
     /// Measure the specified inline asm to determine an approximation of its
     /// length.
@@ -717,12 +679,13 @@
       return 0;
     }
     
-    /// getFlagsForNamedSection - If this target wants to be able to infer
+    /// getKindForNamedSection - If this target wants to be able to override
     /// section flags based on the name of the section specified for a global
     /// variable, it can implement this.  This is used on ELF systems so that
     /// ".tbss" gets the TLS bit set etc.
-    virtual unsigned getFlagsForNamedSection(const char *Section) const {
-      return 0;
+    virtual SectionKind::Kind getKindForNamedSection(const char *Section,
+                                                     SectionKind::Kind K) const{
+      return K;
     }
     
     /// SectionForGlobal - This method computes the appropriate section to emit
@@ -741,10 +704,11 @@
       return 0;
     }
     
-    /// Turn the specified flags into a string that can be printed to the
-    /// assembly file.
-    virtual void getSectionFlags(unsigned Flags,
-                                 SmallVectorImpl<char> &Str) const {
+    /// getSectionFlagsAsString - Turn the flags in the specified SectionKind
+    /// into a string that can be printed to the assembly file after the
+    /// ".section foo" part of a section directive.
+    virtual void getSectionFlagsAsString(SectionKind Kind,
+                                         SmallVectorImpl<char> &Str) const {
     }
 
 // FIXME: Eliminate this.

Modified: llvm/trunk/lib/CodeGen/AsmPrinter/AsmPrinter.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/AsmPrinter.cpp?rev=77184&r1=77183&r2=77184&view=diff

==============================================================================
--- llvm/trunk/lib/CodeGen/AsmPrinter/AsmPrinter.cpp (original)
+++ llvm/trunk/lib/CodeGen/AsmPrinter/AsmPrinter.cpp Mon Jul 27 00:32:16 2009
@@ -117,8 +117,8 @@
 
 /// SwitchToSection - Switch to the specified section of the executable if we
 /// are not already in it!
-void AsmPrinter::SwitchToSection(const Section* NS) {
-  const std::string& NewSection = NS->getName();
+void AsmPrinter::SwitchToSection(const Section *NS) {
+  const std::string &NewSection = NS->getName();
 
   // If we're already in this section, we're done.
   if (CurrentSection == NewSection) return;
@@ -135,20 +135,20 @@
     // If section is named we need to switch into it via special '.section'
     // directive and also append funky flags. Otherwise - section name is just
     // some magic assembler directive.
-    if (NS->hasFlag(SectionFlags::Named)) {
-      O << TAI->getSwitchToSectionDirective()
-        << CurrentSection;
-      
+    if (NS->getKind().hasExplicitSection()) {
       SmallString<32> FlagsStr;
-      TAI->getSectionFlags(NS->getFlags(), FlagsStr);
-      O << FlagsStr.c_str();
+      TAI->getSectionFlagsAsString(NS->getKind(), FlagsStr);
+
+      O << TAI->getSwitchToSectionDirective()
+        << CurrentSection
+        << FlagsStr.c_str();
     } else {
       O << CurrentSection;
     }
     O << TAI->getDataSectionStartSuffix() << '\n';
   }
 
-  IsInTextSection = (NS->getFlags() & SectionFlags::Code);
+  IsInTextSection = NS->getKind().isText();
 }
 
 void AsmPrinter::getAnalysisUsage(AnalysisUsage &AU) const {
@@ -404,7 +404,7 @@
   bool JTInDiffSection = false;
   if ((IsPic && !(LoweringInfo && LoweringInfo->usesGlobalOffsetTable())) ||
       !JumpTableDataSection ||
-      FuncSection->hasFlag(SectionFlags::Linkonce)) {
+      FuncSection->getKind().isWeak()) {
     // In PIC mode, we need to emit the jump table to the same section as the
     // function body itself, otherwise the label differences won't make sense.
     // We should also do if the section name is NULL or function is declared in

Modified: llvm/trunk/lib/CodeGen/ELFWriter.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/ELFWriter.cpp?rev=77184&r1=77183&r2=77184&view=diff

==============================================================================
--- llvm/trunk/lib/CodeGen/ELFWriter.cpp (original)
+++ llvm/trunk/lib/CodeGen/ELFWriter.cpp Mon Jul 27 00:32:16 2009
@@ -228,18 +228,18 @@
 
 // getElfSectionFlags - Get the ELF Section Header flags based
 // on the flags defined in ELFTargetAsmInfo.
-unsigned ELFWriter::getElfSectionFlags(unsigned Flags) {
+unsigned ELFWriter::getElfSectionFlags(SectionKind Kind) {
   unsigned ElfSectionFlags = ELFSection::SHF_ALLOC;
 
-  if (Flags & SectionFlags::Code)
+  if (Kind.isText())
     ElfSectionFlags |= ELFSection::SHF_EXECINSTR;
-  if (Flags & SectionFlags::Writable)
+  if (Kind.isWriteable())
     ElfSectionFlags |= ELFSection::SHF_WRITE;
-  if (Flags & SectionFlags::Mergeable)
+  if (Kind.isMergeableConst())
     ElfSectionFlags |= ELFSection::SHF_MERGE;
-  if (Flags & SectionFlags::TLS)
+  if (Kind.isThreadLocal())
     ElfSectionFlags |= ELFSection::SHF_TLS;
-  if (Flags & SectionFlags::Strings)
+  if (Kind.isMergeableCString())
     ElfSectionFlags |= ELFSection::SHF_STRINGS;
 
   return ElfSectionFlags;
@@ -293,7 +293,7 @@
 
     // Get ELF section from TAI
     const Section *S = TAI->SectionForGlobal(GV);
-    unsigned SectionFlags = getElfSectionFlags(S->getFlags());
+    unsigned SectionFlags = getElfSectionFlags(S->getKind());
 
     // The symbol align should update the section alignment if needed
     const TargetData *TD = TM.getTargetData();

Modified: llvm/trunk/lib/CodeGen/ELFWriter.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/ELFWriter.h?rev=77184&r1=77183&r2=77184&view=diff

==============================================================================
--- llvm/trunk/lib/CodeGen/ELFWriter.h (original)
+++ llvm/trunk/lib/CodeGen/ELFWriter.h Mon Jul 27 00:32:16 2009
@@ -34,6 +34,7 @@
   class TargetAsmInfo;
   class TargetELFWriterInfo;
   class raw_ostream;
+  class SectionKind;
 
   typedef std::vector<ELFSym*>::iterator ELFSymIter;
   typedef std::vector<ELFSection*>::iterator ELFSectionIter;
@@ -209,7 +210,7 @@
     unsigned getGlobalELFBinding(const GlobalValue *GV);
     unsigned getGlobalELFType(const GlobalValue *GV);
     unsigned getGlobalELFVisibility(const GlobalValue *GV);
-    unsigned getElfSectionFlags(unsigned Flags);
+    unsigned getElfSectionFlags(SectionKind Kind);
 
     // setGlobalSymLookup - Set global value 'GV' with 'Index' in the lookup map
     void setGlobalSymLookup(const GlobalValue *GV, unsigned Index) {

Modified: llvm/trunk/lib/Target/ARM/ARMTargetAsmInfo.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/ARMTargetAsmInfo.cpp?rev=77184&r1=77183&r2=77184&view=diff

==============================================================================
--- llvm/trunk/lib/Target/ARM/ARMTargetAsmInfo.cpp (original)
+++ llvm/trunk/lib/Target/ARM/ARMTargetAsmInfo.cpp Mon Jul 27 00:32:16 2009
@@ -59,8 +59,7 @@
   ARMTargetAsmInfo<ELFTargetAsmInfo>(TM) {
   Subtarget = &TM.getSubtarget<ARMSubtarget>();
 
-  BSSSection_ = getUnnamedSection("\t.bss",
-                                  SectionFlags::Writable | SectionFlags::BSS);
+  BSSSection_ = getUnnamedSection("\t.bss", SectionKind::BSS);
 
   NeedsSet = false;
   HasLEB128 = true;

Modified: llvm/trunk/lib/Target/ARM/AsmPrinter/ARMAsmPrinter.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/AsmPrinter/ARMAsmPrinter.cpp?rev=77184&r1=77183&r2=77184&view=diff

==============================================================================
--- llvm/trunk/lib/Target/ARM/AsmPrinter/ARMAsmPrinter.cpp (original)
+++ llvm/trunk/lib/Target/ARM/AsmPrinter/ARMAsmPrinter.cpp Mon Jul 27 00:32:16 2009
@@ -1130,9 +1130,10 @@
   const Section *TheSection = TAI->SectionForGlobal(GVar);
   SwitchToSection(TheSection);
 
+  // FIXME: get this stuff from section kind flags.
   if (C->isNullValue() && !GVar->hasSection() && !GVar->isThreadLocal() &&
       // Don't put things that should go in the cstring section into "comm".
-      !TheSection->hasFlag(SectionFlags::Strings)) {
+      !TheSection->getKind().isMergeableCString()) {
     if (GVar->hasExternalLinkage()) {
       if (const char *Directive = TAI->getZeroFillDirective()) {
         O << "\t.globl\t" << name << "\n";

Modified: llvm/trunk/lib/Target/CellSPU/SPUTargetAsmInfo.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/CellSPU/SPUTargetAsmInfo.cpp?rev=77184&r1=77183&r2=77184&view=diff

==============================================================================
--- llvm/trunk/lib/Target/CellSPU/SPUTargetAsmInfo.cpp (original)
+++ llvm/trunk/lib/Target/CellSPU/SPUTargetAsmInfo.cpp Mon Jul 27 00:32:16 2009
@@ -35,8 +35,7 @@
 
   // BSS section needs to be emitted as ".section"
   BSSSection = "\t.section\t.bss";
-  BSSSection_ = getUnnamedSection("\t.section\t.bss",
-                                  SectionFlags::Writable | SectionFlags::BSS);
+  BSSSection_ = getUnnamedSection("\t.section\t.bss", SectionKind::BSS);
 
   SupportsDebugInformation = true;
   NeedsSet = true;

Modified: llvm/trunk/lib/Target/DarwinTargetAsmInfo.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/DarwinTargetAsmInfo.cpp?rev=77184&r1=77183&r2=77184&view=diff

==============================================================================
--- llvm/trunk/lib/Target/DarwinTargetAsmInfo.cpp (original)
+++ llvm/trunk/lib/Target/DarwinTargetAsmInfo.cpp Mon Jul 27 00:32:16 2009
@@ -29,28 +29,29 @@
   : TargetAsmInfo(TM) {
 
   CStringSection_ = getUnnamedSection("\t.cstring",
-                                SectionFlags::Mergeable |SectionFlags::Strings);
+                                      SectionKind::MergeableCString);
   FourByteConstantSection = getUnnamedSection("\t.literal4\n",
-                                              SectionFlags::Mergeable);
+                                              SectionKind::MergeableConst4);
   EightByteConstantSection = getUnnamedSection("\t.literal8\n",
-                                               SectionFlags::Mergeable);
+                                               SectionKind::MergeableConst8);
 
   // Note: 16-byte constant section is subtarget specific and should be provided
   // there, if needed.
   SixteenByteConstantSection = 0;
 
-  ReadOnlySection = getUnnamedSection("\t.const", SectionFlags::None);
+  ReadOnlySection = getUnnamedSection("\t.const", SectionKind::ReadOnly);
 
   TextCoalSection =
     getNamedSection("\t__TEXT,__textcoal_nt,coalesced,pure_instructions",
-                    SectionFlags::Code);
+                    SectionKind::Text);
   ConstTextCoalSection = getNamedSection("\t__TEXT,__const_coal,coalesced",
-                                         SectionFlags::None);
+                                         SectionKind::Text);
   ConstDataCoalSection = getNamedSection("\t__DATA,__const_coal,coalesced",
-                                         SectionFlags::None);
-  ConstDataSection = getUnnamedSection("\t.const_data", SectionFlags::None);
+                                         SectionKind::Text);
+  ConstDataSection = getUnnamedSection("\t.const_data",
+                                       SectionKind::ReadOnlyWithRel);
   DataCoalSection = getNamedSection("\t__DATA,__datacoal_nt,coalesced",
-                                    SectionFlags::Writable);
+                                    SectionKind::DataRel);
     
   
   // Common settings for all Darwin targets.

Modified: llvm/trunk/lib/Target/ELFTargetAsmInfo.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ELFTargetAsmInfo.cpp?rev=77184&r1=77183&r2=77184&view=diff

==============================================================================
--- llvm/trunk/lib/Target/ELFTargetAsmInfo.cpp (original)
+++ llvm/trunk/lib/Target/ELFTargetAsmInfo.cpp Mon Jul 27 00:32:16 2009
@@ -27,28 +27,24 @@
 ELFTargetAsmInfo::ELFTargetAsmInfo(const TargetMachine &TM)
   : TargetAsmInfo(TM) {
 
-  BSSSection_ = getUnnamedSection("\t.bss",
-                                  SectionFlags::Writable | SectionFlags::BSS);
-  ReadOnlySection = getNamedSection("\t.rodata", SectionFlags::None);
-  TLSDataSection = getNamedSection("\t.tdata",
-                                   SectionFlags::Writable | SectionFlags::TLS);
-  TLSBSSSection = getNamedSection("\t.tbss",
-                SectionFlags::Writable | SectionFlags::TLS | SectionFlags::BSS);
+  ReadOnlySection = getNamedSection("\t.rodata", SectionKind::ReadOnly);
+  TLSDataSection = getNamedSection("\t.tdata", SectionKind::ThreadData);
+  TLSBSSSection = getNamedSection("\t.tbss", SectionKind::ThreadBSS);
 
-  DataRelSection = getNamedSection("\t.data.rel", SectionFlags::Writable);
+  DataRelSection = getNamedSection("\t.data.rel", SectionKind::DataRel);
   DataRelLocalSection = getNamedSection("\t.data.rel.local",
-                                        SectionFlags::Writable);
+                                        SectionKind::DataRelLocal);
   DataRelROSection = getNamedSection("\t.data.rel.ro",
-                                     SectionFlags::Writable);
+                                     SectionKind::ReadOnlyWithRel);
   DataRelROLocalSection = getNamedSection("\t.data.rel.ro.local",
-                                          SectionFlags::Writable);
+                                          SectionKind::ReadOnlyWithRelLocal);
     
   MergeableConst4Section = getNamedSection(".rodata.cst4",
-                  SectionFlags::setEntitySize(SectionFlags::Mergeable, 4));
+                                           SectionKind::MergeableConst4);
   MergeableConst8Section = getNamedSection(".rodata.cst8",
-                  SectionFlags::setEntitySize(SectionFlags::Mergeable, 8));
+                                           SectionKind::MergeableConst8);
   MergeableConst16Section = getNamedSection(".rodata.cst16",
-                  SectionFlags::setEntitySize(SectionFlags::Mergeable, 16));
+                                            SectionKind::MergeableConst16);
 }
 
 
@@ -98,28 +94,30 @@
 /// getFlagsForNamedSection - If this target wants to be able to infer
 /// section flags based on the name of the section specified for a global
 /// variable, it can implement this.
-unsigned ELFTargetAsmInfo::getFlagsForNamedSection(const char *Name) const {
-  unsigned Flags = 0;
-  if (Name[0] != '.') return 0;
+SectionKind::Kind ELFTargetAsmInfo::getKindForNamedSection(const char *Name,
+                                                   SectionKind::Kind K) const {
+  if (Name[0] != '.') return K;
   
   // Some lame default implementation based on some magic section names.
   if (strncmp(Name, ".gnu.linkonce.b.", 16) == 0 ||
       strncmp(Name, ".llvm.linkonce.b.", 17) == 0 ||
       strncmp(Name, ".gnu.linkonce.sb.", 17) == 0 ||
       strncmp(Name, ".llvm.linkonce.sb.", 18) == 0)
-    Flags |= SectionFlags::BSS;
-  else if (strcmp(Name, ".tdata") == 0 ||
-           strncmp(Name, ".tdata.", 7) == 0 ||
-           strncmp(Name, ".gnu.linkonce.td.", 17) == 0 ||
-           strncmp(Name, ".llvm.linkonce.td.", 18) == 0)
-    Flags |= SectionFlags::TLS;
-  else if (strcmp(Name, ".tbss") == 0 ||
-           strncmp(Name, ".tbss.", 6) == 0 ||
-           strncmp(Name, ".gnu.linkonce.tb.", 17) == 0 ||
-           strncmp(Name, ".llvm.linkonce.tb.", 18) == 0)
-    Flags |= SectionFlags::BSS | SectionFlags::TLS;
+    return SectionKind::BSS;
   
-  return Flags;
+  if (strcmp(Name, ".tdata") == 0 ||
+      strncmp(Name, ".tdata.", 7) == 0 ||
+      strncmp(Name, ".gnu.linkonce.td.", 17) == 0 ||
+      strncmp(Name, ".llvm.linkonce.td.", 18) == 0)
+    return SectionKind::ThreadData;
+  
+  if (strcmp(Name, ".tbss") == 0 ||
+      strncmp(Name, ".tbss.", 6) == 0 ||
+      strncmp(Name, ".gnu.linkonce.tb.", 17) == 0 ||
+      strncmp(Name, ".llvm.linkonce.tb.", 18) == 0)
+    return SectionKind::ThreadBSS;
+  
+  return K;
 }
 
 const char *
@@ -152,37 +150,36 @@
   if (Size <= 16) {
     assert(getCStringSection() && "Should have string section prefix");
 
-    // We also need alignment here
+    // We also need alignment here.
+    // FIXME: this is getting the alignment of the character, not the alignment
+    // of the string!!
     unsigned Align = TD->getPrefTypeAlignment(Ty);
     if (Align < Size)
       Align = Size;
 
     std::string Name = getCStringSection() + utostr(Size) + '.' + utostr(Align);
-    unsigned Flags = SectionFlags::setEntitySize(SectionFlags::Mergeable |
-                                                 SectionFlags::Strings,
-                                                 Size);
-    return getNamedSection(Name.c_str(), Flags);
+    return getNamedSection(Name.c_str(), SectionKind::MergeableCString);
   }
 
   return getReadOnlySection();
 }
 
-void ELFTargetAsmInfo::getSectionFlags(unsigned Flags,
-                                       SmallVectorImpl<char> &Str) const {
+void ELFTargetAsmInfo::getSectionFlagsAsString(SectionKind Kind,
+                                             SmallVectorImpl<char> &Str) const {
   Str.push_back(',');
   Str.push_back('"');
   
-  if (!(Flags & SectionFlags::Debug))
+  if (!Kind.isMetadata())
     Str.push_back('a');
-  if (Flags & SectionFlags::Code)
+  if (Kind.isText())
     Str.push_back('x');
-  if (Flags & SectionFlags::Writable)
+  if (Kind.isWriteable())
     Str.push_back('w');
-  if (Flags & SectionFlags::Mergeable)
+  if (Kind.isMergeableConst() || Kind.isMergeableCString())
     Str.push_back('M');
-  if (Flags & SectionFlags::Strings)
+  if (Kind.isMergeableCString())
     Str.push_back('S');
-  if (Flags & SectionFlags::TLS)
+  if (Kind.isThreadLocal())
     Str.push_back('T');
 
   Str.push_back('"');
@@ -195,16 +192,27 @@
     Str.push_back('@');
 
   const char *KindStr;
-  if (Flags & SectionFlags::BSS)
+  if (Kind.isBSS())
     KindStr = "nobits";
   else
     KindStr = "progbits";
   
   Str.append(KindStr, KindStr+strlen(KindStr));
 
-  if (unsigned entitySize = SectionFlags::getEntitySize(Flags)) {
+  if (Kind.isMergeableCString()) {
+    // TODO: Eventually handle multiple byte character strings.  For now, all
+    // mergable C strings are single byte.
+    Str.push_back(',');
+    Str.push_back('1');
+  } else if (Kind.isMergeableConst4()) {
+    Str.push_back(',');
+    Str.push_back('4');
+  } else if (Kind.isMergeableConst8()) {
+    Str.push_back(',');
+    Str.push_back('8');
+  } else if (Kind.isMergeableConst16()) {
     Str.push_back(',');
-    std::string Size = utostr(entitySize);
-    Str.append(Size.begin(), Size.end());
+    Str.push_back('1');
+    Str.push_back('6');
   }
 }

Modified: llvm/trunk/lib/Target/MSP430/MSP430TargetAsmInfo.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/MSP430/MSP430TargetAsmInfo.cpp?rev=77184&r1=77183&r2=77184&view=diff

==============================================================================
--- llvm/trunk/lib/Target/MSP430/MSP430TargetAsmInfo.cpp (original)
+++ llvm/trunk/lib/Target/MSP430/MSP430TargetAsmInfo.cpp Mon Jul 27 00:32:16 2009
@@ -18,6 +18,5 @@
   : ELFTargetAsmInfo(TM) {
   AlignmentIsInBytes = false;
     
-  BSSSection_ = getUnnamedSection("\t.bss",
-                                  SectionFlags::Writable | SectionFlags::BSS);
+  BSSSection_ = getUnnamedSection("\t.bss", SectionKind::BSS);
 }

Modified: llvm/trunk/lib/Target/Mips/MipsTargetAsmInfo.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Mips/MipsTargetAsmInfo.cpp?rev=77184&r1=77183&r2=77184&view=diff

==============================================================================
--- llvm/trunk/lib/Target/Mips/MipsTargetAsmInfo.cpp (original)
+++ llvm/trunk/lib/Target/Mips/MipsTargetAsmInfo.cpp Mon Jul 27 00:32:16 2009
@@ -30,8 +30,7 @@
   BSSSection                  = "\t.section\t.bss";
   CStringSection              = ".rodata.str";
 
-  BSSSection_ = getUnnamedSection("\t.bss",
-                                  SectionFlags::Writable | SectionFlags::BSS);
+  BSSSection_ = getUnnamedSection("\t.bss", SectionKind::BSS);
     
   if (!TM.getSubtarget<MipsSubtarget>().hasABICall())
     JumpTableDirective = "\t.word\t";

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

==============================================================================
--- llvm/trunk/lib/Target/PIC16/PIC16AsmPrinter.cpp (original)
+++ llvm/trunk/lib/Target/PIC16/PIC16AsmPrinter.cpp Mon Jul 27 00:32:16 2009
@@ -61,8 +61,8 @@
   // Now emit the instructions of function in its code section.
   const char *codeSection = PAN::getCodeSectionName(CurrentFnName).c_str();
  
-  const Section *fCodeSection = TAI->getNamedSection(codeSection,
-                                                     SectionFlags::Code);
+  const Section *fCodeSection = 
+    TAI->getNamedSection(codeSection, SectionKind::Text);
   // Start the Code Section.
   O <<  "\n";
   SwitchToSection(fCodeSection);
@@ -291,8 +291,8 @@
   O << "\n"; 
   const char *SectionName = PAN::getFrameSectionName(CurrentFnName).c_str();
 
-  const Section *fPDataSection = TAI->getNamedSection(SectionName,
-                                                      SectionFlags::Writable);
+  const Section *fPDataSection =
+    TAI->getNamedSection(SectionName, SectionKind::DataRel);
   SwitchToSection(fPDataSection);
   
   // Emit function frame label

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

==============================================================================
--- llvm/trunk/lib/Target/PIC16/PIC16TargetAsmInfo.cpp (original)
+++ llvm/trunk/lib/Target/PIC16/PIC16TargetAsmInfo.cpp Mon Jul 27 00:32:16 2009
@@ -37,18 +37,21 @@
   ZeroDirective = NULL;
   AsciiDirective = " dt ";
   AscizDirective = NULL;
-  BSSSection_  = getNamedSection("udata.# UDATA",
-                              SectionFlags::Writable | SectionFlags::BSS);
-  ReadOnlySection = getNamedSection("romdata.# ROMDATA", SectionFlags::None);
-  DataSection = getNamedSection("idata.# IDATA", SectionFlags::Writable);
+  BSSSection_  = getNamedSection("udata.# UDATA", SectionKind::BSS);
+  ReadOnlySection = getNamedSection("romdata.# ROMDATA", SectionKind::ReadOnly);
+  DataSection = getNamedSection("idata.# IDATA", SectionKind::DataRel);
   SwitchToSectionDirective = "";
   // Need because otherwise a .text symbol is emitted by DwarfWriter
   // in BeginModule, and gpasm cribbs for that .text symbol.
-  TextSection = getUnnamedSection("", SectionFlags::Code);
+  TextSection = getUnnamedSection("", SectionKind::Text);
   PIC16Section *ROSection = new PIC16Section(getReadOnlySection());
   ROSections.push_back(ROSection);
-  ExternalVarDecls = new PIC16Section(getNamedSection("ExternalVarDecls"));
-  ExternalVarDefs = new PIC16Section(getNamedSection("ExternalVarDefs"));
+    
+  // FIXME: I don't know what the classification of these sections really is.
+  ExternalVarDecls = new PIC16Section(getNamedSection("ExternalVarDecls",
+                                                      SectionKind::Metadata));
+  ExternalVarDefs = new PIC16Section(getNamedSection("ExternalVarDefs",
+                                                     SectionKind::Metadata));
   // Set it to false because we weed to generate c file name and not bc file
   // name.
   HasSingleParameterDotFile = false;
@@ -95,7 +98,9 @@
   // No BSS section spacious enough was found. Crate a new one.
   if (!FoundBSS) {
     std::string name = PAN::getUdataSectionName(BSSSections.size());
-    const Section *NewSection = getNamedSection(name.c_str());
+    const Section *NewSection = getNamedSection(name.c_str(),
+                                                // FIXME.
+                                                SectionKind::Metadata);
 
     FoundBSS = new PIC16Section(NewSection);
 
@@ -135,7 +140,9 @@
   // No IDATA section spacious enough was found. Crate a new one.
   if (!FoundIDATA) {
     std::string name = PAN::getIdataSectionName(IDATASections.size());
-    const Section *NewSection = getNamedSection(name.c_str());
+    const Section *NewSection = getNamedSection(name.c_str(),
+                                                // FIXME.
+                                                SectionKind::Metadata);
 
     FoundIDATA = new PIC16Section(NewSection);
 
@@ -168,7 +175,9 @@
 
   // No Auto section was found. Crate a new one.
   if (!FoundAutoSec) {
-    const Section *NewSection = getNamedSection(name.c_str());
+    const Section *NewSection = getNamedSection(name.c_str(),
+                                                // FIXME.
+                                                SectionKind::Metadata);
 
     FoundAutoSec = new PIC16Section(NewSection);
 
@@ -316,7 +325,7 @@
   
   PIC16Section *NewBSS = FoundBSS;
   if (NewBSS == NULL) {
-    const Section *NewSection = getNamedSection(Name.c_str());
+    const Section *NewSection = getNamedSection(Name.c_str(), SectionKind::BSS);
     NewBSS = new PIC16Section(NewSection);
     BSSSections.push_back(NewBSS);
   }
@@ -367,7 +376,9 @@
 
   PIC16Section *NewIDATASec = FoundIDATASec;
   if (NewIDATASec == NULL) {
-    const Section *NewSection = getNamedSection(Name.c_str());
+    const Section *NewSection = getNamedSection(Name.c_str(),
+                                                // FIXME:
+                                                SectionKind::Metadata);
     NewIDATASec = new PIC16Section(NewSection);
     IDATASections.push_back(NewIDATASec);
   }
@@ -405,7 +416,8 @@
 
   PIC16Section *NewRomSec = FoundROSec;
   if (NewRomSec == NULL) {
-    const Section *NewSection = getNamedSection(Name.c_str());
+    const Section *NewSection = getNamedSection(Name.c_str(),
+                                                SectionKind::ReadOnly);
     NewRomSec = new PIC16Section(NewSection);
     ROSections.push_back(NewRomSec);
   }

Modified: llvm/trunk/lib/Target/PowerPC/AsmPrinter/PPCAsmPrinter.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/PowerPC/AsmPrinter/PPCAsmPrinter.cpp?rev=77184&r1=77183&r2=77184&view=diff

==============================================================================
--- llvm/trunk/lib/Target/PowerPC/AsmPrinter/PPCAsmPrinter.cpp (original)
+++ llvm/trunk/lib/Target/PowerPC/AsmPrinter/PPCAsmPrinter.cpp Mon Jul 27 00:32:16 2009
@@ -899,7 +899,7 @@
       (GVar->hasLocalLinkage() || GVar->hasExternalLinkage() ||
        GVar->isWeakForLinker()) &&
       // Don't put things that should go in the cstring section into "comm".
-      !TheSection->hasFlag(SectionFlags::Strings)) {
+      !TheSection->getKind().isMergeableCString()) {
     if (Size == 0) Size = 1;   // .comm Foo, 0 is undefined, avoid it.
 
     if (GVar->hasExternalLinkage()) {

Modified: llvm/trunk/lib/Target/PowerPC/PPCTargetAsmInfo.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/PowerPC/PPCTargetAsmInfo.cpp?rev=77184&r1=77183&r2=77184&view=diff

==============================================================================
--- llvm/trunk/lib/Target/PowerPC/PPCTargetAsmInfo.cpp (original)
+++ llvm/trunk/lib/Target/PowerPC/PPCTargetAsmInfo.cpp Mon Jul 27 00:32:16 2009
@@ -49,8 +49,7 @@
     return DW_EH_PE_absptr;
 }
 
-const char *
-PPCDarwinTargetAsmInfo::getEHGlobalPrefix() const {
+const char *PPCDarwinTargetAsmInfo::getEHGlobalPrefix() const {
   const PPCSubtarget* Subtarget = &TM.getSubtarget<PPCSubtarget>();
   if (Subtarget->getDarwinVers() > 9)
     return PrivateGlobalPrefix;
@@ -72,8 +71,7 @@
   BSSSection = "\t.section\t\".sbss\",\"aw\", at nobits";
 
   // PPC/Linux normally uses named section for BSS.
-  BSSSection_ = getNamedSection("\t.bss",
-                                SectionFlags::Writable | SectionFlags::BSS);
+  BSSSection_ = getNamedSection("\t.bss", SectionKind::BSS);
 
   // Debug Information
   AbsoluteDebugSectionOffsets = true;

Modified: llvm/trunk/lib/Target/Sparc/SparcTargetAsmInfo.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Sparc/SparcTargetAsmInfo.cpp?rev=77184&r1=77183&r2=77184&view=diff

==============================================================================
--- llvm/trunk/lib/Target/Sparc/SparcTargetAsmInfo.cpp (original)
+++ llvm/trunk/lib/Target/Sparc/SparcTargetAsmInfo.cpp Mon Jul 27 00:32:16 2009
@@ -27,25 +27,24 @@
   CStringSection=".rodata.str";
 
   // Sparc normally uses named section for BSS.
-  BSSSection_ = getNamedSection("\t.bss",
-                                SectionFlags::Writable | SectionFlags::BSS);
+  BSSSection_ = getNamedSection("\t.bss", SectionKind::BSS);
 }
 
 
-void SparcELFTargetAsmInfo::getSectionFlags(unsigned Flags,
+void SparcELFTargetAsmInfo::getSectionFlagsAsString(SectionKind Kind,
                                             SmallVectorImpl<char> &Str) const {
-  if (Flags & SectionFlags::Mergeable)
-    return ELFTargetAsmInfo::getSectionFlags(Flags, Str);
+  if (Kind.isMergeableConst() || Kind.isMergeableCString())
+    return ELFTargetAsmInfo::getSectionFlagsAsString(Kind, Str);
 
   // FIXME: Inefficient.
   std::string Res;
-  if (!(Flags & SectionFlags::Debug))
+  if (!Kind.isMetadata())
     Res += ",#alloc";
-  if (Flags & SectionFlags::Code)
+  if (Kind.isText())
     Res += ",#execinstr";
-  if (Flags & SectionFlags::Writable)
+  if (Kind.isWriteable())
     Res += ",#write";
-  if (Flags & SectionFlags::TLS)
+  if (Kind.isThreadLocal())
     Res += ",#tls";
 
   Str.append(Res.begin(), Res.end());

Modified: llvm/trunk/lib/Target/Sparc/SparcTargetAsmInfo.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Sparc/SparcTargetAsmInfo.h?rev=77184&r1=77183&r2=77184&view=diff

==============================================================================
--- llvm/trunk/lib/Target/Sparc/SparcTargetAsmInfo.h (original)
+++ llvm/trunk/lib/Target/Sparc/SparcTargetAsmInfo.h Mon Jul 27 00:32:16 2009
@@ -24,8 +24,8 @@
   struct SparcELFTargetAsmInfo : public ELFTargetAsmInfo {
     explicit SparcELFTargetAsmInfo(const TargetMachine &TM);
 
-    virtual void getSectionFlags(unsigned Flags,
-                                 SmallVectorImpl<char> &Str) const;
+    virtual void getSectionFlagsAsString(SectionKind Kind,
+                                         SmallVectorImpl<char> &Str) const;
 
   };
 

Modified: llvm/trunk/lib/Target/SystemZ/SystemZTargetAsmInfo.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/SystemZ/SystemZTargetAsmInfo.cpp?rev=77184&r1=77183&r2=77184&view=diff

==============================================================================
--- llvm/trunk/lib/Target/SystemZ/SystemZTargetAsmInfo.cpp (original)
+++ llvm/trunk/lib/Target/SystemZ/SystemZTargetAsmInfo.cpp Mon Jul 27 00:32:16 2009
@@ -28,6 +28,5 @@
 
   NonexecutableStackDirective = "\t.section\t.note.GNU-stack,\"\", at progbits";
     
-  BSSSection_ = getUnnamedSection("\t.bss",
-                                  SectionFlags::Writable | SectionFlags::BSS);
+  BSSSection_ = getUnnamedSection("\t.bss", SectionKind::BSS);
 }

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

==============================================================================
--- llvm/trunk/lib/Target/TargetAsmInfo.cpp (original)
+++ llvm/trunk/lib/Target/TargetAsmInfo.cpp Mon Jul 27 00:32:16 2009
@@ -122,8 +122,8 @@
   DwarfEHFrameSection = ".eh_frame";
   DwarfExceptionSection = ".gcc_except_table";
   AsmTransCBE = 0;
-  TextSection = getUnnamedSection("\t.text", SectionFlags::Code);
-  DataSection = getUnnamedSection("\t.data", SectionFlags::Writable);
+  TextSection = getUnnamedSection("\t.text", SectionKind::Text);
+  DataSection = getUnnamedSection("\t.data", SectionKind::DataRel);
 }
 
 TargetAsmInfo::~TargetAsmInfo() {
@@ -199,23 +199,6 @@
   return false;
 }
 
-static unsigned SectionFlagsForGlobal(SectionKind Kind) {
-  // Decode flags from global and section kind.
-  unsigned Flags = SectionFlags::None;
-  if (Kind.isWeak())
-    Flags |= SectionFlags::Linkonce;
-  if (Kind.isBSS() || Kind.isThreadBSS())
-    Flags |= SectionFlags::BSS;
-  if (Kind.isThreadLocal())
-    Flags |= SectionFlags::TLS;
-  if (Kind.isText())
-    Flags |= SectionFlags::Code;
-  if (Kind.isWriteable())
-    Flags |= SectionFlags::Writable;
-
-  return Flags;
-}
-
 static SectionKind::Kind SectionKindForGlobal(const GlobalValue *GV,
                                               const TargetMachine &TM) {
   Reloc::Model ReloModel = TM.getRelocationModel();
@@ -326,29 +309,21 @@
     if (const Section *TS = getSpecialCasedSectionGlobals(GV, Kind))
       return TS;
     
-    // Honour section already set, if any.
-    unsigned Flags = SectionFlagsForGlobal(Kind);
-
-    // This is an explicitly named section.
-    Flags |= SectionFlags::Named;
-    
     // If the target has magic semantics for certain section names, make sure to
     // pick up the flags.  This allows the user to write things with attribute
     // section and still get the appropriate section flags printed.
-    Flags |= getFlagsForNamedSection(GV->getSection().c_str());
+    GVKind = getKindForNamedSection(GV->getSection().c_str(), GVKind);
     
-    return getNamedSection(GV->getSection().c_str(), Flags);
+    return getNamedSection(GV->getSection().c_str(), GVKind);
   }
 
   // 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 (Kind.isWeak()) {
     if (const char *Prefix = getSectionPrefixForUniqueGlobal(Kind)) {
-      unsigned Flags = SectionFlagsForGlobal(Kind);
-
       // FIXME: Use mangler interface (PR4584).
       std::string Name = Prefix+GV->getNameStr();
-      return getNamedSection(Name.c_str(), Flags);
+      return getNamedSection(Name.c_str(), GVKind);
     }
   }
   
@@ -390,12 +365,12 @@
 
 
 const Section *TargetAsmInfo::getNamedSection(const char *Name,
-                                              unsigned Flags) const {
+                                              SectionKind::Kind Kind) const {
   Section &S = Sections[Name];
 
   // This is newly-created section, set it up properly.
   if (S.Name.empty()) {
-    S.Flags = Flags | SectionFlags::Named;
+    S.Kind = SectionKind::get(Kind, false /*weak*/, true /*Named*/);
     S.Name = Name;
   }
 
@@ -403,12 +378,13 @@
 }
 
 const Section*
-TargetAsmInfo::getUnnamedSection(const char *Directive, unsigned Flags) const {
+TargetAsmInfo::getUnnamedSection(const char *Directive,
+                                 SectionKind::Kind Kind) const {
   Section& S = Sections[Directive];
 
   // This is newly-created section, set it up properly.
   if (S.Name.empty()) {
-    S.Flags = Flags & ~SectionFlags::Named;
+    S.Kind = SectionKind::get(Kind, false /*weak*/, false /*Named*/);
     S.Name = Directive;
   }
 

Modified: llvm/trunk/lib/Target/X86/AsmPrinter/X86ATTAsmPrinter.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/AsmPrinter/X86ATTAsmPrinter.cpp?rev=77184&r1=77183&r2=77184&view=diff

==============================================================================
--- llvm/trunk/lib/Target/X86/AsmPrinter/X86ATTAsmPrinter.cpp (original)
+++ llvm/trunk/lib/Target/X86/AsmPrinter/X86ATTAsmPrinter.cpp Mon Jul 27 00:32:16 2009
@@ -799,7 +799,7 @@
 
   if (C->isNullValue() && !GVar->hasSection() &&
       // Don't put things that should go in the cstring section into "comm".
-      !TheSection->hasFlag(SectionFlags::Strings)) {
+      !TheSection->getKind().isMergeableCString()) {
     if (GVar->hasExternalLinkage()) {
       if (const char *Directive = TAI->getZeroFillDirective()) {
         O << "\t.globl " << name << '\n';

Modified: llvm/trunk/lib/Target/X86/X86TargetAsmInfo.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86TargetAsmInfo.cpp?rev=77184&r1=77183&r2=77184&view=diff

==============================================================================
--- llvm/trunk/lib/Target/X86/X86TargetAsmInfo.cpp (original)
+++ llvm/trunk/lib/Target/X86/X86TargetAsmInfo.cpp Mon Jul 27 00:32:16 2009
@@ -58,7 +58,7 @@
   // FIXME: Why don't we always use this section?
   if (is64Bit)
     SixteenByteConstantSection = getUnnamedSection("\t.literal16\n",
-                                                   SectionFlags::Mergeable);
+                                                 SectionKind::MergeableConst16);
   LCOMMDirective = "\t.lcomm\t";
 
   // Leopard and above support aligned common symbols.
@@ -128,8 +128,7 @@
   // Set up DWARF directives
   HasLEB128 = true;  // Target asm supports leb128 directives (little-endian)
 
-  BSSSection_ = getUnnamedSection("\t.bss",
-                                  SectionFlags::Writable | SectionFlags::BSS);
+  BSSSection_ = getUnnamedSection("\t.bss", SectionKind::BSS);
 
   // Debug Information
   AbsoluteDebugSectionOffsets = true;
@@ -278,13 +277,14 @@
 }
 
 
-void X86COFFTargetAsmInfo::getSectionFlags(unsigned Flags,
-                                           SmallVectorImpl<char> &Str) const {
+
+void X86COFFTargetAsmInfo::getSectionFlagsAsString(SectionKind Kind,
+                                            SmallVectorImpl<char> &Str) const {
   // FIXME: Inefficient.
   std::string Res = ",\"";
-  if (Flags & SectionFlags::Code)
+  if (Kind.isText())
     Res += 'x';
-  if (Flags & SectionFlags::Writable)
+  if (Kind.isWriteable())
     Res += 'w';
   Res += "\"";
 
@@ -314,8 +314,8 @@
 
   AlignmentIsInBytes = true;
 
-  TextSection = getUnnamedSection("_text", SectionFlags::Code);
-  DataSection = getUnnamedSection("_data", SectionFlags::Writable);
+  TextSection = getUnnamedSection("_text", SectionKind::Text);
+  DataSection = getUnnamedSection("_data", SectionKind::DataRel);
 
   JumpTableDataSection = NULL;
   SwitchToSectionDirective = "";

Modified: llvm/trunk/lib/Target/X86/X86TargetAsmInfo.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86TargetAsmInfo.h?rev=77184&r1=77183&r2=77184&view=diff

==============================================================================
--- llvm/trunk/lib/Target/X86/X86TargetAsmInfo.h (original)
+++ llvm/trunk/lib/Target/X86/X86TargetAsmInfo.h Mon Jul 27 00:32:16 2009
@@ -56,8 +56,8 @@
     virtual const char *
     getSectionPrefixForUniqueGlobal(SectionKind kind) const;
     
-    virtual void getSectionFlags(unsigned Flags,
-                                 SmallVectorImpl<char> &Str) const;
+    virtual void getSectionFlagsAsString(SectionKind Kind,
+                                         SmallVectorImpl<char> &Str) const;
   };
 
   struct X86WinTargetAsmInfo : public X86GenericTargetAsmInfo {

Modified: llvm/trunk/lib/Target/XCore/XCoreTargetAsmInfo.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/XCore/XCoreTargetAsmInfo.cpp?rev=77184&r1=77183&r2=77184&view=diff

==============================================================================
--- llvm/trunk/lib/Target/XCore/XCoreTargetAsmInfo.cpp (original)
+++ llvm/trunk/lib/Target/XCore/XCoreTargetAsmInfo.cpp Mon Jul 27 00:32:16 2009
@@ -24,10 +24,9 @@
 XCoreTargetAsmInfo::XCoreTargetAsmInfo(const XCoreTargetMachine &TM)
   : ELFTargetAsmInfo(TM) {
   SupportsDebugInformation = true;
-  TextSection = getUnnamedSection("\t.text", SectionFlags::Code);
-  DataSection = getNamedSection("\t.dp.data", SectionFlags::Writable);
-  BSSSection_  = getNamedSection("\t.dp.bss", SectionFlags::Writable |
-                                 SectionFlags::BSS);
+  TextSection = getUnnamedSection("\t.text", SectionKind::Text);
+  DataSection = getNamedSection("\t.dp.data", SectionKind::DataRel);
+  BSSSection_  = getNamedSection("\t.dp.bss", SectionKind::BSS);
 
   // TLS globals are lowered in the backend to arrays indexed by the current
   // thread id. After lowering they require no special handling by the linker
@@ -36,9 +35,10 @@
   TLSBSSSection = BSSSection_;
 
   if (TM.getSubtargetImpl()->isXS1A())
-    ReadOnlySection = getNamedSection("\t.dp.rodata", SectionFlags::Writable);
+    // FIXME: Why is this writable???
+    ReadOnlySection = getNamedSection("\t.dp.rodata", SectionKind::DataRel);
   else
-    ReadOnlySection = getNamedSection("\t.cp.rodata", SectionFlags::None);
+    ReadOnlySection = getNamedSection("\t.cp.rodata", SectionKind::ReadOnly);
   Data16bitsDirective = "\t.short\t";
   Data32bitsDirective = "\t.long\t";
   Data64bitsDirective = 0;





More information about the llvm-commits mailing list