Re: [PATCH v2] LoongArch: Add support code model extreme.
On Fri, 2022-08-19 at 09:56 +0800, Lulu Cheng wrote: > v1 -> v2: > - Modify some description information. > - Add options -W[no]extreme-plt, warn about code model extreme not support > plt mode, > and then disable plt. I think we can make -mcmodel=large imply -fno-plt, and reject if user uses "-fplt -mcmodel=large" explicitly: diff --git a/gcc/config/loongarch/loongarch.cc b/gcc/config/loongarch/loongarch.cc index 114ff8ec836..25483da0f44 100644 --- a/gcc/config/loongarch/loongarch.cc +++ b/gcc/config/loongarch/loongarch.cc @@ -5961,9 +5961,8 @@ loongarch_option_override_internal (struct gcc_options *opts) if (opts->x_flag_plt) { - warning (OPT_Wextreme_plt, "code model %qs not support %s mode," -"now set to %s", -"extreme", "plt", "noplt"); + if (global_options_set.x_flag_plt) + error ("code model %qs is not compatible with %s", "-fplt"); opts->x_flag_plt = 0; } break; -- Xi Ruoyao School of Aerospace Science and Technology, Xidian University
[PATCH v2] LoongArch: Add support code model extreme.
v1 -> v2: - Modify some description information. - Add options -W[no]extreme-plt, warn about code model extreme not support plt mode, and then disable plt. --- Use five instructions to calculate a signed 64-bit offset relative to the pc. gcc/ChangeLog: * config/loongarch/genopts/loongarch.opt.in: Add new option W[no-]extreme-plt. * config/loongarch/loongarch.opt: Update file. * config/loongarch/loongarch-opts.cc: Allow cmodel to be extreme. * config/loongarch/loongarch.cc (loongarch_call_tls_get_addr): Add extreme support for TLS GD and LD types. (loongarch_legitimize_tls_address): Add extreme support for TLS LE and IE. (loongarch_split_symbol): When compiling with -mcmodel=extreme, the symbol address will be obtained through five instructions. (loongarch_print_operand_reloc): Add support. (loongarch_print_operand): Add support. (loongarch_print_operand_address): Add support. (loongarch_option_override_internal): Set '-mcmodel=extreme' option incompatible with '-mno-explicit-relocs'. * config/loongarch/loongarch.md (@lui_l_hi20): Loads bits 12-31 of data into registers. (lui_h_lo20): Load bits 32-51 of the data and spell bits 0-31 of the source register. (lui_h_hi12): Load bits 52-63 of the data and spell bits 0-51 of the source register. * config/loongarch/predicates.md: Symbols need to be decomposed when defining the macro TARGET_CMODEL_EXTREME * doc/invoke.texi: Modify the description information of cmodel in the document. Document -W[no-]extreme-plt. gcc/testsuite/ChangeLog: * gcc.target/loongarch/func-call-1.c: Add option '-mcmodel=normal'. * gcc.target/loongarch/func-call-2.c: Likewise. * gcc.target/loongarch/func-call-3.c: Likewise. * gcc.target/loongarch/func-call-4.c: Likewise. * gcc.target/loongarch/func-call-5.c: Likewise. * gcc.target/loongarch/func-call-6.c: Likewise. * gcc.target/loongarch/func-call-7.c: Likewise. * gcc.target/loongarch/func-call-8.c: Likewise. * gcc.target/loongarch/relocs-symbol-noaddend.c: Likewise. * gcc.target/loongarch/func-call-extreme-1.c: New test. * gcc.target/loongarch/func-call-extreme-2.c: New test. --- gcc/config/loongarch/genopts/loongarch.opt.in | 3 + gcc/config/loongarch/loongarch-opts.cc| 3 +- gcc/config/loongarch/loongarch.cc | 189 +++--- gcc/config/loongarch/loongarch.md | 34 +++- gcc/config/loongarch/loongarch.opt| 3 + gcc/config/loongarch/predicates.md| 9 +- gcc/doc/invoke.texi | 59 ++ .../gcc.target/loongarch/func-call-1.c| 2 +- .../gcc.target/loongarch/func-call-2.c| 2 +- .../gcc.target/loongarch/func-call-3.c| 2 +- .../gcc.target/loongarch/func-call-4.c| 2 +- .../gcc.target/loongarch/func-call-5.c| 2 +- .../gcc.target/loongarch/func-call-6.c| 2 +- .../gcc.target/loongarch/func-call-7.c| 2 +- .../gcc.target/loongarch/func-call-8.c| 2 +- .../loongarch/func-call-extreme-1.c | 32 +++ .../loongarch/func-call-extreme-2.c | 32 +++ .../loongarch/relocs-symbol-noaddend.c| 2 +- 18 files changed, 303 insertions(+), 79 deletions(-) create mode 100644 gcc/testsuite/gcc.target/loongarch/func-call-extreme-1.c create mode 100644 gcc/testsuite/gcc.target/loongarch/func-call-extreme-2.c diff --git a/gcc/config/loongarch/genopts/loongarch.opt.in b/gcc/config/loongarch/genopts/loongarch.opt.in index a571b6b7524..86fd80fc7a2 100644 --- a/gcc/config/loongarch/genopts/loongarch.opt.in +++ b/gcc/config/loongarch/genopts/loongarch.opt.in @@ -158,6 +158,9 @@ mexplicit-relocs Target Var(TARGET_EXPLICIT_RELOCS) Init(HAVE_AS_EXPLICIT_RELOCS) Use %reloc() assembly operators. +Wextreme-plt +Target Var(warn_extreme_plt) Init(1) Warning code model extreme not support plt mode. + ; The code model option names for -mcmodel. Enum Name(cmodel) Type(int) diff --git a/gcc/config/loongarch/loongarch-opts.cc b/gcc/config/loongarch/loongarch-opts.cc index 3f70943ded6..2ae89f23443 100644 --- a/gcc/config/loongarch/loongarch-opts.cc +++ b/gcc/config/loongarch/loongarch-opts.cc @@ -376,14 +376,13 @@ fallback: /* 5. Target code model */ t.cmodel = constrained.cmodel ? opt_cmodel : CMODEL_NORMAL; - if (t.cmodel != CMODEL_NORMAL) + if (t.cmodel != CMODEL_NORMAL && t.cmodel != CMODEL_EXTREME) { warning (0, "%qs is not supported, now cmodel is set to %qs", loongarch_cmodel_strings[t.cmodel], "normal"); t.cmodel = CMODEL_NORMAL; } - /* Cleanup and return. */ obstack_free (_obstack, NULL); *target = t; diff --git a/gcc/config/loongarch/loongarch.cc