1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-10-19 02:52:53 +02:00
llvm-mirror/lib
Kyungwoo Lee b06062f9f0 [AArch64] Homogeneous Prolog and Epilog Size Optimization
Second land attempt. MachineVerifier DefRegState expensive check errors fixed.

Prologs and epilogs handle callee-save registers and tend to be irregular with
different immediate offsets that are not often handled by the MachineOutliner.
Commit D18619/a5335647d5e8 (combining stack operations) stretched irregularity
further.

This patch tries to emit homogeneous stores and loads with the same offset for
prologs and epilogs respectively. We have observed that this canonicalizes
(homogenizes) prologs and epilogs significantly and results in a greatly
increased chance of outlining, resulting in a code size reduction.

Despite the above results, there are still size wins to be had that the
MachineOutliner does not provide due to the special handling X30/LR. To handle
the LR case, his patch custom-outlines prologs and epilogs in place. It does
this by doing the following:

  * Injects HOM_Prolog and HOM_Epilog pseudo instructions during a Prolog and
    Epilog Injection Pass.
  * Lowers and optimizes said pseudos in a AArchLowerHomogneousPrologEpilog Pass.
  * Outlined helpers are created on demand. Identical helpers are merged by the linker.
  * An opt-in flag is introduced to enable this feature. Another threshold flag
    is also introduced to control the aggressiveness of outlining for application's need.

This reduced an average of 4% of code size on LLVM-TestSuite/CTMark targeting arm64/-Oz.

Differential Revision: https://reviews.llvm.org/D76570
2021-02-02 14:57:26 -08:00
..
Analysis [SCEV] Apply loop guards to divisibility tests 2021-02-02 08:09:39 +02:00
AsmParser [ThinLTO] Add Visibility bits to GlobalValueSummary::GVFlags 2021-01-27 10:43:51 -08:00
BinaryFormat [Debuginfo][DW_OP_implicit_pointer] (1/7) Support for DW_OP_LLVM_implicit_pointer 2021-01-15 14:45:04 +05:30
Bitcode [ThinLTO] Add Visibility bits to GlobalValueSummary::GVFlags 2021-01-27 10:43:51 -08:00
Bitstream [llvm] Use llvm::append_range (NFC) 2021-01-06 18:27:33 -08:00
CodeGen [SelectionDAG] Prevent scalable vector warning from ComputeNumSignBits on extract_vector_elt on a scalable vector. 2021-02-01 23:42:03 -08:00
DebugInfo [NFC][DebugInfo] Fix Wreturn-type gcc warning 2021-01-29 11:42:23 +08:00
Demangle [Demangle] Support demangling Swift calling convention in MS demangler. 2021-01-27 13:24:54 -08:00
DWARFLinker [dsymutil][DWARFLinker][NFC] make AddressManager not depending on the order of checks for relocations. 2021-01-31 16:34:10 +03:00
ExecutionEngine [ORC] Clear unused materializing info entries. 2021-02-02 17:47:32 +11:00
Extensions
FileCheck [llvm] Use llvm::sort (NFC) 2021-01-17 10:39:45 -08:00
Frontend [OpenMPIRBuilder] Silence compiler warning. NFC. 2021-01-23 21:00:37 -06:00
Fuzzer
FuzzMutate [FuzzMutate] Add mutator to modify instruction flags. 2021-01-23 19:05:20 +00:00
InterfaceStub [llvm-elfabi] Support ELF file that lacks .gnu.hash section 2021-01-26 12:31:52 -08:00
IR [CSSPGO] Introducing distribution factor for pseudo probe. 2021-02-02 11:55:01 -08:00
IRReader
LineEditor
Linker [llvm-link] Fix for an assertion when linking global with appending linkage 2021-01-23 00:10:42 -08:00
LTO [LTOCodeGenerator] Use lto::Config for options (NFC). 2021-01-31 19:08:07 +00:00
MC [MC] Upgrade DWARF version to 5 upon .file 0 2021-02-02 09:41:05 -08:00
MCA [llvm] Use llvm::find (NFC) 2021-01-19 20:19:14 -08:00
Object Use DataExtractor to decode SLEB128 in android_relas. 2021-01-28 01:35:18 -08:00
ObjectYAML Diagnose if a SLEB128 is too large to fit in an int64_t. 2021-02-02 14:33:34 -08:00
Option [llvm] Simplify string comparisons (NFC) 2021-01-11 18:48:09 -08:00
Passes [CSSPGO] Introducing distribution factor for pseudo probe. 2021-02-02 11:55:01 -08:00
ProfileData [CSSPGO] Tweaking inlining with pseudo probes. 2021-02-01 13:56:40 -08:00
Remarks [llvm] Use append_range (NFC) 2021-01-27 23:25:41 -08:00
Support [VFS] Add support to RedirectingFileSystem for mapping a virtual directory to one in the external FS. 2021-02-02 14:56:17 +10:00
TableGen [TableGen] Fix anonymous record self-reference in foreach and multiclass 2021-02-01 10:59:07 -05:00
Target [AArch64] Homogeneous Prolog and Epilog Size Optimization 2021-02-02 14:57:26 -08:00
Testing
TextAPI [llvm] Use llvm::sort (NFC) 2021-01-17 10:39:45 -08:00
ToolDrivers llvm-lib: Pull error printing code out of two functions 2021-01-26 19:13:30 -05:00
Transforms [ConstraintElimination] Skip pointer casts. 2021-02-02 21:25:29 +00:00
WindowsManifest
XRay
CMakeLists.txt