[llvm-commits] [llvm] r77833 - in /llvm/trunk: include/llvm/Target/TargetAsmInfo.h include/llvm/Target/TargetLoweringObjectFile.h lib/CodeGen/AsmPrinter/AsmPrinter.cpp lib/CodeGen/ELFWriter.cpp lib/Target/DarwinTargetAsmInfo.cpp lib/Target/TargetAsmInfo.cpp lib/Target/TargetLoweringObjectFile.cpp lib/Target/X86/X86TargetAsmInfo.cpp lib/Target/XCore/XCoreTargetAsmInfo.cpp

Chris Lattner sabre at nondot.org
Sat Aug 1 16:46:13 PDT 2009


Author: lattner
Date: Sat Aug  1 18:46:12 2009
New Revision: 77833

URL: http://llvm.org/viewvc/llvm-project?rev=77833&view=rev
Log:
Remove "JumpTableDataSection" from TAI, instead, have AsmPrinter
compute it based on what it knows.  As part of this, rename getSectionForMergeableConstant
to getSectionForConstant because it works for non-mergable constants also.

The only functionality change from this is that Xcore will start dropping
its jump tables into readonly section instead of data section in -static mode.
This should be fine as the linker resolves the relocations.  If this is a
problem, let me know and we'll come up with another solution.


Modified:
    llvm/trunk/include/llvm/Target/TargetAsmInfo.h
    llvm/trunk/include/llvm/Target/TargetLoweringObjectFile.h
    llvm/trunk/lib/CodeGen/AsmPrinter/AsmPrinter.cpp
    llvm/trunk/lib/CodeGen/ELFWriter.cpp
    llvm/trunk/lib/Target/DarwinTargetAsmInfo.cpp
    llvm/trunk/lib/Target/TargetAsmInfo.cpp
    llvm/trunk/lib/Target/TargetLoweringObjectFile.cpp
    llvm/trunk/lib/Target/X86/X86TargetAsmInfo.cpp
    llvm/trunk/lib/Target/XCore/XCoreTargetAsmInfo.cpp

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

==============================================================================
--- llvm/trunk/include/llvm/Target/TargetAsmInfo.h (original)
+++ llvm/trunk/include/llvm/Target/TargetAsmInfo.h Sat Aug  1 18:46:12 2009
@@ -206,11 +206,6 @@
     /// section with the section name and this suffix printed.
     const char *SectionEndDirectiveSuffix;// Defaults to null.
     
-    /// JumpTableDataSection - This is the section that we SwitchToSection right
-    /// before emitting the jump tables for a function when the relocation model
-    /// is not PIC.
-    const char *JumpTableDataSection;     // Defaults to "\t.section .rodata"
-    
     /// JumpTableDirective - if non-null, the directive to emit before a jump
     /// table.
     const char *JumpTableDirective;
@@ -538,9 +533,6 @@
     const char *getSectionEndDirectiveSuffix() const {
       return SectionEndDirectiveSuffix;
     }
-    const char *getJumpTableDataSection() const {
-      return JumpTableDataSection;
-    }
     const char *getStaticCtorsSection() const {
       return StaticCtorsSection;
     }

Modified: llvm/trunk/include/llvm/Target/TargetLoweringObjectFile.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Target/TargetLoweringObjectFile.h?rev=77833&r1=77832&r2=77833&view=diff

==============================================================================
--- llvm/trunk/include/llvm/Target/TargetLoweringObjectFile.h (original)
+++ llvm/trunk/include/llvm/Target/TargetLoweringObjectFile.h Sat Aug  1 18:46:12 2009
@@ -45,7 +45,9 @@
   const MCSection *BSSSection;
   
   /// ReadOnlySection - Section that is readonly and can contain arbitrary
-  /// initialized data.
+  /// initialized data.  Targets are not required to have a readonly section.
+  /// If they don't, various bits of code will fall back to using the data
+  /// section for constants.
   const MCSection *ReadOnlySection;
   
 public:
@@ -76,11 +78,9 @@
     return GV != 0;
   }
   
-  /// getSectionForMergeableConstant - Given a mergeable constant with the
-  /// specified size and relocation information, return a section that it
-  /// should be placed in.
-  virtual const MCSection *
-  getSectionForMergeableConstant(SectionKind Kind) const;
+  /// getSectionForConstant - Given a constant with the SectionKind, return a
+  /// section that it should be placed in.
+  virtual const MCSection *getSectionForConstant(SectionKind Kind) const;
   
   /// getKindForNamedSection - If this target wants to be able to override
   /// section flags based on the name of the section specified for a global
@@ -158,11 +158,9 @@
   virtual void Initialize(MCContext &Ctx, const TargetMachine &TM);
   
   
-  /// getSectionForMergeableConstant - Given a mergeable constant with the
-  /// specified size and relocation information, return a section that it
-  /// should be placed in.
-  virtual const MCSection *
-  getSectionForMergeableConstant(SectionKind Kind) const;
+  /// getSectionForConstant - Given a constant with the SectionKind, return a
+  /// section that it should be placed in.
+  virtual const MCSection *getSectionForConstant(SectionKind Kind) const;
   
   virtual SectionKind getKindForNamedSection(const char *Section,
                                              SectionKind K) const;
@@ -194,8 +192,7 @@
   SelectSectionForGlobal(const GlobalValue *GV, SectionKind Kind,
                          Mangler *Mang, const TargetMachine &TM) const;
   
-  virtual const MCSection *
-  getSectionForMergeableConstant(SectionKind Kind) const;
+  virtual const MCSection *getSectionForConstant(SectionKind Kind) const;
   
   /// shouldEmitUsedDirectiveFor - This hook allows targets to selectively
   /// decide not to emit the UsedDirective for some symbols in llvm.used.

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

==============================================================================
--- llvm/trunk/lib/CodeGen/AsmPrinter/AsmPrinter.cpp (original)
+++ llvm/trunk/lib/CodeGen/AsmPrinter/AsmPrinter.cpp Sat Aug  1 18:46:12 2009
@@ -349,8 +349,7 @@
     }
     }
 
-    const MCSection *S =
-      getObjFileLowering().getSectionForMergeableConstant(Kind);
+    const MCSection *S = getObjFileLowering().getSectionForConstant(Kind);
     
     // The number of sections are small, just do a linear search from the
     // last section to the first.
@@ -419,22 +418,21 @@
   // the appropriate section.
   TargetLowering *LoweringInfo = TM.getTargetLowering();
 
-  const char *JumpTableDataSection = TAI->getJumpTableDataSection();
   const Function *F = MF.getFunction();
-  
-  const MCSection *FuncSection =
-    getObjFileLowering().SectionForGlobal(F, Mang, TM);
-
   bool JTInDiffSection = false;
-  if ((IsPic && !LoweringInfo->usesGlobalOffsetTable()) ||
-      !JumpTableDataSection || F->isWeakForLinker()) {
+  if (F->isWeakForLinker() ||
+      (IsPic && !LoweringInfo->usesGlobalOffsetTable())) {
     // 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
     // discardable section.
-    SwitchToSection(FuncSection);
+    SwitchToSection(getObjFileLowering().SectionForGlobal(F, Mang, TM));
   } else {
-    SwitchToDataSection(JumpTableDataSection);
+    // Otherwise, drop it in the readonly section.
+    const MCSection *ReadOnlySection = 
+      getObjFileLowering().getSectionForConstant(
+                                       SectionKind::get(SectionKind::ReadOnly));
+    SwitchToSection(ReadOnlySection);
     JTInDiffSection = true;
   }
   

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

==============================================================================
--- llvm/trunk/lib/CodeGen/ELFWriter.cpp (original)
+++ llvm/trunk/lib/CodeGen/ELFWriter.cpp Sat Aug  1 18:46:12 2009
@@ -178,7 +178,13 @@
 // Get jump table section on the section name returned by TAI
 ELFSection &ELFWriter::getJumpTableSection() {
   unsigned Align = TM.getTargetData()->getPointerABIAlignment();
-  return getSection(TAI->getJumpTableDataSection(),
+  
+  const TargetLoweringObjectFile &TLOF =
+    TM.getTargetLowering()->getObjFileLowering();
+
+  return getSection(TLOF.getSectionForConstant(
+                                      SectionKind::get(SectionKind::ReadOnly))
+                    ->getName(),
                     ELFSection::SHT_PROGBITS,
                     ELFSection::SHF_ALLOC, Align);
 }
@@ -204,7 +210,7 @@
   const TargetLoweringObjectFile &TLOF =
     TM.getTargetLowering()->getObjFileLowering();
 
-  return getSection(TLOF.getSectionForMergeableConstant(Kind)->getName(),
+  return getSection(TLOF.getSectionForConstant(Kind)->getName(),
                     ELFSection::SHT_PROGBITS,
                     ELFSection::SHF_MERGE | ELFSection::SHF_ALLOC,
                     CPE.getAlignment());

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

==============================================================================
--- llvm/trunk/lib/Target/DarwinTargetAsmInfo.cpp (original)
+++ llvm/trunk/lib/Target/DarwinTargetAsmInfo.cpp Sat Aug  1 18:46:12 2009
@@ -49,8 +49,6 @@
   HiddenDirective = "\t.private_extern ";
     
   // Sections:
-  JumpTableDataSection = "\t.const";
-
   if (TM.getRelocationModel() == Reloc::Static) {
     StaticCtorsSection = ".constructor";
     StaticDtorsSection = ".destructor";

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

==============================================================================
--- llvm/trunk/lib/Target/TargetAsmInfo.cpp (original)
+++ llvm/trunk/lib/Target/TargetAsmInfo.cpp Sat Aug  1 18:46:12 2009
@@ -69,7 +69,6 @@
   TextSectionStartSuffix = "";
   DataSectionStartSuffix = "";
   SectionEndDirectiveSuffix = 0;
-  JumpTableDataSection = "\t.section .rodata";
   JumpTableDirective = 0;
   // FIXME: Flags are ELFish - replace with normal section stuff.
   StaticCtorsSection = "\t.section .ctors,\"aw\", at progbits";

Modified: llvm/trunk/lib/Target/TargetLoweringObjectFile.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/TargetLoweringObjectFile.cpp?rev=77833&r1=77832&r2=77833&view=diff

==============================================================================
--- llvm/trunk/lib/Target/TargetLoweringObjectFile.cpp (original)
+++ llvm/trunk/lib/Target/TargetLoweringObjectFile.cpp Sat Aug  1 18:46:12 2009
@@ -228,12 +228,11 @@
   return getDataSection();
 }
 
-/// getSectionForMergableConstant - Given a mergable constant with the
+/// getSectionForConstant - Given a mergable constant with the
 /// specified size and relocation information, return a section that it
 /// should be placed in.
 const MCSection *
-TargetLoweringObjectFile::
-getSectionForMergeableConstant(SectionKind Kind) const {
+TargetLoweringObjectFile::getSectionForConstant(SectionKind Kind) const {
   if (Kind.isReadOnly() && ReadOnlySection != 0)
     return ReadOnlySection;
   
@@ -459,11 +458,11 @@
   return DataRelROSection;
 }
 
-/// getSectionForMergeableConstant - Given a mergeable constant with the
+/// getSectionForConstant - Given a mergeable constant with the
 /// specified size and relocation information, return a section that it
 /// should be placed in.
 const MCSection *TargetLoweringObjectFileELF::
-getSectionForMergeableConstant(SectionKind Kind) const {
+getSectionForConstant(SectionKind Kind) const {
   if (Kind.isMergeableConst4())
     return MergeableConst4Section;
   if (Kind.isMergeableConst8())
@@ -582,8 +581,7 @@
 }
 
 const MCSection *
-TargetLoweringObjectFileMachO::
-getSectionForMergeableConstant(SectionKind Kind) const {
+TargetLoweringObjectFileMachO::getSectionForConstant(SectionKind Kind) const {
   // If this constant requires a relocation, we have to put it in the data
   // segment, not in the text segment.
   if (Kind.isDataRel())

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

==============================================================================
--- llvm/trunk/lib/Target/X86/X86TargetAsmInfo.cpp (original)
+++ llvm/trunk/lib/Target/X86/X86TargetAsmInfo.cpp Sat Aug  1 18:46:12 2009
@@ -228,7 +228,6 @@
 
   AlignmentIsInBytes = true;
 
-  JumpTableDataSection = NULL;
   SwitchToSectionDirective = "";
   TextSectionStartSuffix = "\tSEGMENT PARA 'CODE'";
   DataSectionStartSuffix = "\tSEGMENT PARA 'DATA'";

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

==============================================================================
--- llvm/trunk/lib/Target/XCore/XCoreTargetAsmInfo.cpp (original)
+++ llvm/trunk/lib/Target/XCore/XCoreTargetAsmInfo.cpp Sat Aug  1 18:46:12 2009
@@ -18,7 +18,7 @@
   Data64bitsDirective = 0;
   ZeroDirective = "\t.space\t";
   CommentString = "#";
-  JumpTableDataSection = "\t.section\t.dp.data,\"awd\", at progbits";
+    
   PrivateGlobalPrefix = ".L";
   AscizDirective = ".asciiz";
   WeakDefDirective = "\t.weak\t";





More information about the llvm-commits mailing list