llvm/lib/MC
Peter Collingbourne 7da5357aca ARM/ELF: Better codegen for global variable addresses.
In PIC mode we were previously computing global variable addresses (or GOT
entry addresses) by adding the PC, the PC-relative GOT displacement and
the GOT-relative symbol/GOT entry displacement. Because the latter two
displacements are fixed, we ended up performing one more addition than
necessary.

This change causes us to compute addresses using a single PC-relative
displacement, resulting in a shorter code sequence. This reduces code size
by about 4% in a recent build of Chromium for Android.

As a result of this change we no longer need to compute the GOT base address
in the ARM backend, which allows us to remove the Global Base Reg pass and
SDAG lowering for the GOT.

We also now no longer use the GOT when addressing a symbol which is known
to be defined in the same linkage unit. Specifically, the symbol must have
either hidden visibility or a strong definition in the current module in
order to not use the the GOT.

This is a change from the previous behaviour where we would use the GOT to
address externally visible symbols defined in the same module. I think the
only cases where this could matter are cases involving symbol interposition,
but we don't really support that well anyway.

Differential Revision: http://reviews.llvm.org/D13650

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@251322 91177308-0d34-0410-b5e6-96231b3b80d8
2015-10-26 18:23:16 +00:00
..
MCDisassembler Revert r247692: Replace Triple with a new TargetTuple in MCTargetDesc/* and related. NFC. 2015-09-15 16:17:27 +00:00
MCParser [MC] Add support for GNU as-compatible binary operator precedence 2015-10-26 03:15:34 +00:00
CMakeLists.txt MC: Remove the copy of MCSchedModel in MCSubtargetInfo 2015-07-10 22:13:43 +00:00
ConstantPools.cpp MC: Clean up MCExpr naming. NFC. 2015-05-30 01:25:56 +00:00
ELFObjectWriter.cpp Add a RAW mode to StringTableBuilder. 2015-10-23 21:48:05 +00:00
LLVMBuild.txt Nuke MCAnalysis. 2014-09-02 22:32:20 +00:00
MachObjectWriter.cpp Add a RAW mode to StringTableBuilder. 2015-10-23 21:48:05 +00:00
Makefile Nuke MCAnalysis. 2014-09-02 22:32:20 +00:00
MCAsmBackend.cpp [MC] Allow backends to decide relaxation for unresolved fixups. 2015-05-30 18:42:22 +00:00
MCAsmInfo.cpp MCAsmInfo: Allow targets to specify when the .section directive should be omitted 2015-09-25 21:41:14 +00:00
MCAsmInfoCOFF.cpp [MC] Use LShr for constant evaluation of ">>" on ELF/arm64--darwin. 2015-04-28 01:37:11 +00:00
MCAsmInfoDarwin.cpp [MC] Use LShr for constant evaluation of ">>" on ELF/arm64--darwin. 2015-04-28 01:37:11 +00:00
MCAsmInfoELF.cpp Move alignment from MCSectionData to MCSection. 2015-05-21 19:20:38 +00:00
MCAsmStreamer.cpp [X86] Emit .cfi_escape GNU_ARGS_SIZE when adjusting the stack before calls 2015-10-07 07:01:31 +00:00
MCAssembler.cpp MC: Remove implicit ilist iterator conversions, NFC 2015-10-10 00:13:11 +00:00
MCCodeEmitter.cpp
MCCodeGenInfo.cpp MC: MCCodeGenInfo naming update. NFC. 2015-05-15 19:13:31 +00:00
MCContext.cpp Clear SectionSymbols in MCContext::Reset 2015-10-09 17:24:54 +00:00
MCDwarf.cpp [X86] Emit .cfi_escape GNU_ARGS_SIZE when adjusting the stack before calls 2015-10-07 07:01:31 +00:00
MCELFObjectTargetWriter.cpp Pass a MCSymbol to needsRelocateWithSymbol. 2015-05-29 18:26:09 +00:00
MCELFStreamer.cpp Fix pr24486. 2015-10-05 12:07:05 +00:00
MCExpr.cpp ARM/ELF: Better codegen for global variable addresses. 2015-10-26 18:23:16 +00:00
MCInst.cpp Fixup. 2015-02-05 01:13:47 +00:00
MCInstPrinter.cpp [llvm] Parameterizing the output stream for dumpbytes and outputting directly to stream. 2015-05-28 18:39:50 +00:00
MCInstrAnalysis.cpp MC: Disassembled CFG reconstruction. 2013-05-24 01:07:04 +00:00
MCInstrDesc.cpp MC: Constify MCSubtargetInfo in getDeprecationInfo(), NFC 2015-07-08 17:30:55 +00:00
MCLabel.cpp Release build: guard dump functions with 2012-09-12 05:06:18 +00:00
MCLinkerOptimizationHint.cpp MC: Tidy up LOH naming a bit. NFC. 2015-06-01 23:55:06 +00:00
MCMachObjectTargetWriter.cpp MC: Remove obsolete MachO UseAggressiveSymbolFolding. 2015-06-04 20:27:42 +00:00
MCMachOStreamer.cpp Use range-based for loops. NFC 2015-10-14 04:36:00 +00:00
MCNullStreamer.cpp Revert r240137 (Fixed/added namespace ending comments using clang-tidy. NFC) 2015-06-23 09:49:53 +00:00
MCObjectFileInfo.cpp [MachO] Stop generating *coal* sections. 2015-10-15 05:28:38 +00:00
MCObjectStreamer.cpp MC: Remove implicit ilist iterator conversions, NFC 2015-10-10 00:13:11 +00:00
MCObjectWriter.cpp Fix pr24486. 2015-10-05 12:07:05 +00:00
MCRegisterInfo.cpp Make SubRegIndex size mandatory, following r183020. 2013-05-31 23:45:26 +00:00
MCSchedule.cpp Add <type_traits> for is_pod, fixing r241947 2015-07-10 22:17:49 +00:00
MCSection.cpp MC: Remove implicit ilist iterator conversions, NFC 2015-10-10 00:13:11 +00:00
MCSectionCOFF.cpp Sink COFF.h MC include into .cpp files 2015-09-03 16:41:50 +00:00
MCSectionELF.cpp MCAsmInfo: Allow targets to specify when the .section directive should be omitted 2015-09-25 21:41:14 +00:00
MCSectionMachO.cpp [ADT] Switch a bunch of places in LLVM that were doing single-character 2015-09-10 06:12:31 +00:00
MCStreamer.cpp [X86] Emit .cfi_escape GNU_ARGS_SIZE when adjusting the stack before calls 2015-10-07 07:01:31 +00:00
MCSubtargetInfo.cpp Use std::begin/end and std::is_sorted to simplify some code. NFC 2015-10-17 16:37:11 +00:00
MCSymbol.cpp Fix pr24486. 2015-10-05 12:07:05 +00:00
MCSymbolELF.cpp Revert r240137 (Fixed/added namespace ending comments using clang-tidy. NFC) 2015-06-23 09:49:53 +00:00
MCSymbolizer.cpp Move MCSymbolizer's constructor into header. It's trivial - there's no need for 2014-03-27 02:42:52 +00:00
MCTargetOptions.cpp [llvm-mc] Add --no-warn flag with -W alias to disable outputting warnings while assembling. 2015-07-27 22:39:14 +00:00
MCValue.cpp Use operator<< instead of print in a few more places. 2015-05-27 13:05:42 +00:00
MCWin64EH.cpp Revert r240137 (Fixed/added namespace ending comments using clang-tidy. NFC) 2015-06-23 09:49:53 +00:00
MCWinEH.cpp Revert r240137 (Fixed/added namespace ending comments using clang-tidy. NFC) 2015-06-23 09:49:53 +00:00
StringTableBuilder.cpp Add a RAW mode to StringTableBuilder. 2015-10-23 21:48:05 +00:00
SubtargetFeature.cpp [ADT] Switch a bunch of places in LLVM that were doing single-character 2015-09-10 06:12:31 +00:00
WinCOFFObjectWriter.cpp Add a RAW mode to StringTableBuilder. 2015-10-23 21:48:05 +00:00
WinCOFFStreamer.cpp Fix pr24486. 2015-10-05 12:07:05 +00:00
YAML.cpp Invert the MC -> Object dependency. 2014-07-03 02:01:39 +00:00