This is intended to behave like GCC's -mcmodel=extreme.
Technically the true GCC equivalent would be -mcmodel=large which is
not yet implemented there, and we probably do not want to take the
"Large" name until things settle in GCC side, but:
- LLVM does not have a CodeModel::Extreme, and it seems too early to have such a variant added just for enabling LoongArch; and
- CodeModel::Small is already being used for GCC -mcmodel=normal which is already a case of divergent naming.
Regarding the codegen, loads/stores immediately after a PC-relative
large address load (that ends with something like `add.d $addr, $addr,
$tmp`) should get merged with the addition into corresponding ldx/stx
ops, but is currently not done. This is because pseudo-instructions are
expanded after instruction selection, and is best fixed with a separate
change.
I think the suffix s is unnecessary for variables. :)