diff options
author | Francis Visoiu Mistrih <francisvm@yahoo.com> | 2018-03-14 20:34:03 +0000 |
---|---|---|
committer | Francis Visoiu Mistrih <francisvm@yahoo.com> | 2018-03-14 20:34:03 +0000 |
commit | 164560bd74652da1495cb335445ee6ca49957032 (patch) | |
tree | 015c10709bf2557a2b614522d9da8e692b7415f3 /lldb/packages/Python/lldbsuite/test/expression_command/expr-in-syscall/main.cpp | |
parent | ffc71c0a194fdcc6074f84fde9de4c7b713ddd80 (diff) | |
download | bcm5719-llvm-164560bd74652da1495cb335445ee6ca49957032.tar.gz bcm5719-llvm-164560bd74652da1495cb335445ee6ca49957032.zip |
[AArch64] Emit CSR loads in the same order as stores
Optionally allow the order of restoring the callee-saved registers in the
epilogue to be reversed.
The flag -reverse-csr-restore-seq generates the following code:
```
stp x26, x25, [sp, #-64]!
stp x24, x23, [sp, #16]
stp x22, x21, [sp, #32]
stp x20, x19, [sp, #48]
; [..]
ldp x24, x23, [sp, #16]
ldp x22, x21, [sp, #32]
ldp x20, x19, [sp, #48]
ldp x26, x25, [sp], #64
ret
```
Note how the CSRs are restored in the same order as they are saved.
One exception to this rule is the last `ldp`, which allows us to merge
the stack adjustment and the ldp into a post-index ldp. This is done by
first generating:
ldp x26, x27, [sp]
add sp, sp, #64
which gets merged by the arm64 load store optimizer into
ldp x26, x25, [sp], #64
The flag is disabled by default.
llvm-svn: 327569
Diffstat (limited to 'lldb/packages/Python/lldbsuite/test/expression_command/expr-in-syscall/main.cpp')
0 files changed, 0 insertions, 0 deletions