llvm/lib
Manman Ren 3559ef2a36 CXX_FAST_TLS calling convention: performance improvement for AArch64.
The access function has a short entry and a short exit, the initialization
block is only run the first time. To improve the performance, we want to
have a short frame at the entry and exit.

We explicitly handle most of the CSRs via copies. Only the CSRs that are not
handled via copies will be in CSR_SaveList.

Frame lowering and prologue/epilogue insertion will generate a short frame
in the entry and exit according to CSR_SaveList. The majority of the CSRs will
be handled by register allcoator. Register allocator will try to spill and
reload them in the initialization block.

We add CSRsViaCopy, it will be explicitly handled during lowering.

1> we first set FunctionLoweringInfo->SplitCSR if conditions are met (the target
   supports it for the given machine function and the function has only return
   exits). We also call TLI->initializeSplitCSR to perform initialization.
2> we call TLI->insertCopiesSplitCSR to insert copies from CSRsViaCopy to
   virtual registers at beginning of the entry block and copies from virtual
   registers to CSRsViaCopy at beginning of the exit blocks.
3> we also need to make sure the explicit copies will not be eliminated.

The target independent portion was committed as r255353.
rdar://problem/23557469

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


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@255821 91177308-0d34-0410-b5e6-96231b3b80d8
2015-12-16 21:04:19 +00:00
..
Analysis LPM: Make callers of LPM.deleteLoopFromQueue update LoopInfo directly. NFC 2015-12-16 18:40:20 +00:00
AsmParser Add InaccessibleMemOnly and inaccessibleMemOrArgMemOnly attributes 2015-12-16 16:16:19 +00:00
Bitcode Add InaccessibleMemOnly and inaccessibleMemOrArgMemOnly attributes 2015-12-16 16:16:19 +00:00
CodeGen CXX_FAST_TLS calling convention: target independent portion. 2015-12-16 20:45:48 +00:00
DebugInfo [llvm-dwp] Retrieve the DWOID from the CU for the cu_index entry 2015-12-04 17:20:04 +00:00
ExecutionEngine [SectionMemoryManager] Make better use of virtual memory 2015-12-16 11:13:23 +00:00
Fuzzer Fuzzer: Fix library dependencies. 2015-12-16 02:14:57 +00:00
IR Add InaccessibleMemOnly and inaccessibleMemOrArgMemOnly attributes 2015-12-16 16:16:19 +00:00
IRReader Return a unique_ptr from getLazyBitcodeModule and parseBitcodeFile. NFC. 2015-06-16 22:27:55 +00:00
LibDriver [Option] Use an ArrayRef to store the Option Infos in OptTable. NFC 2015-10-21 16:30:42 +00:00
LineEditor Use ADDITIONAL_HEADER_DIRS in all LLVM CMake projects. 2015-02-11 03:28:02 +00:00
Linker Use diagnostic handler in the LLVMContext 2015-12-14 23:17:03 +00:00
LTO Use diagnostic handler in the LLVMContext 2015-12-14 23:17:03 +00:00
MC [X86][inline asm] support even directive 2015-12-13 17:07:23 +00:00
Object Use diagnostic handler in the LLVMContext 2015-12-14 23:17:03 +00:00
Option [Option] Use an ArrayRef to store the Option Infos in OptTable. NFC 2015-10-21 16:30:42 +00:00
Passes [PM] Port StripDeadPrototypes to the new pass manager 2015-10-30 23:28:12 +00:00
ProfileData Initialize all bytes in vp data (msan error) 2015-12-15 21:57:08 +00:00
Support [SectionMemoryManager] Make better use of virtual memory 2015-12-16 11:13:23 +00:00
TableGen [TblGen] ArrayRefize TGParser. No functional change intended. 2015-10-24 12:46:45 +00:00
Target CXX_FAST_TLS calling convention: performance improvement for AArch64. 2015-12-16 21:04:19 +00:00
Transforms LPM: Make callers of LPM.deleteLoopFromQueue update LoopInfo directly. NFC 2015-12-16 18:40:20 +00:00
CMakeLists.txt LibDriver, llvm-lib: introduce. 2015-06-09 21:50:22 +00:00
LLVMBuild.txt Wrap some long lines in LLVMBuild files. NFC 2015-06-12 18:44:57 +00:00
Makefile LibDriver, llvm-lib: introduce. 2015-06-09 21:50:22 +00:00