[all-commits] [llvm/llvm-project] 09b531: [compiler-rt] [scudo] Use -mcrc32 on x86 when avai...
Michał Górny via All-commits
all-commits at lists.llvm.org
Thu Mar 31 08:50:17 PDT 2022
Branch: refs/heads/main
Home: https://github.com/llvm/llvm-project
Commit: 09b53121c323f260ab97cecd067d4e7b3be1bf7c
https://github.com/llvm/llvm-project/commit/09b53121c323f260ab97cecd067d4e7b3be1bf7c
Author: Michał Górny <mgorny at moritz.systems>
Date: 2022-03-31 (Thu, 31 Mar 2022)
Changed paths:
M compiler-rt/cmake/config-ix.cmake
M compiler-rt/lib/scudo/CMakeLists.txt
M compiler-rt/lib/scudo/scudo_allocator.cpp
M compiler-rt/lib/scudo/scudo_crc32.cpp
M compiler-rt/lib/scudo/scudo_crc32.h
M compiler-rt/lib/scudo/standalone/CMakeLists.txt
M compiler-rt/lib/scudo/standalone/checksum.h
M compiler-rt/lib/scudo/standalone/chunk.h
M compiler-rt/lib/scudo/standalone/crc32_hw.cpp
Log Message:
-----------
[compiler-rt] [scudo] Use -mcrc32 on x86 when available
Update the hardware CRC32 logic in scudo to support using `-mcrc32`
instead of `-msse4.2`. The CRC32 intrinsics use the former flag
in the newer compiler versions, e.g. in clang since 12fa608af44a.
With these compilers, passing `-msse4.2` is insufficient to enable
the instructions and causes build failures when `-march` does not enable
CRC32:
/var/tmp/portage/sys-libs/compiler-rt-sanitizers-14.0.0/work/compiler-rt/lib/scudo/scudo_crc32.cpp:20:10: error: always_inline function '_mm_crc32_u32' requires target feature 'crc32', but would be inlined into function 'computeHardwareCRC32' that is compiled without support for 'crc32'
return CRC32_INTRINSIC(Crc, Data);
^
/var/tmp/portage/sys-libs/compiler-rt-sanitizers-14.0.0/work/compiler-rt/lib/scudo/scudo_crc32.h:27:27: note: expanded from macro 'CRC32_INTRINSIC'
# define CRC32_INTRINSIC FIRST_32_SECOND_64(_mm_crc32_u32, _mm_crc32_u64)
^
/var/tmp/portage/sys-libs/compiler-rt-sanitizers-14.0.0/work/compiler-rt/lib/scudo/../sanitizer_common/sanitizer_platform.h:132:36: note: expanded from macro 'FIRST_32_SECOND_64'
# define FIRST_32_SECOND_64(a, b) (a)
^
1 error generated.
For backwards compatibility, use `-mcrc32` when available and fall back
to `-msse4.2`. The `<smmintrin.h>` header remains in use as it still
works and is compatible with GCC, while clang's `<crc32intrin.h>`
is not.
Originally reported in https://bugs.gentoo.org/835870.
Differential Revision: https://reviews.llvm.org/D122789
More information about the All-commits
mailing list