1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-11-23 11:13:28 +01:00
llvm-mirror/lib
Geoff Berry 8681d4c5a2 [AArch64] Combine callee-save and local stack SP adjustment instructions.
Summary:
If a function needs to allocate both callee-save stack memory and local
stack memory, we currently decrement/increment the SP in two steps:
first for the callee-save area, and then for the local stack area.  This
changes the code to allocate them both at once at the very beginning/end
of the function.  This has two benefits:

1) there is one fewer sub/add micro-op in the prologue/epilogue

2) the stack adjustment instructions act as a scheduling barrier, so
moving them to the very beginning/end of the function increases post-RA
scheduler's ability to move instructions (that only depend on argument
registers) before any of the callee-save stores

This change can cause an increase in instructions if the original local
stack SP decrement could be folded into the first store to the stack.
This occurs when the first local stack store is to stack offset 0.  In
this case we are trading off one more sub instruction for one fewer sub
micro-op (along with benefits (2) and (3) above).

Reviewers: t.p.northover

Subscribers: aemerson, rengolin, mcrosier, llvm-commits

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

llvm-svn: 268746
2016-05-06 16:34:59 +00:00
..
Analysis ThinLTO: fix assertion and refactor check for hidden use from inline ASM in a helper function 2016-05-06 08:25:33 +00:00
AsmParser AMDGPU/SI: Add amdgpu_kernel calling convention. Part 1. 2016-05-06 09:07:29 +00:00
Bitcode BitcodeWriter: Simplify. NFC. 2016-05-06 02:41:23 +00:00
CodeGen [CodeGen] Round [SU]INT_TO_FP result when promoting from f16. 2016-05-06 00:58:00 +00:00
DebugInfo [codeview] Improve some comments 2016-05-05 20:58:46 +00:00
ExecutionEngine Thread Expected<...> up from libObject’s getType() for symbols to allow llvm-objdump to produce a good error message. 2016-05-02 20:28:12 +00:00
Fuzzer [libFuzzer] print stats after running individual inputs 2016-05-04 20:44:50 +00:00
IR AMDGPU/SI: Add amdgpu_kernel calling convention. Part 1. 2016-05-06 09:07:29 +00:00
IRReader
LibDriver LibDriver: Silently do nothing when provided no inputs. 2016-04-13 19:36:04 +00:00
LineEditor
Linker Fix recursive -only-needed. 2016-04-21 14:56:33 +00:00
LTO [PM] Port Interprocedural SCCP to the new pass manager. 2016-05-05 21:05:36 +00:00
MC [mips] Correct the ordering of HI/LO pairs in the relocation table. 2016-05-06 13:49:25 +00:00
Object Object: Fix two -Wpessimizing-move warnings after r268694 2016-05-05 23:59:57 +00:00
ObjectYAML
Option Option parser: class for consuming a joined arg in addition to all remaining args 2016-04-15 00:23:30 +00:00
Passes [PM] port IR based PGO prof-gen pass to new pass manager 2016-05-06 05:49:19 +00:00
ProfileData Add a note about the "entry count" used the profile summary 2016-05-05 19:54:13 +00:00
Support Remove LLVM_ENABLE_TIMESTAMPS 2016-05-05 19:57:03 +00:00
TableGen [NFC] Header cleanup 2016-04-18 09:17:29 +00:00
Target [AArch64] Combine callee-save and local stack SP adjustment instructions. 2016-05-06 16:34:59 +00:00
Transforms [SimplifyCFG] Prefer a simplification based on a dominating condition. 2016-05-06 14:25:14 +00:00
CMakeLists.txt
LLVMBuild.txt