[all-commits] [llvm/llvm-project] 476018: [LoongArch] Define `ual` feature and override `all...
Lu Weining via All-commits
all-commits at lists.llvm.org
Tue Jun 6 22:41:40 PDT 2023
Branch: refs/heads/main
Home: https://github.com/llvm/llvm-project
Commit: 47601815ec3a4f31c797c75748af08acfabc46dc
https://github.com/llvm/llvm-project/commit/47601815ec3a4f31c797c75748af08acfabc46dc
Author: Weining Lu <luweining at loongson.cn>
Date: 2023-06-07 (Wed, 07 Jun 2023)
Changed paths:
M clang/include/clang/Driver/Options.td
M clang/lib/Driver/ToolChains/Arch/LoongArch.cpp
M clang/test/Driver/loongarch-default-features.c
M clang/test/Driver/loongarch-march.c
M clang/test/Driver/loongarch-mdouble-float.c
M clang/test/Driver/loongarch-mfpu.c
M clang/test/Driver/loongarch-msingle-float.c
M clang/test/Driver/loongarch-msoft-float.c
A clang/test/Driver/loongarch-munaligned-access.c
A clang/test/Driver/munaligned-access-unused.c
M llvm/include/llvm/TargetParser/LoongArchTargetParser.def
M llvm/include/llvm/TargetParser/LoongArchTargetParser.h
M llvm/lib/Target/LoongArch/LoongArch.td
M llvm/lib/Target/LoongArch/LoongArchISelLowering.cpp
M llvm/lib/Target/LoongArch/LoongArchISelLowering.h
M llvm/lib/Target/LoongArch/LoongArchSubtarget.h
M llvm/test/CodeGen/LoongArch/calling-conv-common.ll
M llvm/test/CodeGen/LoongArch/ir-instruction/atomicrmw-fp.ll
M llvm/test/CodeGen/LoongArch/tail-calls.ll
A llvm/test/CodeGen/LoongArch/unaligned-access.ll
A llvm/test/CodeGen/LoongArch/unaligned-memcpy-inline.ll
Log Message:
-----------
[LoongArch] Define `ual` feature and override `allowsMisalignedMemoryAccesses`
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
Reviewed By: xen0n
Differential Revision: https://reviews.llvm.org/D149946
More information about the All-commits
mailing list