Pushed r14-{4848..4852}. On Thu, 2023-10-19 at 22:02 +0800, Xi Ruoyao wrote: > For relaxation we are now generating assembler macros for symbolic > addresses everywhere, but this is limiting scheduling and there are > known situations where the relaxation cannot improve the code. > > 1. When we are performing LTO during a final link and the linker plugin > is used, la.global won't be relaxed because they reference to an > external or preemptable symbol. > 2. The linker currently do not relax la.tls.*. > 3. For la.local + ld/st pairs, if the address is only used once, > emitting pcalau12i + ld/st is always not worse than relying on linker > relaxation. > > Add -mexplicit-relocs=auto to allow the compiler to use explicit relocs > for these cases, but assembler macros for other cases. Use it as the > default if the assembler supports both explicit relocs and relaxation. > > LTO-bootstrapped and regtested on loongarch64-linux-gnu. Ok for trunk? > > Xi Ruoyao (5): > LoongArch: Add enum-style -mexplicit-relocs= option > LoongArch: Use explicit relocs for GOT access when > -mexplicit-relocs=auto and LTO during a final link with linker > plugin > LoongArch: Use explicit relocs for TLS access with > -mexplicit-relocs=auto > LoongArch: Use explicit relocs for addresses only used for one load or > store with -mexplicit-relocs=auto and -mcmodel={normal,medium} > LoongArch: Document -mexplicit-relocs={auto,none,always} > > .../loongarch/genopts/loongarch-strings | 6 + > gcc/config/loongarch/genopts/loongarch.opt.in | 21 ++- > gcc/config/loongarch/loongarch-def.h | 6 + > gcc/config/loongarch/loongarch-protos.h | 1 + > gcc/config/loongarch/loongarch-str.h | 5 + > gcc/config/loongarch/loongarch.cc | 75 ++++++++-- > gcc/config/loongarch/loongarch.h | 3 + > gcc/config/loongarch/loongarch.md | 128 +++++++++++++++++- > gcc/config/loongarch/loongarch.opt | 21 ++- > gcc/config/loongarch/predicates.md | 15 +- > gcc/doc/invoke.texi | 37 +++-- > .../loongarch/explicit-relocs-auto-lto.c | 26 ++++ > ...-relocs-auto-single-load-store-no-anchor.c | 6 + > .../explicit-relocs-auto-single-load-store.c | 14 ++ > .../explicit-relocs-auto-tls-ld-gd.c | 9 ++ > .../explicit-relocs-auto-tls-le-ie.c | 6 + > 16 files changed, 343 insertions(+), 36 deletions(-) > create mode 100644 > gcc/testsuite/gcc.target/loongarch/explicit-relocs-auto-lto.c > create mode 100644 > gcc/testsuite/gcc.target/loongarch/explicit-relocs-auto-single-load-store-no-anchor.c > create mode 100644 > gcc/testsuite/gcc.target/loongarch/explicit-relocs-auto-single-load-store.c > create mode 100644 > gcc/testsuite/gcc.target/loongarch/explicit-relocs-auto-tls-ld-gd.c > create mode 100644 > gcc/testsuite/gcc.target/loongarch/explicit-relocs-auto-tls-le-ie.c >
-- Xi Ruoyao <xry...@xry111.site> School of Aerospace Science and Technology, Xidian University