diff options
author | Xi Ruoyao <xry111@xry111.site> | 2023-04-23 20:52:22 +0800 |
---|---|---|
committer | Xi Ruoyao <xry111@xry111.site> | 2023-05-07 00:58:15 +0800 |
commit | d90eed13ae655fbb4adb173fdae392b082e82a56 (patch) | |
tree | 1ea625dfe895395e229422f2834b538b372f65b7 /gcc/cp | |
parent | be6c13d5cef6fd9ca97dea7a6f5fbf93c51235b5 (diff) | |
download | gcc-d90eed13ae655fbb4adb173fdae392b082e82a56.zip gcc-d90eed13ae655fbb4adb173fdae392b082e82a56.tar.gz gcc-d90eed13ae655fbb4adb173fdae392b082e82a56.tar.bz2 |
LoongArch: Enable shrink wrapping
This commit implements the target macros for shrink wrapping of function
prologues/epilogues shrink wrapping on LoongArch.
Bootstrapped and regtested on loongarch64-linux-gnu. I don't have an
access to SPEC CPU so I hope the reviewer can perform a benchmark to see
if there is real benefit.
gcc/ChangeLog:
* config/loongarch/loongarch.h (struct machine_function): Add
reg_is_wrapped_separately array for register wrapping
information.
* config/loongarch/loongarch.cc
(loongarch_get_separate_components): New function.
(loongarch_components_for_bb): Likewise.
(loongarch_disqualify_components): Likewise.
(loongarch_process_components): Likewise.
(loongarch_emit_prologue_components): Likewise.
(loongarch_emit_epilogue_components): Likewise.
(loongarch_set_handled_components): Likewise.
(TARGET_SHRINK_WRAP_GET_SEPARATE_COMPONENTS): Define.
(TARGET_SHRINK_WRAP_COMPONENTS_FOR_BB): Likewise.
(TARGET_SHRINK_WRAP_DISQUALIFY_COMPONENTS): Likewise.
(TARGET_SHRINK_WRAP_EMIT_PROLOGUE_COMPONENTS): Likewise.
(TARGET_SHRINK_WRAP_EMIT_EPILOGUE_COMPONENTS): Likewise.
(TARGET_SHRINK_WRAP_SET_HANDLED_COMPONENTS): Likewise.
(loongarch_for_each_saved_reg): Skip registers that are wrapped
separately.
gcc/testsuite/ChangeLog:
* gcc.target/loongarch/shrink-wrap.c: New test.
Diffstat (limited to 'gcc/cp')
0 files changed, 0 insertions, 0 deletions