mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-13 20:32:21 +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:
parent
c5c03f9024
commit
ba9934648f
@ -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);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user