Some CPUs do not allow memory accesses to be unaligned, e.g. 2k1000la
who uses the la264 core on which misaligned access will trigger an
exception.
In this patch, a backend feature called ual is defined to decribe
whether the CPU supports unaligned memroy accesses. And this feature
can be toggled by clang options -m[no-]unaligned-access or the
aliases -m[no-]strict-align. When this feature is on,
allowsMisalignedMemoryAccesses sets the speed number to 1 and returns
true that allows the codegen to generate unaligned memory access insns.
Clang options -m[no-]unaligned-access are moved from m_arm_Features_Group
to m_Group because now more than one targets use them. And a test
is added to show that they remain unused on a target that does not
support them. In addition, to keep compatible with gcc, a new alias
-mno-strict-align is added which is equal to -munaligned-access.
The feature name ual is consistent with linux kernel [1] and the
output of lscpu or /proc/cpuinfo [2].
There is an LLT variant of allowsMisalignedMemoryAccesses, but
seems that curently it is only used in GlobalISel which LoongArch
doesn't support yet. So this variant is not implemented in this patch.
[1]: https://github.com/torvalds/linux/blob/master/arch/loongarch/include/asm/cpu.h#L77
[2]: https://github.com/torvalds/linux/blob/master/arch/loongarch/kernel/proc.c#L75
I think this is AArch32/AArch64/LoongArch only. I don't think this patch adds support for all other Targets.