diff options
author | Daniel Dunbar <daniel@zuster.org> | 2010-12-17 05:50:29 +0000 |
---|---|---|
committer | Daniel Dunbar <daniel@zuster.org> | 2010-12-17 05:50:29 +0000 |
commit | 2ee6c9b8c98cf224e15a0e75128ad1f4e331d5c5 (patch) | |
tree | 2ad5609b1ebf96f85e9dfbc5249e52f67d6d88f2 /llvm/lib | |
parent | 4da4e2573b2399f5225c60a7bf8729dc756c9977 (diff) | |
download | bcm5719-llvm-2ee6c9b8c98cf224e15a0e75128ad1f4e331d5c5.tar.gz bcm5719-llvm-2ee6c9b8c98cf224e15a0e75128ad1f4e331d5c5.zip |
MC/Mach-O: On second thought, use a custom hook for enabling aggressive
IsSymbolRefDifferenceFullyResolved, it turns out this does change behavior on
enough cases for x86-32 that I would rather wait a bit on it.
- In practice, we will want to change this eventually because it only means we
generate less relocations (it also eliminates the need for the horrible
'.set' hack that Darwin requires in some places).
llvm-svn: 122042
Diffstat (limited to 'llvm/lib')
-rw-r--r-- | llvm/lib/MC/MCMachObjectTargetWriter.cpp | 6 | ||||
-rw-r--r-- | llvm/lib/MC/MachObjectWriter.cpp | 3 | ||||
-rw-r--r-- | llvm/lib/Target/X86/X86AsmBackend.cpp | 3 |
3 files changed, 9 insertions, 3 deletions
diff --git a/llvm/lib/MC/MCMachObjectTargetWriter.cpp b/llvm/lib/MC/MCMachObjectTargetWriter.cpp index 4dfc0a815f3..146cebf01a3 100644 --- a/llvm/lib/MC/MCMachObjectTargetWriter.cpp +++ b/llvm/lib/MC/MCMachObjectTargetWriter.cpp @@ -12,8 +12,10 @@ using namespace llvm; MCMachObjectTargetWriter::MCMachObjectTargetWriter( - bool Is64Bit_, uint32_t CPUType_, uint32_t CPUSubtype_) - : Is64Bit(Is64Bit_), CPUType(CPUType_), CPUSubtype(CPUSubtype_) { + bool Is64Bit_, uint32_t CPUType_, uint32_t CPUSubtype_, + bool UseAggressiveSymbolFolding_) + : Is64Bit(Is64Bit_), CPUType(CPUType_), CPUSubtype(CPUSubtype_), + UseAggressiveSymbolFolding(UseAggressiveSymbolFolding_) { } MCMachObjectTargetWriter::~MCMachObjectTargetWriter() { diff --git a/llvm/lib/MC/MachObjectWriter.cpp b/llvm/lib/MC/MachObjectWriter.cpp index 17615eef697..6ebc782c8e2 100644 --- a/llvm/lib/MC/MachObjectWriter.cpp +++ b/llvm/lib/MC/MachObjectWriter.cpp @@ -1126,6 +1126,9 @@ public: bool IsSymbolRefDifferenceFullyResolved(const MCAssembler &Asm, const MCSymbolRefExpr *A, const MCSymbolRefExpr *B) const { + if (!TargetObjectWriter->useAggressiveSymbolFolding()) + return false; + // The effective address is // addr(atom(A)) + offset(A) // - addr(atom(B)) - offset(B) diff --git a/llvm/lib/Target/X86/X86AsmBackend.cpp b/llvm/lib/Target/X86/X86AsmBackend.cpp index 3f58e43ea15..fe894ab7a14 100644 --- a/llvm/lib/Target/X86/X86AsmBackend.cpp +++ b/llvm/lib/Target/X86/X86AsmBackend.cpp @@ -50,7 +50,8 @@ class X86MachObjectWriter : public MCMachObjectTargetWriter { public: X86MachObjectWriter(bool Is64Bit, uint32_t CPUType, uint32_t CPUSubtype) - : MCMachObjectTargetWriter(Is64Bit, CPUType, CPUSubtype) {} + : MCMachObjectTargetWriter(Is64Bit, CPUType, CPUSubtype, + /*UseAggressiveSymbolFolding=*/Is64Bit) {} }; class X86AsmBackend : public TargetAsmBackend { |