forked from OSchip/llvm-project
				
			we already know the sectionkind when invoking SelectSectionForGlobal,
pass it in instead of recomputing it. llvm-svn: 76990
This commit is contained in:
		
							parent
							
								
									bf9ac228f7
								
							
						
					
					
						commit
						73f6651439
					
				| 
						 | 
				
			
			@ -34,7 +34,8 @@ namespace llvm {
 | 
			
		|||
    const Section* SixteenByteConstantSection;
 | 
			
		||||
 | 
			
		||||
    explicit DarwinTargetAsmInfo(const TargetMachine &TM);
 | 
			
		||||
    virtual const Section* SelectSectionForGlobal(const GlobalValue *GV) const;
 | 
			
		||||
    virtual const Section* SelectSectionForGlobal(const GlobalValue *GV,
 | 
			
		||||
                                                  SectionKind::Kind Kind) const;
 | 
			
		||||
    virtual bool emitUsedDirectiveFor(const GlobalValue *GV,
 | 
			
		||||
                                      Mangler *Mang) const;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -38,7 +38,8 @@ namespace llvm {
 | 
			
		|||
    virtual unsigned getFlagsForNamedSection(const char *Section) const;
 | 
			
		||||
    
 | 
			
		||||
    SectionKind::Kind SectionKindForGlobal(const GlobalValue *GV) const;
 | 
			
		||||
    virtual const Section* SelectSectionForGlobal(const GlobalValue *GV) const;
 | 
			
		||||
    virtual const Section* SelectSectionForGlobal(const GlobalValue *GV,
 | 
			
		||||
                                                  SectionKind::Kind Kind) const;
 | 
			
		||||
    virtual std::string printSectionFlags(unsigned flags) const;
 | 
			
		||||
 | 
			
		||||
    const Section* DataRelSection;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -619,7 +619,8 @@ namespace llvm {
 | 
			
		|||
    virtual std::string printSectionFlags(unsigned flags) const { return ""; }
 | 
			
		||||
 | 
			
		||||
// FIXME: Eliminate this.
 | 
			
		||||
    virtual const Section* SelectSectionForGlobal(const GlobalValue *GV) const;
 | 
			
		||||
    virtual const Section* SelectSectionForGlobal(const GlobalValue *GV,
 | 
			
		||||
                                                  SectionKind::Kind Kind) const;
 | 
			
		||||
 | 
			
		||||
    /// getSLEB128Size - Compute the number of bytes required for a signed
 | 
			
		||||
    /// leb128 value.
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -125,8 +125,8 @@ bool DarwinTargetAsmInfo::emitUsedDirectiveFor(const GlobalValue* GV,
 | 
			
		|||
}
 | 
			
		||||
 | 
			
		||||
const Section*
 | 
			
		||||
DarwinTargetAsmInfo::SelectSectionForGlobal(const GlobalValue *GV) const {
 | 
			
		||||
  SectionKind::Kind Kind = SectionKindForGlobal(GV);
 | 
			
		||||
DarwinTargetAsmInfo::SelectSectionForGlobal(const GlobalValue *GV,
 | 
			
		||||
                                            SectionKind::Kind Kind) const {
 | 
			
		||||
  bool isWeak = GV->isWeakForLinker();
 | 
			
		||||
  bool isNonStatic = TM.getRelocationModel() != Reloc::Static;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -74,9 +74,8 @@ ELFTargetAsmInfo::SectionKindForGlobal(const GlobalValue *GV) const {
 | 
			
		|||
}
 | 
			
		||||
 | 
			
		||||
const Section*
 | 
			
		||||
ELFTargetAsmInfo::SelectSectionForGlobal(const GlobalValue *GV) const {
 | 
			
		||||
  SectionKind::Kind Kind = SectionKindForGlobal(GV);
 | 
			
		||||
 | 
			
		||||
ELFTargetAsmInfo::SelectSectionForGlobal(const GlobalValue *GV,
 | 
			
		||||
                                         SectionKind::Kind Kind) const {
 | 
			
		||||
  if (const Function *F = dyn_cast<Function>(GV)) {
 | 
			
		||||
    switch (F->getLinkage()) {
 | 
			
		||||
    default: llvm_unreachable("Unknown linkage type!");
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -186,14 +186,15 @@ PIC16TargetAsmInfo::getSectionForAuto(const GlobalVariable *GV) const {
 | 
			
		|||
// Override default implementation to put the true globals into
 | 
			
		||||
// multiple data sections if required.
 | 
			
		||||
const Section*
 | 
			
		||||
PIC16TargetAsmInfo::SelectSectionForGlobal(const GlobalValue *GV1) const {
 | 
			
		||||
PIC16TargetAsmInfo::SelectSectionForGlobal(const GlobalValue *GV1,
 | 
			
		||||
                                           SectionKind::Kind Kind) const {
 | 
			
		||||
  // We select the section based on the initializer here, so it really
 | 
			
		||||
  // has to be a GlobalVariable.
 | 
			
		||||
  const GlobalVariable *GV = dyn_cast<GlobalVariable>(GV1); 
 | 
			
		||||
  if (!GV)
 | 
			
		||||
    return TargetAsmInfo::SelectSectionForGlobal(GV1);
 | 
			
		||||
    return TargetAsmInfo::SelectSectionForGlobal(GV1, Kind);
 | 
			
		||||
 | 
			
		||||
  // Record Exteranl Var Decls.
 | 
			
		||||
  // Record External Var Decls.
 | 
			
		||||
  if (GV->isDeclaration()) {
 | 
			
		||||
    ExternalVarDecls->Items.push_back(GV);
 | 
			
		||||
    return ExternalVarDecls->S_;
 | 
			
		||||
| 
						 | 
				
			
			@ -225,7 +226,7 @@ PIC16TargetAsmInfo::SelectSectionForGlobal(const GlobalValue *GV1) const {
 | 
			
		|||
    return getROSectionForGlobal(GV);
 | 
			
		||||
 | 
			
		||||
  // Else let the default implementation take care of it.
 | 
			
		||||
  return TargetAsmInfo::SelectSectionForGlobal(GV);
 | 
			
		||||
  return TargetAsmInfo::SelectSectionForGlobal(GV, Kind);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
PIC16TargetAsmInfo::~PIC16TargetAsmInfo() {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -74,7 +74,8 @@ namespace llvm {
 | 
			
		|||
    const Section *getROSectionForGlobal(const GlobalVariable *GV) const;
 | 
			
		||||
    const Section *CreateROSectionForGlobal(const GlobalVariable *GV,
 | 
			
		||||
                                            std::string Addr = "") const;
 | 
			
		||||
    virtual const Section *SelectSectionForGlobal(const GlobalValue *GV) const;
 | 
			
		||||
    virtual const Section *SelectSectionForGlobal(const GlobalValue *GV,
 | 
			
		||||
                                                  SectionKind::Kind Kind) const;
 | 
			
		||||
    const Section *CreateSectionForGlobal(const GlobalVariable *GV,
 | 
			
		||||
                                          const std::string &Addr = "") const;
 | 
			
		||||
  public:
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -300,14 +300,13 @@ const Section *TargetAsmInfo::SectionForGlobal(const GlobalValue *GV) const {
 | 
			
		|||
  }
 | 
			
		||||
  
 | 
			
		||||
  // Use default section depending on the 'type' of global
 | 
			
		||||
  return SelectSectionForGlobal(GV);
 | 
			
		||||
  return SelectSectionForGlobal(GV, Kind);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Lame default implementation. Calculate the section name for global.
 | 
			
		||||
const Section*
 | 
			
		||||
TargetAsmInfo::SelectSectionForGlobal(const GlobalValue *GV) const {
 | 
			
		||||
  SectionKind::Kind Kind = SectionKindForGlobal(GV);
 | 
			
		||||
 | 
			
		||||
TargetAsmInfo::SelectSectionForGlobal(const GlobalValue *GV,
 | 
			
		||||
                                      SectionKind::Kind Kind) const {
 | 
			
		||||
  if (Kind == SectionKind::Text)
 | 
			
		||||
    return getTextSection();
 | 
			
		||||
  
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue