forked from OSchip/llvm-project
[clang] [ARM] Don't set the strict alignment flag for armv7 on Windows
Windows on armv7 is as alignment tolerant as Linux. The alignment considerations in the Windows on ARM ABI are documented at https://docs.microsoft.com/en-us/cpp/build/overview-of-arm-abi-conventions?view=msvc-160#alignment. The document doesn't explicitly say in which state the OS configures the SCTLR.A register (and it's not accessible from user space to inspect), but in practice, unaligned loads/stores do work and seem to be as fast as aligned loads and stores. (Unaligned strd also does seem to work, contrary to Linux, but significantly slower, as they're handled by the kernel - exactly as the document describes.) Differential Revision: https://reviews.llvm.org/D109960
This commit is contained in:
parent
338f21a4bd
commit
d13d9da1fb
|
@ -779,7 +779,8 @@ fp16_fml_fallthrough:
|
|||
// which raises an alignment fault on unaligned accesses. Linux
|
||||
// defaults this bit to 0 and handles it as a system-wide (not
|
||||
// per-process) setting. It is therefore safe to assume that ARMv7+
|
||||
// Linux targets support unaligned accesses. The same goes for NaCl.
|
||||
// Linux targets support unaligned accesses. The same goes for NaCl
|
||||
// and Windows.
|
||||
//
|
||||
// The above behavior is consistent with GCC.
|
||||
int VersionNum = getARMSubArchVersionNumber(Triple);
|
||||
|
@ -787,7 +788,8 @@ fp16_fml_fallthrough:
|
|||
if (VersionNum < 6 ||
|
||||
Triple.getSubArch() == llvm::Triple::SubArchType::ARMSubArch_v6m)
|
||||
Features.push_back("+strict-align");
|
||||
} else if (Triple.isOSLinux() || Triple.isOSNaCl()) {
|
||||
} else if (Triple.isOSLinux() || Triple.isOSNaCl() ||
|
||||
Triple.isOSWindows()) {
|
||||
if (VersionNum < 7)
|
||||
Features.push_back("+strict-align");
|
||||
} else
|
||||
|
|
|
@ -19,6 +19,9 @@
|
|||
// RUN: %clang -target armv7-unknown-nacl-gnueabihf -### %s 2> %t
|
||||
// RUN: FileCheck --check-prefix=CHECK-UNALIGNED-ARM < %t %s
|
||||
|
||||
// RUN: %clang -target armv7-windows -### %s 2> %t
|
||||
// RUN: FileCheck --check-prefix=CHECK-UNALIGNED-ARM < %t %s
|
||||
|
||||
// RUN: %clang -target aarch64-none-gnueabi -munaligned-access -### %s 2> %t
|
||||
// RUN: FileCheck --check-prefix=CHECK-UNALIGNED-AARCH64 < %t %s
|
||||
|
||||
|
|
Loading…
Reference in New Issue