As described in [1][2], -mtune= is used to select the type of target
microarchitecture, defaults to the value of -march. The set of
possible values should be a superset of -march values. Currently
possible values of -march= and -mtune= are native, loongarch64
and la464.
D136146 has supported -march={loongarch64,la464} and this patch adds
support for -march=native and -mtune=.
A new ProcessorModel called loongarch64 is defined in LoongArch.td
to support -mtune=loongarch64.
llvm::sys::getHostCPUName() returns generic on unknown or future
LoongArch CPUs, e.g. the not yet added la664, leading to
llvm::LoongArch::isValidArchName() failing to parse the arch name.
In this case, use loongarch64 as the default arch name for 64-bit
CPUs.
Two preprocessor macros are defined based on user-provided -march=
and -mtune= options and the defaults.
- __loongarch_arch
- __loongarch_tune
Note that, to work with -fno-integrated-cc1 we leverage cc1 options
-target-cpu and -tune-cpu to pass driver options -march= and
-mtune= respectively because cc1 needs these information to define
macros in LoongArchTargetInfo::getTargetDefines.
[1]: https://github.com/loongson/LoongArch-Documentation/blob/2023.04.20/docs/LoongArch-toolchain-conventions-EN.adoc
[2]: https://github.com/loongson/la-softdev-convention/blob/v0.1/la-softdev-convention.adoc
These are not for this change. (They have be cleaned up after the llvm18-init tag). I will revert it.