mirror of
				https://github.com/c64scene-ar/llvm-6502.git
				synced 2025-11-03 14:21:30 +00:00 
			
		
		
		
	Speculatively revert commit 127478 (jsjodin) in an attempt to fix the
llvm-gcc-i386-linux-selfhost and llvm-x86_64-linux-checks buildbots. The original log entry: Remove optimization emitting a reference insted of label difference, since it can create more relocations. Removed isBaseAddressKnownZero method, because it is no longer used. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@127540 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
		@@ -52,6 +52,14 @@ namespace llvm {
 | 
				
			|||||||
    virtual void PrintSwitchToSection(const MCAsmInfo &MAI,
 | 
					    virtual void PrintSwitchToSection(const MCAsmInfo &MAI,
 | 
				
			||||||
                                      raw_ostream &OS) const = 0;
 | 
					                                      raw_ostream &OS) const = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /// isBaseAddressKnownZero - Return true if we know that this section will
 | 
				
			||||||
 | 
					    /// get a base address of zero.  In cases where we know that this is true we
 | 
				
			||||||
 | 
					    /// can emit section offsets as direct references to avoid a subtraction
 | 
				
			||||||
 | 
					    /// from the base of the section, saving a relocation.
 | 
				
			||||||
 | 
					    virtual bool isBaseAddressKnownZero() const {
 | 
				
			||||||
 | 
					      return false;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // UseCodeAlign - Return true if a .align directive should use
 | 
					    // UseCodeAlign - Return true if a .align directive should use
 | 
				
			||||||
    // "optimized nops" to fill instead of 0s.
 | 
					    // "optimized nops" to fill instead of 0s.
 | 
				
			||||||
    virtual bool UseCodeAlign() const = 0;
 | 
					    virtual bool UseCodeAlign() const = 0;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -66,6 +66,12 @@ public:
 | 
				
			|||||||
  virtual bool UseCodeAlign() const;
 | 
					  virtual bool UseCodeAlign() const;
 | 
				
			||||||
  virtual bool isVirtualSection() const;
 | 
					  virtual bool isVirtualSection() const;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  /// isBaseAddressKnownZero - We know that non-allocatable sections (like
 | 
				
			||||||
 | 
					  /// debug info) have a base of zero.
 | 
				
			||||||
 | 
					  virtual bool isBaseAddressKnownZero() const {
 | 
				
			||||||
 | 
					    return (getFlags() & ELF::SHF_ALLOC) == 0;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  static bool classof(const MCSection *S) {
 | 
					  static bool classof(const MCSection *S) {
 | 
				
			||||||
    return S->getVariant() == SV_ELF;
 | 
					    return S->getVariant() == SV_ELF;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -191,6 +191,13 @@ void AsmPrinter::EmitSectionOffset(const MCSymbol *Label,
 | 
				
			|||||||
  assert((!Label->isInSection() || &Label->getSection() == &Section) &&
 | 
					  assert((!Label->isInSection() || &Label->getSection() == &Section) &&
 | 
				
			||||||
         "Section offset using wrong section base for label");
 | 
					         "Section offset using wrong section base for label");
 | 
				
			||||||
  
 | 
					  
 | 
				
			||||||
 | 
					  // If the section in question will end up with an address of 0 anyway, we can
 | 
				
			||||||
 | 
					  // just emit an absolute reference to save a relocation.
 | 
				
			||||||
 | 
					  if (Section.isBaseAddressKnownZero()) {
 | 
				
			||||||
 | 
					    OutStreamer.EmitSymbolValue(Label, 4, 0/*AddrSpace*/);
 | 
				
			||||||
 | 
					    return;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
  // Otherwise, emit it as a label difference from the start of the section.
 | 
					  // Otherwise, emit it as a label difference from the start of the section.
 | 
				
			||||||
  EmitLabelDifference(Label, SectionLabel, 4);
 | 
					  EmitLabelDifference(Label, SectionLabel, 4);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user