Merge llvm, clang, compiler-rt, libc++, libunwind, lld, lldb and openmp
9.0.1 final release c1a0a213378a458fbea1a5c77b315c7dce08fd05. Release notes for llvm, clang, lld and libc++ 9.0.1 will become available here: https://releases.llvm.org/9.0.1/docs/ReleaseNotes.html https://releases.llvm.org/9.0.1/tools/clang/docs/ReleaseNotes.html https://releases.llvm.org/9.0.1/tools/lld/docs/ReleaseNotes.html https://releases.llvm.org/9.0.1/projects/libcxx/docs/ReleaseNotes.html PR: 240629 MFC after: 1 month
This commit is contained in:
commit
c14a5a8800
@ -36,6 +36,242 @@
|
||||
# xargs -n1 | sort | uniq -d;
|
||||
# done
|
||||
|
||||
# 20191222: new clang import which bumps version from 9.0.0 to 9.0.1.
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/cuda_wrappers/algorithm
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/cuda_wrappers/complex
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/cuda_wrappers/new
|
||||
OLD_DIRS+=usr/lib/clang/9.0.0/include/cuda_wrappers
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/openmp_wrappers/__clang_openmp_math.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/openmp_wrappers/__clang_openmp_math_declares.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/openmp_wrappers/cmath
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/openmp_wrappers/math.h
|
||||
OLD_DIRS+=usr/lib/clang/9.0.0/include/openmp_wrappers
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/ppc_wrappers/emmintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/ppc_wrappers/mm_malloc.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/ppc_wrappers/mmintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/ppc_wrappers/xmmintrin.h
|
||||
OLD_DIRS+=usr/lib/clang/9.0.0/include/ppc_wrappers
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/sanitizer/allocator_interface.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/sanitizer/asan_interface.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/sanitizer/common_interface_defs.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/sanitizer/coverage_interface.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/sanitizer/dfsan_interface.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/sanitizer/hwasan_interface.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/sanitizer/linux_syscall_hooks.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/sanitizer/lsan_interface.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/sanitizer/msan_interface.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/sanitizer/netbsd_syscall_hooks.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/sanitizer/scudo_interface.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/sanitizer/tsan_interface.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/sanitizer/tsan_interface_atomic.h
|
||||
OLD_DIRS+=usr/lib/clang/9.0.0/include/sanitizer
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/__clang_cuda_builtin_vars.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/__clang_cuda_cmath.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/__clang_cuda_complex_builtins.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/__clang_cuda_device_functions.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/__clang_cuda_intrinsics.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/__clang_cuda_libdevice_declares.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/__clang_cuda_math_forward_declares.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/__clang_cuda_runtime_wrapper.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/__stddef_max_align_t.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/__wmmintrin_aes.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/__wmmintrin_pclmul.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/adxintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/altivec.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/ammintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/arm64intr.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/arm_acle.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/arm_fp16.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/arm_neon.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/armintr.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/avx2intrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/avx512bf16intrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/avx512bitalgintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/avx512bwintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/avx512cdintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/avx512dqintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/avx512erintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/avx512fintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/avx512ifmaintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/avx512ifmavlintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/avx512pfintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/avx512vbmi2intrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/avx512vbmiintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/avx512vbmivlintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/avx512vlbf16intrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/avx512vlbitalgintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/avx512vlbwintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/avx512vlcdintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/avx512vldqintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/avx512vlintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/avx512vlvbmi2intrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/avx512vlvnniintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/avx512vlvp2intersectintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/avx512vnniintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/avx512vp2intersectintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/avx512vpopcntdqintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/avx512vpopcntdqvlintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/avxintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/bmi2intrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/bmiintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/cetintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/cldemoteintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/clflushoptintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/clwbintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/clzerointrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/cpuid.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/emmintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/enqcmdintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/f16cintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/fma4intrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/fmaintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/fxsrintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/gfniintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/htmintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/htmxlintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/ia32intrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/immintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/invpcidintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/lwpintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/lzcntintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/mm3dnow.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/mm_malloc.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/mmintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/module.modulemap
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/movdirintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/msa.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/mwaitxintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/nmmintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/opencl-c-base.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/opencl-c.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/pconfigintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/pkuintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/pmmintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/popcntintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/prfchwintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/ptwriteintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/rdseedintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/rtmintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/s390intrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/sgxintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/shaintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/smmintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/tbmintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/tmmintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/vadefs.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/vaesintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/vecintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/vpclmulqdqintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/waitpkgintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/wbnoinvdintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/wmmintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/x86intrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/xmmintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/xopintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/xsavecintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/xsaveintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/xsaveoptintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/xsavesintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/xtestintrin.h
|
||||
OLD_DIRS+=usr/lib/clang/9.0.0/include
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.asan-aarch64.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.asan-aarch64.so
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.asan-arm.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.asan-arm.so
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.asan-armhf.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.asan-armhf.so
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.asan-i386.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.asan-i386.so
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.asan-preinit-aarch64.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.asan-preinit-arm.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.asan-preinit-armhf.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.asan-preinit-i386.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.asan-preinit-x86_64.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.asan-x86_64.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.asan-x86_64.so
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.asan_cxx-aarch64.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.asan_cxx-arm.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.asan_cxx-armhf.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.asan_cxx-i386.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.asan_cxx-x86_64.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.cfi-aarch64.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.cfi-arm.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.cfi-armhf.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.cfi-i386.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.cfi-x86_64.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.cfi_diag-aarch64.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.cfi_diag-arm.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.cfi_diag-armhf.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.cfi_diag-i386.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.cfi_diag-x86_64.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.dd-aarch64.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.dd-x86_64.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.fuzzer-aarch64.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.fuzzer-x86_64.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.fuzzer_no_main-aarch64.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.fuzzer_no_main-x86_64.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.msan-aarch64.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.msan-x86_64.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.msan_cxx-aarch64.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.msan_cxx-x86_64.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.profile-aarch64.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.profile-arm.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.profile-armhf.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.profile-i386.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.profile-powerpc.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.profile-powerpc64.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.profile-x86_64.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.safestack-aarch64.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.safestack-i386.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.safestack-x86_64.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.stats-aarch64.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.stats-arm.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.stats-armhf.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.stats-i386.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.stats-x86_64.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.stats_client-aarch64.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.stats_client-arm.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.stats_client-armhf.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.stats_client-i386.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.stats_client-x86_64.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.tsan-aarch64.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.tsan-x86_64.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.tsan_cxx-aarch64.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.tsan_cxx-x86_64.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.ubsan_minimal-aarch64.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.ubsan_minimal-arm.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.ubsan_minimal-armhf.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.ubsan_minimal-i386.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.ubsan_minimal-x86_64.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.ubsan_standalone-aarch64.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.ubsan_standalone-arm.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.ubsan_standalone-armhf.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.ubsan_standalone-i386.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.ubsan_standalone-x86_64.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.ubsan_standalone_cxx-aarch64.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.ubsan_standalone_cxx-arm.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.ubsan_standalone_cxx-armhf.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.ubsan_standalone_cxx-i386.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.ubsan_standalone_cxx-x86_64.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.xray-aarch64.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.xray-arm.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.xray-armhf.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.xray-basic-aarch64.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.xray-basic-arm.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.xray-basic-armhf.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.xray-basic-x86_64.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.xray-fdr-aarch64.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.xray-fdr-arm.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.xray-fdr-armhf.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.xray-fdr-x86_64.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.xray-profiling-aarch64.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.xray-profiling-arm.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.xray-profiling-armhf.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.xray-profiling-x86_64.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.xray-x86_64.a
|
||||
OLD_DIRS+=usr/lib/clang/9.0.0/lib/freebsd
|
||||
OLD_DIRS+=usr/lib/clang/9.0.0/lib
|
||||
OLD_DIRS+=usr/lib/clang/9.0.0
|
||||
# 20191214: Removal of sranddev(3)
|
||||
OLD_FILES+=usr/share/man/man3/sranddev.3.gz
|
||||
# 20191213: remove timeout(9)
|
||||
|
6
UPDATING
6
UPDATING
@ -26,6 +26,12 @@ NOTE TO PEOPLE WHO THINK THAT FreeBSD 13.x IS SLOW:
|
||||
disable the most expensive debugging functionality run
|
||||
"ln -s 'abort:false,junk:false' /etc/malloc.conf".)
|
||||
|
||||
20191222:
|
||||
Clang, llvm, lld, lldb, compiler-rt, libc++, libunwind and openmp have
|
||||
been upgraded to 9.0.1. Please see the 20141231 entry below for
|
||||
information about prerequisites and upgrading, if you are not already
|
||||
using clang 3.5.0 or higher.
|
||||
|
||||
20191212:
|
||||
r355677 has modified the internal interface used between the
|
||||
NFS modules in the kernel. As such, they must all be upgraded
|
||||
|
@ -109,14 +109,12 @@ private:
|
||||
UnpaddedCoerceAndExpandType = T;
|
||||
}
|
||||
|
||||
ABIArgInfo(Kind K)
|
||||
: TheKind(K), PaddingInReg(false), InReg(false) {
|
||||
}
|
||||
|
||||
public:
|
||||
ABIArgInfo()
|
||||
ABIArgInfo(Kind K = Direct)
|
||||
: TypeData(nullptr), PaddingType(nullptr), DirectOffset(0),
|
||||
TheKind(Direct), PaddingInReg(false), InReg(false) {}
|
||||
TheKind(K), PaddingInReg(false), InAllocaSRet(false),
|
||||
IndirectByVal(false), IndirectRealign(false), SRetAfterThis(false),
|
||||
InReg(false), CanBeFlattened(false), SignExt(false) {}
|
||||
|
||||
static ABIArgInfo getDirect(llvm::Type *T = nullptr, unsigned Offset = 0,
|
||||
llvm::Type *Padding = nullptr,
|
||||
|
@ -427,10 +427,11 @@ bool ARMTargetInfo::handleTargetFeatures(std::vector<std::string> &Features,
|
||||
for (const auto &Feature : Features) {
|
||||
if (Feature == "+soft-float") {
|
||||
SoftFloat = true;
|
||||
} else if (Feature == "+vfp2sp" || Feature == "+vfp2") {
|
||||
} else if (Feature == "+vfp2sp" || Feature == "+vfp2d16sp" ||
|
||||
Feature == "+vfp2" || Feature == "+vfp2d16") {
|
||||
FPU |= VFP2FPU;
|
||||
HW_FP |= HW_FP_SP;
|
||||
if (Feature == "+vfp2")
|
||||
if (Feature == "+vfp2" || Feature == "+vfp2d16")
|
||||
HW_FP |= HW_FP_DP;
|
||||
} else if (Feature == "+vfp3sp" || Feature == "+vfp3d16sp" ||
|
||||
Feature == "+vfp3" || Feature == "+vfp3d16") {
|
||||
|
@ -2540,6 +2540,11 @@ LValue CodeGenFunction::EmitDeclRefLValue(const DeclRefExpr *E) {
|
||||
// Spill the constant value to a global.
|
||||
Addr = CGM.createUnnamedGlobalFrom(*VD, Val,
|
||||
getContext().getDeclAlign(VD));
|
||||
llvm::Type *VarTy = getTypes().ConvertTypeForMem(VD->getType());
|
||||
auto *PTy = llvm::PointerType::get(
|
||||
VarTy, getContext().getTargetAddressSpace(VD->getType()));
|
||||
if (PTy != Addr.getType())
|
||||
Addr = Builder.CreatePointerBitCastOrAddrSpaceCast(Addr, PTy);
|
||||
} else {
|
||||
// Should we be using the alignment of the constant pointer we emitted?
|
||||
CharUnits Alignment =
|
||||
|
@ -617,6 +617,9 @@ private:
|
||||
llvm::Function *EmitVirtualMemPtrThunk(const CXXMethodDecl *MD,
|
||||
const MethodVFTableLocation &ML);
|
||||
|
||||
llvm::Constant *EmitMemberDataPointer(const CXXRecordDecl *RD,
|
||||
CharUnits offset);
|
||||
|
||||
public:
|
||||
llvm::Type *ConvertMemberPointerType(const MemberPointerType *MPT) override;
|
||||
|
||||
@ -2700,7 +2703,11 @@ MicrosoftCXXABI::EmitFullMemberPointer(llvm::Constant *FirstField,
|
||||
llvm::Constant *
|
||||
MicrosoftCXXABI::EmitMemberDataPointer(const MemberPointerType *MPT,
|
||||
CharUnits offset) {
|
||||
const CXXRecordDecl *RD = MPT->getMostRecentCXXRecordDecl();
|
||||
return EmitMemberDataPointer(MPT->getMostRecentCXXRecordDecl(), offset);
|
||||
}
|
||||
|
||||
llvm::Constant *MicrosoftCXXABI::EmitMemberDataPointer(const CXXRecordDecl *RD,
|
||||
CharUnits offset) {
|
||||
if (RD->getMSInheritanceModel() ==
|
||||
MSInheritanceAttr::Keyword_virtual_inheritance)
|
||||
offset -= getContext().getOffsetOfBaseWithVBPtr(RD);
|
||||
@ -2724,8 +2731,17 @@ llvm::Constant *MicrosoftCXXABI::EmitMemberPointer(const APValue &MP,
|
||||
if (const CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(MPD)) {
|
||||
C = EmitMemberFunctionPointer(MD);
|
||||
} else {
|
||||
// For a pointer to data member, start off with the offset of the field in
|
||||
// the class in which it was declared, and convert from there if necessary.
|
||||
// For indirect field decls, get the outermost anonymous field and use the
|
||||
// parent class.
|
||||
CharUnits FieldOffset = Ctx.toCharUnitsFromBits(Ctx.getFieldOffset(MPD));
|
||||
C = EmitMemberDataPointer(DstTy, FieldOffset);
|
||||
const FieldDecl *FD = dyn_cast<FieldDecl>(MPD);
|
||||
if (!FD)
|
||||
FD = cast<FieldDecl>(*cast<IndirectFieldDecl>(MPD)->chain_begin());
|
||||
const CXXRecordDecl *RD = cast<CXXRecordDecl>(FD->getParent());
|
||||
RD = RD->getMostRecentNonInjectedDecl();
|
||||
C = EmitMemberDataPointer(RD, FieldOffset);
|
||||
}
|
||||
|
||||
if (!MemberPointerPath.empty()) {
|
||||
|
@ -460,7 +460,7 @@ fp16_fml_fallthrough:
|
||||
// now just be explicit and disable all known dependent features
|
||||
// as well.
|
||||
for (std::string Feature : {
|
||||
"vfp2", "vfp2sp",
|
||||
"vfp2", "vfp2sp", "vfp2d16", "vfp2d16sp",
|
||||
"vfp3", "vfp3sp", "vfp3d16", "vfp3d16sp",
|
||||
"vfp4", "vfp4sp", "vfp4d16", "vfp4d16sp",
|
||||
"fp-armv8", "fp-armv8sp", "fp-armv8d16", "fp-armv8d16sp",
|
||||
|
@ -658,11 +658,11 @@ void Linux::AddClangSystemIncludeArgs(const ArgList &DriverArgs,
|
||||
if (!DriverArgs.hasArg(options::OPT_nostdlibinc))
|
||||
addSystemInclude(DriverArgs, CC1Args, SysRoot + "/usr/local/include");
|
||||
|
||||
if (!DriverArgs.hasArg(options::OPT_nobuiltininc)) {
|
||||
SmallString<128> P(D.ResourceDir);
|
||||
llvm::sys::path::append(P, "include");
|
||||
addSystemInclude(DriverArgs, CC1Args, P);
|
||||
}
|
||||
SmallString<128> ResourceDirInclude(D.ResourceDir);
|
||||
llvm::sys::path::append(ResourceDirInclude, "include");
|
||||
if (!DriverArgs.hasArg(options::OPT_nobuiltininc) &&
|
||||
(!getTriple().isMusl() || DriverArgs.hasArg(options::OPT_nostdlibinc)))
|
||||
addSystemInclude(DriverArgs, CC1Args, ResourceDirInclude);
|
||||
|
||||
if (DriverArgs.hasArg(options::OPT_nostdlibinc))
|
||||
return;
|
||||
@ -860,6 +860,9 @@ void Linux::AddClangSystemIncludeArgs(const ArgList &DriverArgs,
|
||||
addExternCSystemInclude(DriverArgs, CC1Args, SysRoot + "/include");
|
||||
|
||||
addExternCSystemInclude(DriverArgs, CC1Args, SysRoot + "/usr/include");
|
||||
|
||||
if (!DriverArgs.hasArg(options::OPT_nobuiltininc) && getTriple().isMusl())
|
||||
addSystemInclude(DriverArgs, CC1Args, ResourceDirInclude);
|
||||
}
|
||||
|
||||
static std::string DetectLibcxxIncludePath(llvm::vfs::FileSystem &vfs,
|
||||
|
@ -3475,7 +3475,12 @@ bool Sema::MergeFunctionDecl(FunctionDecl *New, NamedDecl *&OldD,
|
||||
}
|
||||
}
|
||||
|
||||
if (OldQTypeForComparison == NewQType)
|
||||
// If the function types are compatible, merge the declarations. Ignore the
|
||||
// exception specifier because it was already checked above in
|
||||
// CheckEquivalentExceptionSpec, and we don't want follow-on diagnostics
|
||||
// about incompatible types under -fms-compatibility.
|
||||
if (Context.hasSameFunctionTypeIgnoringExceptionSpec(OldQTypeForComparison,
|
||||
NewQType))
|
||||
return MergeCompatibleFunctionDecls(New, Old, S, MergeTypeWithOld);
|
||||
|
||||
// If the types are imprecise (due to dependent constructs in friends or
|
||||
|
@ -6325,7 +6325,8 @@ namespace {
|
||||
Pointer,
|
||||
BlockPointer,
|
||||
Reference,
|
||||
MemberPointer
|
||||
MemberPointer,
|
||||
MacroQualified,
|
||||
};
|
||||
|
||||
QualType Original;
|
||||
@ -6356,6 +6357,9 @@ namespace {
|
||||
} else if (isa<AttributedType>(Ty)) {
|
||||
T = cast<AttributedType>(Ty)->getEquivalentType();
|
||||
Stack.push_back(Attributed);
|
||||
} else if (isa<MacroQualifiedType>(Ty)) {
|
||||
T = cast<MacroQualifiedType>(Ty)->getUnderlyingType();
|
||||
Stack.push_back(MacroQualified);
|
||||
} else {
|
||||
const Type *DTy = Ty->getUnqualifiedDesugaredType();
|
||||
if (Ty == DTy) {
|
||||
@ -6412,6 +6416,9 @@ namespace {
|
||||
return C.getParenType(New);
|
||||
}
|
||||
|
||||
case MacroQualified:
|
||||
return wrap(C, cast<MacroQualifiedType>(Old)->getUnderlyingType(), I);
|
||||
|
||||
case Pointer: {
|
||||
QualType New = wrap(C, cast<PointerType>(Old)->getPointeeType(), I);
|
||||
return C.getPointerType(New);
|
||||
|
@ -189,8 +189,9 @@ COMPILER_RT_VISIBILITY FILE *lprofOpenFileEx(const char *ProfileName) {
|
||||
f = fdopen(fd, "r+b");
|
||||
#elif defined(_WIN32)
|
||||
// FIXME: Use the wide variants to handle Unicode filenames.
|
||||
HANDLE h = CreateFileA(ProfileName, GENERIC_READ | GENERIC_WRITE, 0, 0,
|
||||
OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);
|
||||
HANDLE h = CreateFileA(ProfileName, GENERIC_READ | GENERIC_WRITE,
|
||||
FILE_SHARE_READ | FILE_SHARE_WRITE, 0, OPEN_ALWAYS,
|
||||
FILE_ATTRIBUTE_NORMAL, 0);
|
||||
if (h == INVALID_HANDLE_VALUE)
|
||||
return NULL;
|
||||
|
||||
@ -200,6 +201,10 @@ COMPILER_RT_VISIBILITY FILE *lprofOpenFileEx(const char *ProfileName) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (lprofLockFd(fd) != 0)
|
||||
PROF_WARN("Data may be corrupted during profile merging : %s\n",
|
||||
"Fail to obtain file lock due to system limit.");
|
||||
|
||||
f = _fdopen(fd, "r+b");
|
||||
if (f == 0) {
|
||||
CloseHandle(h);
|
||||
|
@ -1138,7 +1138,7 @@ void LinkerDriver::link(ArrayRef<const char *> argsArr) {
|
||||
}
|
||||
}
|
||||
|
||||
if (!args.hasArg(OPT_INPUT)) {
|
||||
if (!args.hasArg(OPT_INPUT, OPT_wholearchive_file)) {
|
||||
if (args.hasArg(OPT_deffile))
|
||||
config->noEntry = true;
|
||||
else
|
||||
@ -1626,7 +1626,7 @@ void LinkerDriver::link(ArrayRef<const char *> argsArr) {
|
||||
}
|
||||
|
||||
// Handle generation of import library from a def file.
|
||||
if (!args.hasArg(OPT_INPUT)) {
|
||||
if (!args.hasArg(OPT_INPUT, OPT_wholearchive_file)) {
|
||||
fixupExports();
|
||||
createImportLibrary(/*asLib=*/true);
|
||||
return;
|
||||
@ -1672,8 +1672,8 @@ void LinkerDriver::link(ArrayRef<const char *> argsArr) {
|
||||
|
||||
// Set default image name if neither /out or /def set it.
|
||||
if (config->outputFile.empty()) {
|
||||
config->outputFile =
|
||||
getOutputPath((*args.filtered(OPT_INPUT).begin())->getValue());
|
||||
config->outputFile = getOutputPath(
|
||||
(*args.filtered(OPT_INPUT, OPT_wholearchive_file).begin())->getValue());
|
||||
}
|
||||
|
||||
// Fail early if an output file is not writable.
|
||||
|
@ -108,27 +108,27 @@ public:
|
||||
|
||||
// Symbol visibility. This is the computed minimum visibility of all
|
||||
// observed non-DSO symbols.
|
||||
unsigned visibility : 2;
|
||||
uint8_t visibility : 2;
|
||||
|
||||
// True if the symbol was used for linking and thus need to be added to the
|
||||
// output file's symbol table. This is true for all symbols except for
|
||||
// unreferenced DSO symbols, lazy (archive) symbols, and bitcode symbols that
|
||||
// are unreferenced except by other bitcode objects.
|
||||
unsigned isUsedInRegularObj : 1;
|
||||
uint8_t isUsedInRegularObj : 1;
|
||||
|
||||
// If this flag is true and the symbol has protected or default visibility, it
|
||||
// will appear in .dynsym. This flag is set by interposable DSO symbols in
|
||||
// executables, by most symbols in DSOs and executables built with
|
||||
// --export-dynamic, and by dynamic lists.
|
||||
unsigned exportDynamic : 1;
|
||||
uint8_t exportDynamic : 1;
|
||||
|
||||
// False if LTO shouldn't inline whatever this symbol points to. If a symbol
|
||||
// is overwritten after LTO, LTO shouldn't inline the symbol because it
|
||||
// doesn't know the final contents of the symbol.
|
||||
unsigned canInline : 1;
|
||||
uint8_t canInline : 1;
|
||||
|
||||
// True if this symbol is specified by --trace-symbol option.
|
||||
unsigned traced : 1;
|
||||
uint8_t traced : 1;
|
||||
|
||||
inline void replace(const Symbol &New);
|
||||
|
||||
@ -236,28 +236,28 @@ protected:
|
||||
public:
|
||||
// True the symbol should point to its PLT entry.
|
||||
// For SharedSymbol only.
|
||||
unsigned needsPltAddr : 1;
|
||||
uint8_t needsPltAddr : 1;
|
||||
|
||||
// True if this symbol is in the Iplt sub-section of the Plt and the Igot
|
||||
// sub-section of the .got.plt or .got.
|
||||
unsigned isInIplt : 1;
|
||||
uint8_t isInIplt : 1;
|
||||
|
||||
// True if this symbol needs a GOT entry and its GOT entry is actually in
|
||||
// Igot. This will be true only for certain non-preemptible ifuncs.
|
||||
unsigned gotInIgot : 1;
|
||||
uint8_t gotInIgot : 1;
|
||||
|
||||
// True if this symbol is preemptible at load time.
|
||||
unsigned isPreemptible : 1;
|
||||
uint8_t isPreemptible : 1;
|
||||
|
||||
// True if an undefined or shared symbol is used from a live section.
|
||||
unsigned used : 1;
|
||||
uint8_t used : 1;
|
||||
|
||||
// True if a call to this symbol needs to be followed by a restore of the
|
||||
// PPC64 toc pointer.
|
||||
unsigned needsTocRestore : 1;
|
||||
uint8_t needsTocRestore : 1;
|
||||
|
||||
// True if this symbol is defined by a linker script.
|
||||
unsigned scriptDefined : 1;
|
||||
uint8_t scriptDefined : 1;
|
||||
|
||||
// The partition whose dynamic symbol table contains this symbol's definition.
|
||||
uint8_t partition = 1;
|
||||
|
@ -153,7 +153,7 @@ COFF Improvements
|
||||
|
||||
* Having more than two ``/natvis:`` now works correctly; it used to not
|
||||
work for larger binaries before.
|
||||
(`r327895 <https://reviews.llvm.org/rL327895>`_)
|
||||
(`r359515 <https://reviews.llvm.org/rL359515>`_)
|
||||
|
||||
* Undefined symbols are now printed only in demangled form. Pass
|
||||
``/demangle:no`` to see raw symbol names instead.
|
||||
|
@ -0,0 +1,88 @@
|
||||
#include "PythonReadline.h"
|
||||
|
||||
#ifdef LLDB_USE_LIBEDIT_READLINE_COMPAT_MODULE
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
#include <editline/readline.h>
|
||||
|
||||
// Simple implementation of the Python readline module using libedit.
|
||||
// In the event that libedit is excluded from the build, this turns
|
||||
// back into a null implementation that blocks the module from pulling
|
||||
// in the GNU readline shared lib, which causes linkage confusion when
|
||||
// both readline and libedit's readline compatibility symbols collide.
|
||||
//
|
||||
// Currently it only installs a PyOS_ReadlineFunctionPointer, without
|
||||
// implementing any of the readline module methods. This is meant to
|
||||
// work around LLVM pr18841 to avoid seg faults in the stock Python
|
||||
// readline.so linked against GNU readline.
|
||||
//
|
||||
// Bug on the cpython side: https://bugs.python.org/issue38634
|
||||
|
||||
PyDoc_STRVAR(moduleDocumentation,
|
||||
"Simple readline module implementation based on libedit.");
|
||||
|
||||
#if PY_MAJOR_VERSION >= 3
|
||||
static struct PyModuleDef readline_module = {
|
||||
PyModuleDef_HEAD_INIT, // m_base
|
||||
"lldb_editline", // m_name
|
||||
moduleDocumentation, // m_doc
|
||||
-1, // m_size
|
||||
nullptr, // m_methods
|
||||
nullptr, // m_reload
|
||||
nullptr, // m_traverse
|
||||
nullptr, // m_clear
|
||||
nullptr, // m_free
|
||||
};
|
||||
#else
|
||||
static struct PyMethodDef moduleMethods[] = {{nullptr, nullptr, 0, nullptr}};
|
||||
#endif
|
||||
|
||||
static char *
|
||||
#if PY_MAJOR_VERSION >= 3
|
||||
simple_readline(FILE *stdin, FILE *stdout, const char *prompt)
|
||||
#else
|
||||
simple_readline(FILE *stdin, FILE *stdout, char *prompt)
|
||||
#endif
|
||||
{
|
||||
rl_instream = stdin;
|
||||
rl_outstream = stdout;
|
||||
char *line = readline(prompt);
|
||||
if (!line) {
|
||||
#if PY_MAJOR_VERSION >= 3
|
||||
char *ret = (char *)PyMem_RawMalloc(1);
|
||||
#else
|
||||
char *ret = (char *)PyMem_Malloc(1);
|
||||
#endif
|
||||
if (ret != NULL)
|
||||
*ret = '\0';
|
||||
return ret;
|
||||
}
|
||||
if (*line)
|
||||
add_history(line);
|
||||
int n = strlen(line);
|
||||
#if PY_MAJOR_VERSION >= 3
|
||||
char *ret = (char *)PyMem_RawMalloc(n + 2);
|
||||
#else
|
||||
char *ret = (char *)PyMem_Malloc(n + 2);
|
||||
#endif
|
||||
if (ret) {
|
||||
strncpy(ret, line, n);
|
||||
free(line);
|
||||
ret[n] = '\n';
|
||||
ret[n + 1] = '\0';
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
PyMODINIT_FUNC initlldb_readline(void) {
|
||||
PyOS_ReadlineFunctionPointer = simple_readline;
|
||||
|
||||
#if PY_MAJOR_VERSION >= 3
|
||||
return PyModule_Create(&readline_module);
|
||||
#else
|
||||
Py_InitModule4("readline", moduleMethods, moduleDocumentation,
|
||||
static_cast<PyObject *>(NULL), PYTHON_API_VERSION);
|
||||
#endif
|
||||
}
|
||||
#endif
|
@ -0,0 +1,26 @@
|
||||
//===-- PythonReadline.h ----------------------------------------*- C++ -*-===//
|
||||
//
|
||||
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
||||
// See https://llvm.org/LICENSE.txt for license information.
|
||||
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#ifndef LLDB_PLUGINS_SCRIPTINTERPRETER_PYTHON_PYTHONREADLINE_H
|
||||
#define LLDB_PLUGINS_SCRIPTINTERPRETER_PYTHON_PYTHONREADLINE_H
|
||||
|
||||
#if !defined(LLDB_DISABLE_LIBEDIT) && defined(__linux__)
|
||||
// NOTE: Since Python may define some pre-processor definitions which affect the
|
||||
// standard headers on some systems, you must include Python.h before any
|
||||
// standard headers are included.
|
||||
#include "Python.h"
|
||||
|
||||
// no need to hack into Python's readline module if libedit isn't used.
|
||||
//
|
||||
#define LLDB_USE_LIBEDIT_READLINE_COMPAT_MODULE 1
|
||||
|
||||
extern "C" PyMODINIT_FUNC initlldb_readline(void);
|
||||
|
||||
#endif
|
||||
|
||||
#endif // LLDB_PLUGINS_SCRIPTINTERPRETER_PYTHON_PYTHONREADLINE_H
|
@ -17,6 +17,7 @@
|
||||
|
||||
#include "PythonDataObjects.h"
|
||||
#include "PythonExceptionState.h"
|
||||
#include "PythonReadline.h"
|
||||
#include "ScriptInterpreterPythonImpl.h"
|
||||
|
||||
#include "lldb/API/SBFrame.h"
|
||||
@ -207,6 +208,22 @@ public:
|
||||
|
||||
InitializePythonHome();
|
||||
|
||||
#ifdef LLDB_USE_LIBEDIT_READLINE_COMPAT_MODULE
|
||||
// Python's readline is incompatible with libedit being linked into lldb.
|
||||
// Provide a patched version local to the embedded interpreter.
|
||||
bool ReadlinePatched = false;
|
||||
for (auto *p = PyImport_Inittab; p->name != NULL; p++) {
|
||||
if (strcmp(p->name, "readline") == 0) {
|
||||
p->initfunc = initlldb_readline;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!ReadlinePatched) {
|
||||
PyImport_AppendInittab("readline", initlldb_readline);
|
||||
ReadlinePatched = true;
|
||||
}
|
||||
#endif
|
||||
|
||||
// Register _lldb as a built-in module.
|
||||
PyImport_AppendInittab("_lldb", LLDBSwigPyInit);
|
||||
|
||||
|
@ -896,14 +896,8 @@ void Symtab::InitAddressIndexes() {
|
||||
for (size_t i = 0; i < num_entries; i++) {
|
||||
FileRangeToIndexMap::Entry *entry =
|
||||
m_file_addr_to_index.GetMutableEntryAtIndex(i);
|
||||
if (entry->GetByteSize() > 0)
|
||||
continue;
|
||||
addr_t curr_base_addr = entry->GetRangeBase();
|
||||
// Symbols with non-zero size will show after zero-sized symbols on the
|
||||
// same address. So do not set size of a non-last zero-sized symbol.
|
||||
if (i == num_entries - 1 ||
|
||||
m_file_addr_to_index.GetMutableEntryAtIndex(i + 1)
|
||||
->GetRangeBase() != curr_base_addr) {
|
||||
if (entry->GetByteSize() == 0) {
|
||||
addr_t curr_base_addr = entry->GetRangeBase();
|
||||
const RangeVector<addr_t, addr_t>::Entry *containing_section =
|
||||
section_ranges.FindEntryThatContains(curr_base_addr);
|
||||
|
||||
|
@ -792,6 +792,10 @@ public:
|
||||
MCSymbol *PreInstrSymbol = nullptr,
|
||||
MCSymbol *PostInstrSymbol = nullptr);
|
||||
|
||||
MachineInstr::ExtraInfo *createMIExtraInfoWithMarker(
|
||||
ArrayRef<MachineMemOperand *> MMOs, MCSymbol *PreInstrSymbol,
|
||||
MCSymbol *PostInstrSymbol, MDNode *HeapAllocMarker);
|
||||
|
||||
/// Allocate a string and populate it with the given external symbol name.
|
||||
const char *createExternalSymbolName(StringRef Name);
|
||||
|
||||
|
@ -137,19 +137,23 @@ private:
|
||||
/// This has to be defined eagerly due to the implementation constraints of
|
||||
/// `PointerSumType` where it is used.
|
||||
class ExtraInfo final
|
||||
: TrailingObjects<ExtraInfo, MachineMemOperand *, MCSymbol *> {
|
||||
: TrailingObjects<ExtraInfo, MachineMemOperand *, MCSymbol *, MDNode *> {
|
||||
public:
|
||||
static ExtraInfo *create(BumpPtrAllocator &Allocator,
|
||||
ArrayRef<MachineMemOperand *> MMOs,
|
||||
MCSymbol *PreInstrSymbol = nullptr,
|
||||
MCSymbol *PostInstrSymbol = nullptr) {
|
||||
MCSymbol *PostInstrSymbol = nullptr,
|
||||
MDNode *HeapAllocMarker = nullptr) {
|
||||
bool HasPreInstrSymbol = PreInstrSymbol != nullptr;
|
||||
bool HasPostInstrSymbol = PostInstrSymbol != nullptr;
|
||||
bool HasHeapAllocMarker = HeapAllocMarker != nullptr;
|
||||
auto *Result = new (Allocator.Allocate(
|
||||
totalSizeToAlloc<MachineMemOperand *, MCSymbol *>(
|
||||
MMOs.size(), HasPreInstrSymbol + HasPostInstrSymbol),
|
||||
totalSizeToAlloc<MachineMemOperand *, MCSymbol *, MDNode *>(
|
||||
MMOs.size(), HasPreInstrSymbol + HasPostInstrSymbol,
|
||||
HasHeapAllocMarker),
|
||||
alignof(ExtraInfo)))
|
||||
ExtraInfo(MMOs.size(), HasPreInstrSymbol, HasPostInstrSymbol);
|
||||
ExtraInfo(MMOs.size(), HasPreInstrSymbol, HasPostInstrSymbol,
|
||||
HasHeapAllocMarker);
|
||||
|
||||
// Copy the actual data into the trailing objects.
|
||||
std::copy(MMOs.begin(), MMOs.end(),
|
||||
@ -160,6 +164,8 @@ private:
|
||||
if (HasPostInstrSymbol)
|
||||
Result->getTrailingObjects<MCSymbol *>()[HasPreInstrSymbol] =
|
||||
PostInstrSymbol;
|
||||
if (HasHeapAllocMarker)
|
||||
Result->getTrailingObjects<MDNode *>()[0] = HeapAllocMarker;
|
||||
|
||||
return Result;
|
||||
}
|
||||
@ -178,6 +184,10 @@ private:
|
||||
: nullptr;
|
||||
}
|
||||
|
||||
MDNode *getHeapAllocMarker() const {
|
||||
return HasHeapAllocMarker ? getTrailingObjects<MDNode *>()[0] : nullptr;
|
||||
}
|
||||
|
||||
private:
|
||||
friend TrailingObjects;
|
||||
|
||||
@ -189,6 +199,7 @@ private:
|
||||
const int NumMMOs;
|
||||
const bool HasPreInstrSymbol;
|
||||
const bool HasPostInstrSymbol;
|
||||
const bool HasHeapAllocMarker;
|
||||
|
||||
// Implement the `TrailingObjects` internal API.
|
||||
size_t numTrailingObjects(OverloadToken<MachineMemOperand *>) const {
|
||||
@ -197,12 +208,17 @@ private:
|
||||
size_t numTrailingObjects(OverloadToken<MCSymbol *>) const {
|
||||
return HasPreInstrSymbol + HasPostInstrSymbol;
|
||||
}
|
||||
size_t numTrailingObjects(OverloadToken<MDNode *>) const {
|
||||
return HasHeapAllocMarker;
|
||||
}
|
||||
|
||||
// Just a boring constructor to allow us to initialize the sizes. Always use
|
||||
// the `create` routine above.
|
||||
ExtraInfo(int NumMMOs, bool HasPreInstrSymbol, bool HasPostInstrSymbol)
|
||||
ExtraInfo(int NumMMOs, bool HasPreInstrSymbol, bool HasPostInstrSymbol,
|
||||
bool HasHeapAllocMarker)
|
||||
: NumMMOs(NumMMOs), HasPreInstrSymbol(HasPreInstrSymbol),
|
||||
HasPostInstrSymbol(HasPostInstrSymbol) {}
|
||||
HasPostInstrSymbol(HasPostInstrSymbol),
|
||||
HasHeapAllocMarker(HasHeapAllocMarker) {}
|
||||
};
|
||||
|
||||
/// Enumeration of the kinds of inline extra info available. It is important
|
||||
@ -577,6 +593,16 @@ public:
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
/// Helper to extract a heap alloc marker if one has been added.
|
||||
MDNode *getHeapAllocMarker() const {
|
||||
if (!Info)
|
||||
return nullptr;
|
||||
if (ExtraInfo *EI = Info.get<EIIK_OutOfLine>())
|
||||
return EI->getHeapAllocMarker();
|
||||
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
/// API for querying MachineInstr properties. They are the same as MCInstrDesc
|
||||
/// queries but they are bundle aware.
|
||||
|
||||
@ -1578,6 +1604,12 @@ public:
|
||||
/// replace ours with it.
|
||||
void cloneInstrSymbols(MachineFunction &MF, const MachineInstr &MI);
|
||||
|
||||
/// Set a marker on instructions that denotes where we should create and emit
|
||||
/// heap alloc site labels. This waits until after instruction selection and
|
||||
/// optimizations to create the label, so it should still work if the
|
||||
/// instruction is removed or duplicated.
|
||||
void setHeapAllocMarker(MachineFunction &MF, MDNode *MD);
|
||||
|
||||
/// Return the MIFlags which represent both MachineInstrs. This
|
||||
/// should be used when merging two MachineInstrs into one. This routine does
|
||||
/// not modify the MIFlags of this MachineInstr.
|
||||
@ -1632,6 +1664,12 @@ private:
|
||||
const TargetRegisterClass *getRegClassConstraintEffectForVRegImpl(
|
||||
unsigned OpIdx, unsigned Reg, const TargetRegisterClass *CurRC,
|
||||
const TargetInstrInfo *TII, const TargetRegisterInfo *TRI) const;
|
||||
|
||||
/// Stores extra instruction information inline or allocates as ExtraInfo
|
||||
/// based on the number of pointers.
|
||||
void setExtraInfo(MachineFunction &MF, ArrayRef<MachineMemOperand *> MMOs,
|
||||
MCSymbol *PreInstrSymbol, MCSymbol *PostInstrSymbol,
|
||||
MDNode *HeapAllocMarker);
|
||||
};
|
||||
|
||||
/// Special DenseMapInfo traits to compare MachineInstr* by *value* of the
|
||||
|
@ -89,7 +89,8 @@ private:
|
||||
bool InStruct = false) const;
|
||||
|
||||
/// Check whether a stack allocation has its address taken.
|
||||
bool HasAddressTaken(const Instruction *AI);
|
||||
bool HasAddressTaken(const Instruction *AI,
|
||||
SmallPtrSetImpl<const PHINode *> &VisitedPHIs);
|
||||
|
||||
/// RequiresStackProtector - Check whether or not this function needs a
|
||||
/// stack protector based upon the stack protector level.
|
||||
|
@ -16,6 +16,8 @@
|
||||
#include "llvm/Demangle/DemangleConfig.h"
|
||||
#include "llvm/Demangle/StringView.h"
|
||||
#include <array>
|
||||
#include <cstdint>
|
||||
#include <string>
|
||||
|
||||
namespace llvm {
|
||||
namespace itanium_demangle {
|
||||
|
@ -120,6 +120,8 @@ public:
|
||||
uint32_t lookupOrAddCall(CallInst *C);
|
||||
uint32_t phiTranslateImpl(const BasicBlock *BB, const BasicBlock *PhiBlock,
|
||||
uint32_t Num, GVN &Gvn);
|
||||
bool areCallValsEqual(uint32_t Num, uint32_t NewNum, const BasicBlock *Pred,
|
||||
const BasicBlock *PhiBlock, GVN &Gvn);
|
||||
std::pair<uint32_t, bool> assignExpNewValueNum(Expression &exp);
|
||||
bool areAllValsInBB(uint32_t num, const BasicBlock *BB, GVN &Gvn);
|
||||
|
||||
|
@ -1127,15 +1127,9 @@ void CodeViewDebug::emitDebugInfoForFunction(const Function *GV,
|
||||
}
|
||||
|
||||
for (auto HeapAllocSite : FI.HeapAllocSites) {
|
||||
MCSymbol *BeginLabel = std::get<0>(HeapAllocSite);
|
||||
MCSymbol *EndLabel = std::get<1>(HeapAllocSite);
|
||||
|
||||
// The labels might not be defined if the instruction was replaced
|
||||
// somewhere in the codegen pipeline.
|
||||
if (!BeginLabel->isDefined() || !EndLabel->isDefined())
|
||||
continue;
|
||||
|
||||
DIType *DITy = std::get<2>(HeapAllocSite);
|
||||
const MCSymbol *BeginLabel = std::get<0>(HeapAllocSite);
|
||||
const MCSymbol *EndLabel = std::get<1>(HeapAllocSite);
|
||||
const DIType *DITy = std::get<2>(HeapAllocSite);
|
||||
MCSymbol *HeapAllocEnd = beginSymbolRecord(SymbolKind::S_HEAPALLOCSITE);
|
||||
OS.AddComment("Call site offset");
|
||||
OS.EmitCOFFSecRel32(BeginLabel, /*Offset=*/0);
|
||||
@ -1454,6 +1448,16 @@ void CodeViewDebug::beginFunctionImpl(const MachineFunction *MF) {
|
||||
DebugLoc FnStartDL = PrologEndLoc.getFnDebugLoc();
|
||||
maybeRecordLocation(FnStartDL, MF);
|
||||
}
|
||||
|
||||
// Find heap alloc sites and emit labels around them.
|
||||
for (const auto &MBB : *MF) {
|
||||
for (const auto &MI : MBB) {
|
||||
if (MI.getHeapAllocMarker()) {
|
||||
requestLabelBeforeInsn(&MI);
|
||||
requestLabelAfterInsn(&MI);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static bool shouldEmitUdt(const DIType *T) {
|
||||
@ -2888,8 +2892,18 @@ void CodeViewDebug::endFunctionImpl(const MachineFunction *MF) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Find heap alloc sites and add to list.
|
||||
for (const auto &MBB : *MF) {
|
||||
for (const auto &MI : MBB) {
|
||||
if (MDNode *MD = MI.getHeapAllocMarker()) {
|
||||
CurFn->HeapAllocSites.push_back(std::make_tuple(getLabelBeforeInsn(&MI),
|
||||
getLabelAfterInsn(&MI),
|
||||
dyn_cast<DIType>(MD)));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
CurFn->Annotations = MF->getCodeViewAnnotations();
|
||||
CurFn->HeapAllocSites = MF->getCodeViewHeapAllocSites();
|
||||
|
||||
CurFn->End = Asm->getFunctionEnd();
|
||||
|
||||
|
@ -148,7 +148,8 @@ class LLVM_LIBRARY_VISIBILITY CodeViewDebug : public DebugHandlerBase {
|
||||
SmallVector<LexicalBlock *, 1> ChildBlocks;
|
||||
|
||||
std::vector<std::pair<MCSymbol *, MDNode *>> Annotations;
|
||||
std::vector<std::tuple<MCSymbol *, MCSymbol *, DIType *>> HeapAllocSites;
|
||||
std::vector<std::tuple<const MCSymbol *, const MCSymbol *, const DIType *>>
|
||||
HeapAllocSites;
|
||||
|
||||
const MCSymbol *Begin = nullptr;
|
||||
const MCSymbol *End = nullptr;
|
||||
|
@ -588,8 +588,8 @@ void IRTranslator::emitSwitchCase(SwitchCG::CaseBlock &CB,
|
||||
Register CondRHS = getOrCreateVReg(*CB.CmpRHS);
|
||||
Cond = MIB.buildICmp(CB.PredInfo.Pred, i1Ty, CondLHS, CondRHS).getReg(0);
|
||||
} else {
|
||||
assert(CB.PredInfo.Pred == CmpInst::ICMP_ULE &&
|
||||
"Can only handle ULE ranges");
|
||||
assert(CB.PredInfo.Pred == CmpInst::ICMP_SLE &&
|
||||
"Can only handle SLE ranges");
|
||||
|
||||
const APInt& Low = cast<ConstantInt>(CB.CmpLHS)->getValue();
|
||||
const APInt& High = cast<ConstantInt>(CB.CmpRHS)->getValue();
|
||||
@ -598,7 +598,7 @@ void IRTranslator::emitSwitchCase(SwitchCG::CaseBlock &CB,
|
||||
if (cast<ConstantInt>(CB.CmpLHS)->isMinValue(true)) {
|
||||
Register CondRHS = getOrCreateVReg(*CB.CmpRHS);
|
||||
Cond =
|
||||
MIB.buildICmp(CmpInst::ICMP_ULE, i1Ty, CmpOpReg, CondRHS).getReg(0);
|
||||
MIB.buildICmp(CmpInst::ICMP_SLE, i1Ty, CmpOpReg, CondRHS).getReg(0);
|
||||
} else {
|
||||
const LLT &CmpTy = MRI->getType(CmpOpReg);
|
||||
auto Sub = MIB.buildSub({CmpTy}, CmpOpReg, CondLHS);
|
||||
@ -728,7 +728,7 @@ bool IRTranslator::lowerSwitchRangeWorkItem(SwitchCG::CaseClusterIt I,
|
||||
MHS = nullptr;
|
||||
} else {
|
||||
// Check I->Low <= Cond <= I->High.
|
||||
Pred = CmpInst::ICMP_ULE;
|
||||
Pred = CmpInst::ICMP_SLE;
|
||||
LHS = I->Low;
|
||||
MHS = Cond;
|
||||
RHS = I->High;
|
||||
|
@ -451,7 +451,14 @@ MachineFunction::createMIExtraInfo(ArrayRef<MachineMemOperand *> MMOs,
|
||||
MCSymbol *PreInstrSymbol,
|
||||
MCSymbol *PostInstrSymbol) {
|
||||
return MachineInstr::ExtraInfo::create(Allocator, MMOs, PreInstrSymbol,
|
||||
PostInstrSymbol);
|
||||
PostInstrSymbol, nullptr);
|
||||
}
|
||||
|
||||
MachineInstr::ExtraInfo *MachineFunction::createMIExtraInfoWithMarker(
|
||||
ArrayRef<MachineMemOperand *> MMOs, MCSymbol *PreInstrSymbol,
|
||||
MCSymbol *PostInstrSymbol, MDNode *HeapAllocMarker) {
|
||||
return MachineInstr::ExtraInfo::create(Allocator, MMOs, PreInstrSymbol,
|
||||
PostInstrSymbol, HeapAllocMarker);
|
||||
}
|
||||
|
||||
const char *MachineFunction::createExternalSymbolName(StringRef Name) {
|
||||
|
@ -316,27 +316,48 @@ void MachineInstr::RemoveOperand(unsigned OpNo) {
|
||||
--NumOperands;
|
||||
}
|
||||
|
||||
void MachineInstr::setExtraInfo(MachineFunction &MF,
|
||||
ArrayRef<MachineMemOperand *> MMOs,
|
||||
MCSymbol *PreInstrSymbol,
|
||||
MCSymbol *PostInstrSymbol,
|
||||
MDNode *HeapAllocMarker) {
|
||||
bool HasPreInstrSymbol = PreInstrSymbol != nullptr;
|
||||
bool HasPostInstrSymbol = PostInstrSymbol != nullptr;
|
||||
bool HasHeapAllocMarker = HeapAllocMarker != nullptr;
|
||||
int NumPointers =
|
||||
MMOs.size() + HasPreInstrSymbol + HasPostInstrSymbol + HasHeapAllocMarker;
|
||||
|
||||
// Drop all extra info if there is none.
|
||||
if (NumPointers <= 0) {
|
||||
Info.clear();
|
||||
return;
|
||||
}
|
||||
|
||||
// If more than one pointer, then store out of line. Store heap alloc markers
|
||||
// out of line because PointerSumType cannot hold more than 4 tag types with
|
||||
// 32-bit pointers.
|
||||
// FIXME: Maybe we should make the symbols in the extra info mutable?
|
||||
else if (NumPointers > 1 || HasHeapAllocMarker) {
|
||||
Info.set<EIIK_OutOfLine>(MF.createMIExtraInfoWithMarker(
|
||||
MMOs, PreInstrSymbol, PostInstrSymbol, HeapAllocMarker));
|
||||
return;
|
||||
}
|
||||
|
||||
// Otherwise store the single pointer inline.
|
||||
if (HasPreInstrSymbol)
|
||||
Info.set<EIIK_PreInstrSymbol>(PreInstrSymbol);
|
||||
else if (HasPostInstrSymbol)
|
||||
Info.set<EIIK_PostInstrSymbol>(PostInstrSymbol);
|
||||
else
|
||||
Info.set<EIIK_MMO>(MMOs[0]);
|
||||
}
|
||||
|
||||
void MachineInstr::dropMemRefs(MachineFunction &MF) {
|
||||
if (memoperands_empty())
|
||||
return;
|
||||
|
||||
// See if we can just drop all of our extra info.
|
||||
if (!getPreInstrSymbol() && !getPostInstrSymbol()) {
|
||||
Info.clear();
|
||||
return;
|
||||
}
|
||||
if (!getPostInstrSymbol()) {
|
||||
Info.set<EIIK_PreInstrSymbol>(getPreInstrSymbol());
|
||||
return;
|
||||
}
|
||||
if (!getPreInstrSymbol()) {
|
||||
Info.set<EIIK_PostInstrSymbol>(getPostInstrSymbol());
|
||||
return;
|
||||
}
|
||||
|
||||
// Otherwise allocate a fresh extra info with just these symbols.
|
||||
Info.set<EIIK_OutOfLine>(
|
||||
MF.createMIExtraInfo({}, getPreInstrSymbol(), getPostInstrSymbol()));
|
||||
setExtraInfo(MF, {}, getPreInstrSymbol(), getPostInstrSymbol(),
|
||||
getHeapAllocMarker());
|
||||
}
|
||||
|
||||
void MachineInstr::setMemRefs(MachineFunction &MF,
|
||||
@ -346,15 +367,8 @@ void MachineInstr::setMemRefs(MachineFunction &MF,
|
||||
return;
|
||||
}
|
||||
|
||||
// Try to store a single MMO inline.
|
||||
if (MMOs.size() == 1 && !getPreInstrSymbol() && !getPostInstrSymbol()) {
|
||||
Info.set<EIIK_MMO>(MMOs[0]);
|
||||
return;
|
||||
}
|
||||
|
||||
// Otherwise create an extra info struct with all of our info.
|
||||
Info.set<EIIK_OutOfLine>(
|
||||
MF.createMIExtraInfo(MMOs, getPreInstrSymbol(), getPostInstrSymbol()));
|
||||
setExtraInfo(MF, MMOs, getPreInstrSymbol(), getPostInstrSymbol(),
|
||||
getHeapAllocMarker());
|
||||
}
|
||||
|
||||
void MachineInstr::addMemOperand(MachineFunction &MF,
|
||||
@ -376,7 +390,8 @@ void MachineInstr::cloneMemRefs(MachineFunction &MF, const MachineInstr &MI) {
|
||||
// instruction. We can do this whenever the pre- and post-instruction symbols
|
||||
// are the same (including null).
|
||||
if (getPreInstrSymbol() == MI.getPreInstrSymbol() &&
|
||||
getPostInstrSymbol() == MI.getPostInstrSymbol()) {
|
||||
getPostInstrSymbol() == MI.getPostInstrSymbol() &&
|
||||
getHeapAllocMarker() == MI.getHeapAllocMarker()) {
|
||||
Info = MI.Info;
|
||||
return;
|
||||
}
|
||||
@ -450,67 +465,42 @@ void MachineInstr::cloneMergedMemRefs(MachineFunction &MF,
|
||||
}
|
||||
|
||||
void MachineInstr::setPreInstrSymbol(MachineFunction &MF, MCSymbol *Symbol) {
|
||||
MCSymbol *OldSymbol = getPreInstrSymbol();
|
||||
if (OldSymbol == Symbol)
|
||||
// Do nothing if old and new symbols are the same.
|
||||
if (Symbol == getPreInstrSymbol())
|
||||
return;
|
||||
if (OldSymbol && !Symbol) {
|
||||
// We're removing a symbol rather than adding one. Try to clean up any
|
||||
// extra info carried around.
|
||||
if (Info.is<EIIK_PreInstrSymbol>()) {
|
||||
Info.clear();
|
||||
return;
|
||||
}
|
||||
|
||||
if (memoperands_empty()) {
|
||||
assert(getPostInstrSymbol() &&
|
||||
"Should never have only a single symbol allocated out-of-line!");
|
||||
Info.set<EIIK_PostInstrSymbol>(getPostInstrSymbol());
|
||||
return;
|
||||
}
|
||||
|
||||
// Otherwise fallback on the generic update.
|
||||
} else if (!Info || Info.is<EIIK_PreInstrSymbol>()) {
|
||||
// If we don't have any other extra info, we can store this inline.
|
||||
Info.set<EIIK_PreInstrSymbol>(Symbol);
|
||||
// If there was only one symbol and we're removing it, just clear info.
|
||||
if (!Symbol && Info.is<EIIK_PreInstrSymbol>()) {
|
||||
Info.clear();
|
||||
return;
|
||||
}
|
||||
|
||||
// Otherwise, allocate a full new set of extra info.
|
||||
// FIXME: Maybe we should make the symbols in the extra info mutable?
|
||||
Info.set<EIIK_OutOfLine>(
|
||||
MF.createMIExtraInfo(memoperands(), Symbol, getPostInstrSymbol()));
|
||||
setExtraInfo(MF, memoperands(), Symbol, getPostInstrSymbol(),
|
||||
getHeapAllocMarker());
|
||||
}
|
||||
|
||||
void MachineInstr::setPostInstrSymbol(MachineFunction &MF, MCSymbol *Symbol) {
|
||||
MCSymbol *OldSymbol = getPostInstrSymbol();
|
||||
if (OldSymbol == Symbol)
|
||||
// Do nothing if old and new symbols are the same.
|
||||
if (Symbol == getPostInstrSymbol())
|
||||
return;
|
||||
if (OldSymbol && !Symbol) {
|
||||
// We're removing a symbol rather than adding one. Try to clean up any
|
||||
// extra info carried around.
|
||||
if (Info.is<EIIK_PostInstrSymbol>()) {
|
||||
Info.clear();
|
||||
return;
|
||||
}
|
||||
|
||||
if (memoperands_empty()) {
|
||||
assert(getPreInstrSymbol() &&
|
||||
"Should never have only a single symbol allocated out-of-line!");
|
||||
Info.set<EIIK_PreInstrSymbol>(getPreInstrSymbol());
|
||||
return;
|
||||
}
|
||||
|
||||
// Otherwise fallback on the generic update.
|
||||
} else if (!Info || Info.is<EIIK_PostInstrSymbol>()) {
|
||||
// If we don't have any other extra info, we can store this inline.
|
||||
Info.set<EIIK_PostInstrSymbol>(Symbol);
|
||||
// If there was only one symbol and we're removing it, just clear info.
|
||||
if (!Symbol && Info.is<EIIK_PostInstrSymbol>()) {
|
||||
Info.clear();
|
||||
return;
|
||||
}
|
||||
|
||||
// Otherwise, allocate a full new set of extra info.
|
||||
// FIXME: Maybe we should make the symbols in the extra info mutable?
|
||||
Info.set<EIIK_OutOfLine>(
|
||||
MF.createMIExtraInfo(memoperands(), getPreInstrSymbol(), Symbol));
|
||||
setExtraInfo(MF, memoperands(), getPreInstrSymbol(), Symbol,
|
||||
getHeapAllocMarker());
|
||||
}
|
||||
|
||||
void MachineInstr::setHeapAllocMarker(MachineFunction &MF, MDNode *Marker) {
|
||||
// Do nothing if old and new symbols are the same.
|
||||
if (Marker == getHeapAllocMarker())
|
||||
return;
|
||||
|
||||
setExtraInfo(MF, memoperands(), getPreInstrSymbol(), getPostInstrSymbol(),
|
||||
Marker);
|
||||
}
|
||||
|
||||
void MachineInstr::cloneInstrSymbols(MachineFunction &MF,
|
||||
@ -524,6 +514,7 @@ void MachineInstr::cloneInstrSymbols(MachineFunction &MF,
|
||||
|
||||
setPreInstrSymbol(MF, MI.getPreInstrSymbol());
|
||||
setPostInstrSymbol(MF, MI.getPostInstrSymbol());
|
||||
setHeapAllocMarker(MF, MI.getHeapAllocMarker());
|
||||
}
|
||||
|
||||
uint16_t MachineInstr::mergeFlagsWith(const MachineInstr &Other) const {
|
||||
@ -1707,6 +1698,13 @@ void MachineInstr::print(raw_ostream &OS, ModuleSlotTracker &MST,
|
||||
OS << " post-instr-symbol ";
|
||||
MachineOperand::printSymbol(OS, *PostInstrSymbol);
|
||||
}
|
||||
if (MDNode *HeapAllocMarker = getHeapAllocMarker()) {
|
||||
if (!FirstOp) {
|
||||
FirstOp = false;
|
||||
OS << ',';
|
||||
}
|
||||
OS << " heap-alloc-marker";
|
||||
}
|
||||
|
||||
if (!SkipDebugLoc) {
|
||||
if (const DebugLoc &DL = getDebugLoc()) {
|
||||
|
@ -18878,7 +18878,7 @@ SDValue DAGCombiner::visitVECTOR_SHUFFLE(SDNode *N) {
|
||||
// build_vector.
|
||||
if (SVN->isSplat() && SVN->getSplatIndex() < (int)NumElts) {
|
||||
int SplatIndex = SVN->getSplatIndex();
|
||||
if (TLI.isExtractVecEltCheap(VT, SplatIndex) &&
|
||||
if (N0.hasOneUse() && TLI.isExtractVecEltCheap(VT, SplatIndex) &&
|
||||
TLI.isBinOp(N0.getOpcode()) && N0.getNode()->getNumValues() == 1) {
|
||||
// splat (vector_bo L, R), Index -->
|
||||
// splat (scalar_bo (extelt L, Index), (extelt R, Index))
|
||||
|
@ -1237,10 +1237,9 @@ bool FastISel::lowerCallTo(CallLoweringInfo &CLI) {
|
||||
updateValueMap(CLI.CS->getInstruction(), CLI.ResultReg, CLI.NumResultRegs);
|
||||
|
||||
// Set labels for heapallocsite call.
|
||||
if (CLI.CS && CLI.CS->getInstruction()->getMetadata("heapallocsite")) {
|
||||
MDNode *MD = CLI.CS->getInstruction()->getMetadata("heapallocsite");
|
||||
MF->addCodeViewHeapAllocSite(CLI.Call, MD);
|
||||
}
|
||||
if (CLI.CS)
|
||||
if (MDNode *MD = CLI.CS->getInstruction()->getMetadata("heapallocsite"))
|
||||
CLI.Call->setHeapAllocMarker(*MF, MD);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
@ -910,10 +910,9 @@ EmitSchedule(MachineBasicBlock::iterator &InsertPos) {
|
||||
if (HasDbg)
|
||||
ProcessSourceNode(N, DAG, Emitter, VRBaseMap, Orders, Seen, NewInsn);
|
||||
|
||||
if (MDNode *MD = DAG->getHeapAllocSite(N)) {
|
||||
if (MDNode *MD = DAG->getHeapAllocSite(N))
|
||||
if (NewInsn && NewInsn->isCall())
|
||||
MF.addCodeViewHeapAllocSite(NewInsn, MD);
|
||||
}
|
||||
NewInsn->setHeapAllocMarker(MF, MD);
|
||||
|
||||
GluedNodes.pop_back();
|
||||
}
|
||||
@ -923,9 +922,10 @@ EmitSchedule(MachineBasicBlock::iterator &InsertPos) {
|
||||
if (HasDbg)
|
||||
ProcessSourceNode(SU->getNode(), DAG, Emitter, VRBaseMap, Orders, Seen,
|
||||
NewInsn);
|
||||
|
||||
if (MDNode *MD = DAG->getHeapAllocSite(SU->getNode())) {
|
||||
if (NewInsn && NewInsn->isCall())
|
||||
MF.addCodeViewHeapAllocSite(NewInsn, MD);
|
||||
NewInsn->setHeapAllocMarker(MF, MD);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -17,7 +17,6 @@
|
||||
#include "llvm/ADT/SmallPtrSet.h"
|
||||
#include "llvm/ADT/Statistic.h"
|
||||
#include "llvm/Analysis/BranchProbabilityInfo.h"
|
||||
#include "llvm/Analysis/CaptureTracking.h"
|
||||
#include "llvm/Analysis/EHPersonalities.h"
|
||||
#include "llvm/Analysis/OptimizationRemarkEmitter.h"
|
||||
#include "llvm/CodeGen/Passes.h"
|
||||
@ -157,6 +156,69 @@ bool StackProtector::ContainsProtectableArray(Type *Ty, bool &IsLarge,
|
||||
return NeedsProtector;
|
||||
}
|
||||
|
||||
bool StackProtector::HasAddressTaken(const Instruction *AI,
|
||||
SmallPtrSetImpl<const PHINode *> &VisitedPHIs) {
|
||||
for (const User *U : AI->users()) {
|
||||
const auto *I = cast<Instruction>(U);
|
||||
switch (I->getOpcode()) {
|
||||
case Instruction::Store:
|
||||
if (AI == cast<StoreInst>(I)->getValueOperand())
|
||||
return true;
|
||||
break;
|
||||
case Instruction::AtomicCmpXchg:
|
||||
// cmpxchg conceptually includes both a load and store from the same
|
||||
// location. So, like store, the value being stored is what matters.
|
||||
if (AI == cast<AtomicCmpXchgInst>(I)->getNewValOperand())
|
||||
return true;
|
||||
break;
|
||||
case Instruction::PtrToInt:
|
||||
if (AI == cast<PtrToIntInst>(I)->getOperand(0))
|
||||
return true;
|
||||
break;
|
||||
case Instruction::Call: {
|
||||
// Ignore intrinsics that do not become real instructions.
|
||||
// TODO: Narrow this to intrinsics that have store-like effects.
|
||||
const auto *CI = cast<CallInst>(I);
|
||||
if (!isa<DbgInfoIntrinsic>(CI) && !CI->isLifetimeStartOrEnd())
|
||||
return true;
|
||||
break;
|
||||
}
|
||||
case Instruction::Invoke:
|
||||
return true;
|
||||
case Instruction::BitCast:
|
||||
case Instruction::GetElementPtr:
|
||||
case Instruction::Select:
|
||||
case Instruction::AddrSpaceCast:
|
||||
if (HasAddressTaken(I, VisitedPHIs))
|
||||
return true;
|
||||
break;
|
||||
case Instruction::PHI: {
|
||||
// Keep track of what PHI nodes we have already visited to ensure
|
||||
// they are only visited once.
|
||||
const auto *PN = cast<PHINode>(I);
|
||||
if (VisitedPHIs.insert(PN).second)
|
||||
if (HasAddressTaken(PN, VisitedPHIs))
|
||||
return true;
|
||||
break;
|
||||
}
|
||||
case Instruction::Load:
|
||||
case Instruction::AtomicRMW:
|
||||
case Instruction::Ret:
|
||||
// These instructions take an address operand, but have load-like or
|
||||
// other innocuous behavior that should not trigger a stack protector.
|
||||
// atomicrmw conceptually has both load and store semantics, but the
|
||||
// value being stored must be integer; so if a pointer is being stored,
|
||||
// we'll catch it in the PtrToInt case above.
|
||||
break;
|
||||
default:
|
||||
// Conservatively return true for any instruction that takes an address
|
||||
// operand, but is not handled above.
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/// Search for the first call to the llvm.stackprotector intrinsic and return it
|
||||
/// if present.
|
||||
static const CallInst *findStackProtectorIntrinsic(Function &F) {
|
||||
@ -211,6 +273,12 @@ bool StackProtector::RequiresStackProtector() {
|
||||
else if (!F->hasFnAttribute(Attribute::StackProtect))
|
||||
return false;
|
||||
|
||||
/// VisitedPHIs - The set of PHI nodes visited when determining
|
||||
/// if a variable's reference has been taken. This set
|
||||
/// is maintained to ensure we don't visit the same PHI node multiple
|
||||
/// times.
|
||||
SmallPtrSet<const PHINode *, 16> VisitedPHIs;
|
||||
|
||||
for (const BasicBlock &BB : *F) {
|
||||
for (const Instruction &I : BB) {
|
||||
if (const AllocaInst *AI = dyn_cast<AllocaInst>(&I)) {
|
||||
@ -264,9 +332,7 @@ bool StackProtector::RequiresStackProtector() {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (Strong && PointerMayBeCaptured(AI,
|
||||
/* ReturnCaptures */ false,
|
||||
/* StoreCaptures */ true)) {
|
||||
if (Strong && HasAddressTaken(AI, VisitedPHIs)) {
|
||||
++NumAddrTaken;
|
||||
Layout.insert(std::make_pair(AI, MachineFrameInfo::SSPLK_AddrOf));
|
||||
ORE.emit([&]() {
|
||||
|
@ -194,7 +194,7 @@ SubtargetFeatures ELFObjectFileBase::getARMFeatures() const {
|
||||
default:
|
||||
break;
|
||||
case ARMBuildAttrs::Not_Allowed:
|
||||
Features.AddFeature("vfp2sp", false);
|
||||
Features.AddFeature("vfp2d16sp", false);
|
||||
Features.AddFeature("vfp3d16sp", false);
|
||||
Features.AddFeature("vfp4d16sp", false);
|
||||
break;
|
||||
|
@ -177,6 +177,8 @@ bool ARM::getFPUFeatures(unsigned FPUKind, std::vector<StringRef> &Features) {
|
||||
|
||||
{"+fpregs", "-fpregs", FPUVersion::VFPV2, FPURestriction::SP_D16},
|
||||
{"+vfp2", "-vfp2", FPUVersion::VFPV2, FPURestriction::D16},
|
||||
{"+vfp2d16", "-vfp2d16", FPUVersion::VFPV2, FPURestriction::D16},
|
||||
{"+vfp2d16sp", "-vfp2d16sp", FPUVersion::VFPV2, FPURestriction::SP_D16},
|
||||
{"+vfp2sp", "-vfp2sp", FPUVersion::VFPV2, FPURestriction::SP_D16},
|
||||
{"+vfp3", "-vfp3", FPUVersion::VFPV3, FPURestriction::None},
|
||||
{"+vfp3d16", "-vfp3d16", FPUVersion::VFPV3, FPURestriction::D16},
|
||||
|
@ -172,7 +172,8 @@ void AArch64InstPrinter::printInst(const MCInst *MI, raw_ostream &O,
|
||||
int ImmS = MI->getOperand(4).getImm();
|
||||
|
||||
if ((Op2.getReg() == AArch64::WZR || Op2.getReg() == AArch64::XZR) &&
|
||||
(ImmR == 0 || ImmS < ImmR)) {
|
||||
(ImmR == 0 || ImmS < ImmR) &&
|
||||
STI.getFeatureBits()[AArch64::HasV8_2aOps]) {
|
||||
// BFC takes precedence over its entire range, sligtly differently to BFI.
|
||||
int BitWidth = Opcode == AArch64::BFMXri ? 64 : 32;
|
||||
int LSB = (BitWidth - ImmR) % BitWidth;
|
||||
|
@ -952,6 +952,7 @@ bool GCNHazardRecognizer::fixSMEMtoVectorWriteHazards(MachineInstr *MI) {
|
||||
unsigned SDSTName;
|
||||
switch (MI->getOpcode()) {
|
||||
case AMDGPU::V_READLANE_B32:
|
||||
case AMDGPU::V_READLANE_B32_gfx10:
|
||||
case AMDGPU::V_READFIRSTLANE_B32:
|
||||
SDSTName = AMDGPU::OpName::vdst;
|
||||
break;
|
||||
|
@ -84,14 +84,20 @@ multiclass VFPver<string name, string query, string description,
|
||||
!cast<SubtargetFeature>(NAME # "_SP")]>;
|
||||
}
|
||||
|
||||
def FeatureVFP2_SP : SubtargetFeature<"vfp2sp", "HasVFPv2SP", "true",
|
||||
def FeatureVFP2_D16_SP : SubtargetFeature<"vfp2d16sp", "HasVFPv2D16SP", "true",
|
||||
"Enable VFP2 instructions with "
|
||||
"no double precision",
|
||||
[FeatureFPRegs]>;
|
||||
|
||||
def FeatureVFP2_SP : SubtargetFeature<"vfp2sp", "HasVFPv2SP", "true",
|
||||
"Enable VFP2 instructions with "
|
||||
"no double precision",
|
||||
[FeatureVFP2_D16_SP]>;
|
||||
def FeatureVFP2_D16 : SubtargetFeature<"vfp2d16", "HasVFPv2D16", "true",
|
||||
"Enable VFP2 instructions",
|
||||
[FeatureFP64, FeatureVFP2_D16_SP]>;
|
||||
def FeatureVFP2 : SubtargetFeature<"vfp2", "HasVFPv2", "true",
|
||||
"Enable VFP2 instructions",
|
||||
[FeatureFP64, FeatureVFP2_SP]>;
|
||||
[FeatureVFP2_D16, FeatureVFP2_SP]>;
|
||||
|
||||
defm FeatureVFP3: VFPver<"vfp3", "HasVFPv3", "Enable VFP3 instructions",
|
||||
[], [], [FeatureVFP2]>;
|
||||
|
@ -71,7 +71,7 @@ def HasV8_5a : Predicate<"Subtarget->hasV8_5aOps()">,
|
||||
AssemblerPredicate<"HasV8_5aOps", "armv8.5a">;
|
||||
def NoVFP : Predicate<"!Subtarget->hasVFP2Base()">;
|
||||
def HasVFP2 : Predicate<"Subtarget->hasVFP2Base()">,
|
||||
AssemblerPredicate<"FeatureVFP2_SP", "VFP2">;
|
||||
AssemblerPredicate<"FeatureVFP2_D16_SP", "VFP2">;
|
||||
def HasVFP3 : Predicate<"Subtarget->hasVFP3Base()">,
|
||||
AssemblerPredicate<"FeatureVFP3_D16_SP", "VFP3">;
|
||||
def HasVFP4 : Predicate<"Subtarget->hasVFP4Base()">,
|
||||
|
@ -179,9 +179,11 @@ protected:
|
||||
bool HasVFPv3SP = false;
|
||||
bool HasVFPv4SP = false;
|
||||
bool HasFPARMv8SP = false;
|
||||
bool HasVFPv2D16 = false;
|
||||
bool HasVFPv3D16 = false;
|
||||
bool HasVFPv4D16 = false;
|
||||
bool HasFPARMv8D16 = false;
|
||||
bool HasVFPv2D16SP = false;
|
||||
bool HasVFPv3D16SP = false;
|
||||
bool HasVFPv4D16SP = false;
|
||||
bool HasFPARMv8D16SP = false;
|
||||
@ -598,7 +600,7 @@ public:
|
||||
|
||||
bool hasARMOps() const { return !NoARM; }
|
||||
|
||||
bool hasVFP2Base() const { return HasVFPv2SP; }
|
||||
bool hasVFP2Base() const { return HasVFPv2D16SP; }
|
||||
bool hasVFP3Base() const { return HasVFPv3D16SP; }
|
||||
bool hasVFP4Base() const { return HasVFPv4D16SP; }
|
||||
bool hasFPARMv8Base() const { return HasFPARMv8D16SP; }
|
||||
|
@ -11694,14 +11694,14 @@ bool ARMAsmParser::parseDirectiveArchExtension(SMLoc L) {
|
||||
{ ARM::AEK_CRYPTO, {Feature_HasV8Bit},
|
||||
{ARM::FeatureCrypto, ARM::FeatureNEON, ARM::FeatureFPARMv8} },
|
||||
{ ARM::AEK_FP, {Feature_HasV8Bit},
|
||||
{ARM::FeatureVFP2_SP, ARM::FeatureFPARMv8} },
|
||||
{ARM::FeatureVFP2_D16_SP, ARM::FeatureFPARMv8} },
|
||||
{ (ARM::AEK_HWDIVTHUMB | ARM::AEK_HWDIVARM),
|
||||
{Feature_HasV7Bit, Feature_IsNotMClassBit},
|
||||
{ARM::FeatureHWDivThumb, ARM::FeatureHWDivARM} },
|
||||
{ ARM::AEK_MP, {Feature_HasV7Bit, Feature_IsNotMClassBit},
|
||||
{ARM::FeatureMP} },
|
||||
{ ARM::AEK_SIMD, {Feature_HasV8Bit},
|
||||
{ARM::FeatureNEON, ARM::FeatureVFP2_SP, ARM::FeatureFPARMv8} },
|
||||
{ARM::FeatureNEON, ARM::FeatureVFP2_D16_SP, ARM::FeatureFPARMv8} },
|
||||
{ ARM::AEK_SEC, {Feature_HasV6KBit}, {ARM::FeatureTrustZone} },
|
||||
// FIXME: Only available in A-class, isel not predicated
|
||||
{ ARM::AEK_VIRT, {Feature_HasV7Bit}, {ARM::FeatureVirtualization} },
|
||||
|
@ -249,12 +249,12 @@ void ARMTargetStreamer::emitTargetAttributes(const MCSubtargetInfo &STI) {
|
||||
: ARM::FK_VFPV3_D16)
|
||||
: (STI.hasFeature(ARM::FeatureFP16) ? ARM::FK_VFPV3XD_FP16
|
||||
: ARM::FK_VFPV3XD)));
|
||||
else if (STI.hasFeature(ARM::FeatureVFP2_SP))
|
||||
else if (STI.hasFeature(ARM::FeatureVFP2_D16_SP))
|
||||
emitFPU(ARM::FK_VFPV2);
|
||||
}
|
||||
|
||||
// ABI_HardFP_use attribute to indicate single precision FP.
|
||||
if (STI.hasFeature(ARM::FeatureVFP2_SP) && !STI.hasFeature(ARM::FeatureFP64))
|
||||
if (STI.hasFeature(ARM::FeatureVFP2_D16_SP) && !STI.hasFeature(ARM::FeatureFP64))
|
||||
emitAttribute(ARMBuildAttrs::ABI_HardFP_use,
|
||||
ARMBuildAttrs::HardFPSinglePrecision);
|
||||
|
||||
|
@ -234,9 +234,14 @@ class MipsAsmParser : public MCTargetAsmParser {
|
||||
bool expandLoadImm(MCInst &Inst, bool Is32BitImm, SMLoc IDLoc,
|
||||
MCStreamer &Out, const MCSubtargetInfo *STI);
|
||||
|
||||
bool expandLoadImmReal(MCInst &Inst, bool IsSingle, bool IsGPR, bool Is64FPU,
|
||||
SMLoc IDLoc, MCStreamer &Out,
|
||||
const MCSubtargetInfo *STI);
|
||||
bool expandLoadSingleImmToGPR(MCInst &Inst, SMLoc IDLoc, MCStreamer &Out,
|
||||
const MCSubtargetInfo *STI);
|
||||
bool expandLoadSingleImmToFPR(MCInst &Inst, SMLoc IDLoc, MCStreamer &Out,
|
||||
const MCSubtargetInfo *STI);
|
||||
bool expandLoadDoubleImmToGPR(MCInst &Inst, SMLoc IDLoc, MCStreamer &Out,
|
||||
const MCSubtargetInfo *STI);
|
||||
bool expandLoadDoubleImmToFPR(MCInst &Inst, bool Is64FPU, SMLoc IDLoc,
|
||||
MCStreamer &Out, const MCSubtargetInfo *STI);
|
||||
|
||||
bool expandLoadAddress(unsigned DstReg, unsigned BaseReg,
|
||||
const MCOperand &Offset, bool Is32BitAddress,
|
||||
@ -2462,25 +2467,21 @@ MipsAsmParser::tryExpandInstruction(MCInst &Inst, SMLoc IDLoc, MCStreamer &Out,
|
||||
: MER_Success;
|
||||
|
||||
case Mips::LoadImmSingleGPR:
|
||||
return expandLoadImmReal(Inst, true, true, false, IDLoc, Out, STI)
|
||||
? MER_Fail
|
||||
: MER_Success;
|
||||
return expandLoadSingleImmToGPR(Inst, IDLoc, Out, STI) ? MER_Fail
|
||||
: MER_Success;
|
||||
case Mips::LoadImmSingleFGR:
|
||||
return expandLoadImmReal(Inst, true, false, false, IDLoc, Out, STI)
|
||||
? MER_Fail
|
||||
: MER_Success;
|
||||
return expandLoadSingleImmToFPR(Inst, IDLoc, Out, STI) ? MER_Fail
|
||||
: MER_Success;
|
||||
case Mips::LoadImmDoubleGPR:
|
||||
return expandLoadImmReal(Inst, false, true, false, IDLoc, Out, STI)
|
||||
? MER_Fail
|
||||
: MER_Success;
|
||||
return expandLoadDoubleImmToGPR(Inst, IDLoc, Out, STI) ? MER_Fail
|
||||
: MER_Success;
|
||||
case Mips::LoadImmDoubleFGR:
|
||||
return expandLoadImmReal(Inst, false, false, true, IDLoc, Out, STI)
|
||||
? MER_Fail
|
||||
: MER_Success;
|
||||
return expandLoadDoubleImmToFPR(Inst, true, IDLoc, Out, STI) ? MER_Fail
|
||||
: MER_Success;
|
||||
case Mips::LoadImmDoubleFGR_32:
|
||||
return expandLoadImmReal(Inst, false, false, false, IDLoc, Out, STI)
|
||||
? MER_Fail
|
||||
: MER_Success;
|
||||
return expandLoadDoubleImmToFPR(Inst, false, IDLoc, Out, STI) ? MER_Fail
|
||||
: MER_Success;
|
||||
|
||||
case Mips::Ulh:
|
||||
return expandUlh(Inst, true, IDLoc, Out, STI) ? MER_Fail : MER_Success;
|
||||
case Mips::Ulhu:
|
||||
@ -3301,10 +3302,45 @@ bool MipsAsmParser::emitPartialAddress(MipsTargetStreamer &TOut, SMLoc IDLoc,
|
||||
return false;
|
||||
}
|
||||
|
||||
bool MipsAsmParser::expandLoadImmReal(MCInst &Inst, bool IsSingle, bool IsGPR,
|
||||
bool Is64FPU, SMLoc IDLoc,
|
||||
MCStreamer &Out,
|
||||
const MCSubtargetInfo *STI) {
|
||||
static uint64_t convertIntToDoubleImm(uint64_t ImmOp64) {
|
||||
// If ImmOp64 is AsmToken::Integer type (all bits set to zero in the
|
||||
// exponent field), convert it to double (e.g. 1 to 1.0)
|
||||
if ((Hi_32(ImmOp64) & 0x7ff00000) == 0) {
|
||||
APFloat RealVal(APFloat::IEEEdouble(), ImmOp64);
|
||||
ImmOp64 = RealVal.bitcastToAPInt().getZExtValue();
|
||||
}
|
||||
return ImmOp64;
|
||||
}
|
||||
|
||||
static uint32_t covertDoubleImmToSingleImm(uint64_t ImmOp64) {
|
||||
// Conversion of a double in an uint64_t to a float in a uint32_t,
|
||||
// retaining the bit pattern of a float.
|
||||
double DoubleImm = BitsToDouble(ImmOp64);
|
||||
float TmpFloat = static_cast<float>(DoubleImm);
|
||||
return FloatToBits(TmpFloat);
|
||||
}
|
||||
|
||||
bool MipsAsmParser::expandLoadSingleImmToGPR(MCInst &Inst, SMLoc IDLoc,
|
||||
MCStreamer &Out,
|
||||
const MCSubtargetInfo *STI) {
|
||||
assert(Inst.getNumOperands() == 2 && "Invalid operand count");
|
||||
assert(Inst.getOperand(0).isReg() && Inst.getOperand(1).isImm() &&
|
||||
"Invalid instruction operand.");
|
||||
|
||||
unsigned FirstReg = Inst.getOperand(0).getReg();
|
||||
uint64_t ImmOp64 = Inst.getOperand(1).getImm();
|
||||
|
||||
ImmOp64 = convertIntToDoubleImm(ImmOp64);
|
||||
|
||||
uint32_t ImmOp32 = covertDoubleImmToSingleImm(ImmOp64);
|
||||
|
||||
return loadImmediate(ImmOp32, FirstReg, Mips::NoRegister, true, true, IDLoc,
|
||||
Out, STI);
|
||||
}
|
||||
|
||||
bool MipsAsmParser::expandLoadSingleImmToFPR(MCInst &Inst, SMLoc IDLoc,
|
||||
MCStreamer &Out,
|
||||
const MCSubtargetInfo *STI) {
|
||||
MipsTargetStreamer &TOut = getTargetStreamer();
|
||||
assert(Inst.getNumOperands() == 2 && "Invalid operand count");
|
||||
assert(Inst.getOperand(0).isReg() && Inst.getOperand(1).isImm() &&
|
||||
@ -3313,166 +3349,189 @@ bool MipsAsmParser::expandLoadImmReal(MCInst &Inst, bool IsSingle, bool IsGPR,
|
||||
unsigned FirstReg = Inst.getOperand(0).getReg();
|
||||
uint64_t ImmOp64 = Inst.getOperand(1).getImm();
|
||||
|
||||
uint32_t HiImmOp64 = (ImmOp64 & 0xffffffff00000000) >> 32;
|
||||
// If ImmOp64 is AsmToken::Integer type (all bits set to zero in the
|
||||
// exponent field), convert it to double (e.g. 1 to 1.0)
|
||||
if ((HiImmOp64 & 0x7ff00000) == 0) {
|
||||
APFloat RealVal(APFloat::IEEEdouble(), ImmOp64);
|
||||
ImmOp64 = RealVal.bitcastToAPInt().getZExtValue();
|
||||
}
|
||||
ImmOp64 = convertIntToDoubleImm(ImmOp64);
|
||||
|
||||
uint32_t LoImmOp64 = ImmOp64 & 0xffffffff;
|
||||
HiImmOp64 = (ImmOp64 & 0xffffffff00000000) >> 32;
|
||||
uint32_t ImmOp32 = covertDoubleImmToSingleImm(ImmOp64);
|
||||
|
||||
if (IsSingle) {
|
||||
// Conversion of a double in an uint64_t to a float in a uint32_t,
|
||||
// retaining the bit pattern of a float.
|
||||
uint32_t ImmOp32;
|
||||
double doubleImm = BitsToDouble(ImmOp64);
|
||||
float tmp_float = static_cast<float>(doubleImm);
|
||||
ImmOp32 = FloatToBits(tmp_float);
|
||||
|
||||
if (IsGPR) {
|
||||
if (loadImmediate(ImmOp32, FirstReg, Mips::NoRegister, true, true, IDLoc,
|
||||
Out, STI))
|
||||
return true;
|
||||
return false;
|
||||
} else {
|
||||
unsigned ATReg = getATReg(IDLoc);
|
||||
if (!ATReg)
|
||||
return true;
|
||||
if (LoImmOp64 == 0) {
|
||||
if (loadImmediate(ImmOp32, ATReg, Mips::NoRegister, true, true, IDLoc,
|
||||
Out, STI))
|
||||
return true;
|
||||
TOut.emitRR(Mips::MTC1, FirstReg, ATReg, IDLoc, STI);
|
||||
return false;
|
||||
}
|
||||
|
||||
MCSection *CS = getStreamer().getCurrentSectionOnly();
|
||||
// FIXME: Enhance this expansion to use the .lit4 & .lit8 sections
|
||||
// where appropriate.
|
||||
MCSection *ReadOnlySection = getContext().getELFSection(
|
||||
".rodata", ELF::SHT_PROGBITS, ELF::SHF_ALLOC);
|
||||
|
||||
MCSymbol *Sym = getContext().createTempSymbol();
|
||||
const MCExpr *LoSym =
|
||||
MCSymbolRefExpr::create(Sym, MCSymbolRefExpr::VK_None, getContext());
|
||||
const MipsMCExpr *LoExpr =
|
||||
MipsMCExpr::create(MipsMCExpr::MEK_LO, LoSym, getContext());
|
||||
|
||||
getStreamer().SwitchSection(ReadOnlySection);
|
||||
getStreamer().EmitLabel(Sym, IDLoc);
|
||||
getStreamer().EmitIntValue(ImmOp32, 4);
|
||||
getStreamer().SwitchSection(CS);
|
||||
|
||||
if(emitPartialAddress(TOut, IDLoc, Sym))
|
||||
return true;
|
||||
TOut.emitRRX(Mips::LWC1, FirstReg, ATReg,
|
||||
MCOperand::createExpr(LoExpr), IDLoc, STI);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
// if(!IsSingle)
|
||||
unsigned ATReg = getATReg(IDLoc);
|
||||
if (!ATReg)
|
||||
unsigned TmpReg = getATReg(IDLoc);
|
||||
if (!TmpReg)
|
||||
return true;
|
||||
|
||||
if (IsGPR) {
|
||||
if (LoImmOp64 == 0) {
|
||||
if(isABI_N32() || isABI_N64()) {
|
||||
if (loadImmediate(HiImmOp64, FirstReg, Mips::NoRegister, false, true,
|
||||
IDLoc, Out, STI))
|
||||
return true;
|
||||
return false;
|
||||
} else {
|
||||
if (loadImmediate(HiImmOp64, FirstReg, Mips::NoRegister, true, true,
|
||||
IDLoc, Out, STI))
|
||||
return true;
|
||||
|
||||
if (loadImmediate(0, nextReg(FirstReg), Mips::NoRegister, true, true,
|
||||
IDLoc, Out, STI))
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
MCSection *CS = getStreamer().getCurrentSectionOnly();
|
||||
MCSection *ReadOnlySection = getContext().getELFSection(
|
||||
".rodata", ELF::SHT_PROGBITS, ELF::SHF_ALLOC);
|
||||
|
||||
MCSymbol *Sym = getContext().createTempSymbol();
|
||||
const MCExpr *LoSym =
|
||||
MCSymbolRefExpr::create(Sym, MCSymbolRefExpr::VK_None, getContext());
|
||||
const MipsMCExpr *LoExpr =
|
||||
MipsMCExpr::create(MipsMCExpr::MEK_LO, LoSym, getContext());
|
||||
|
||||
getStreamer().SwitchSection(ReadOnlySection);
|
||||
getStreamer().EmitLabel(Sym, IDLoc);
|
||||
getStreamer().EmitIntValue(HiImmOp64, 4);
|
||||
getStreamer().EmitIntValue(LoImmOp64, 4);
|
||||
getStreamer().SwitchSection(CS);
|
||||
|
||||
if(emitPartialAddress(TOut, IDLoc, Sym))
|
||||
if (Lo_32(ImmOp64) == 0) {
|
||||
if (loadImmediate(ImmOp32, TmpReg, Mips::NoRegister, true, true, IDLoc, Out,
|
||||
STI))
|
||||
return true;
|
||||
if(isABI_N64())
|
||||
TOut.emitRRX(Mips::DADDiu, ATReg, ATReg,
|
||||
MCOperand::createExpr(LoExpr), IDLoc, STI);
|
||||
else
|
||||
TOut.emitRRX(Mips::ADDiu, ATReg, ATReg,
|
||||
MCOperand::createExpr(LoExpr), IDLoc, STI);
|
||||
|
||||
if(isABI_N32() || isABI_N64())
|
||||
TOut.emitRRI(Mips::LD, FirstReg, ATReg, 0, IDLoc, STI);
|
||||
else {
|
||||
TOut.emitRRI(Mips::LW, FirstReg, ATReg, 0, IDLoc, STI);
|
||||
TOut.emitRRI(Mips::LW, nextReg(FirstReg), ATReg, 4, IDLoc, STI);
|
||||
}
|
||||
TOut.emitRR(Mips::MTC1, FirstReg, TmpReg, IDLoc, STI);
|
||||
return false;
|
||||
} else { // if(!IsGPR && !IsSingle)
|
||||
if ((LoImmOp64 == 0) &&
|
||||
!((HiImmOp64 & 0xffff0000) && (HiImmOp64 & 0x0000ffff))) {
|
||||
// FIXME: In the case where the constant is zero, we can load the
|
||||
// register directly from the zero register.
|
||||
if (loadImmediate(HiImmOp64, ATReg, Mips::NoRegister, true, true, IDLoc,
|
||||
}
|
||||
|
||||
MCSection *CS = getStreamer().getCurrentSectionOnly();
|
||||
// FIXME: Enhance this expansion to use the .lit4 & .lit8 sections
|
||||
// where appropriate.
|
||||
MCSection *ReadOnlySection =
|
||||
getContext().getELFSection(".rodata", ELF::SHT_PROGBITS, ELF::SHF_ALLOC);
|
||||
|
||||
MCSymbol *Sym = getContext().createTempSymbol();
|
||||
const MCExpr *LoSym =
|
||||
MCSymbolRefExpr::create(Sym, MCSymbolRefExpr::VK_None, getContext());
|
||||
const MipsMCExpr *LoExpr =
|
||||
MipsMCExpr::create(MipsMCExpr::MEK_LO, LoSym, getContext());
|
||||
|
||||
getStreamer().SwitchSection(ReadOnlySection);
|
||||
getStreamer().EmitLabel(Sym, IDLoc);
|
||||
getStreamer().EmitIntValue(ImmOp32, 4);
|
||||
getStreamer().SwitchSection(CS);
|
||||
|
||||
if (emitPartialAddress(TOut, IDLoc, Sym))
|
||||
return true;
|
||||
TOut.emitRRX(Mips::LWC1, FirstReg, TmpReg, MCOperand::createExpr(LoExpr),
|
||||
IDLoc, STI);
|
||||
return false;
|
||||
}
|
||||
|
||||
bool MipsAsmParser::expandLoadDoubleImmToGPR(MCInst &Inst, SMLoc IDLoc,
|
||||
MCStreamer &Out,
|
||||
const MCSubtargetInfo *STI) {
|
||||
MipsTargetStreamer &TOut = getTargetStreamer();
|
||||
assert(Inst.getNumOperands() == 2 && "Invalid operand count");
|
||||
assert(Inst.getOperand(0).isReg() && Inst.getOperand(1).isImm() &&
|
||||
"Invalid instruction operand.");
|
||||
|
||||
unsigned FirstReg = Inst.getOperand(0).getReg();
|
||||
uint64_t ImmOp64 = Inst.getOperand(1).getImm();
|
||||
|
||||
ImmOp64 = convertIntToDoubleImm(ImmOp64);
|
||||
|
||||
uint32_t LoImmOp64 = Lo_32(ImmOp64);
|
||||
uint32_t HiImmOp64 = Hi_32(ImmOp64);
|
||||
|
||||
unsigned TmpReg = getATReg(IDLoc);
|
||||
if (!TmpReg)
|
||||
return true;
|
||||
|
||||
if (LoImmOp64 == 0) {
|
||||
if (isABI_N32() || isABI_N64()) {
|
||||
if (loadImmediate(ImmOp64, FirstReg, Mips::NoRegister, false, true, IDLoc,
|
||||
Out, STI))
|
||||
return true;
|
||||
if (isABI_N32() || isABI_N64())
|
||||
TOut.emitRR(Mips::DMTC1, FirstReg, ATReg, IDLoc, STI);
|
||||
else if (hasMips32r2()) {
|
||||
TOut.emitRR(Mips::MTC1, FirstReg, Mips::ZERO, IDLoc, STI);
|
||||
TOut.emitRRR(Mips::MTHC1_D32, FirstReg, FirstReg, ATReg, IDLoc, STI);
|
||||
} else {
|
||||
TOut.emitRR(Mips::MTC1, nextReg(FirstReg), ATReg, IDLoc, STI);
|
||||
TOut.emitRR(Mips::MTC1, FirstReg, Mips::ZERO, IDLoc, STI);
|
||||
}
|
||||
} else {
|
||||
if (loadImmediate(HiImmOp64, FirstReg, Mips::NoRegister, true, true,
|
||||
IDLoc, Out, STI))
|
||||
return true;
|
||||
|
||||
if (loadImmediate(0, nextReg(FirstReg), Mips::NoRegister, true, true,
|
||||
IDLoc, Out, STI))
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
MCSection *CS = getStreamer().getCurrentSectionOnly();
|
||||
MCSection *ReadOnlySection =
|
||||
getContext().getELFSection(".rodata", ELF::SHT_PROGBITS, ELF::SHF_ALLOC);
|
||||
|
||||
MCSymbol *Sym = getContext().createTempSymbol();
|
||||
const MCExpr *LoSym =
|
||||
MCSymbolRefExpr::create(Sym, MCSymbolRefExpr::VK_None, getContext());
|
||||
const MipsMCExpr *LoExpr =
|
||||
MipsMCExpr::create(MipsMCExpr::MEK_LO, LoSym, getContext());
|
||||
|
||||
getStreamer().SwitchSection(ReadOnlySection);
|
||||
getStreamer().EmitLabel(Sym, IDLoc);
|
||||
getStreamer().EmitValueToAlignment(8);
|
||||
getStreamer().EmitIntValue(ImmOp64, 8);
|
||||
getStreamer().SwitchSection(CS);
|
||||
|
||||
if (emitPartialAddress(TOut, IDLoc, Sym))
|
||||
return true;
|
||||
|
||||
if (isABI_N64())
|
||||
TOut.emitRRX(Mips::DADDiu, TmpReg, TmpReg, MCOperand::createExpr(LoExpr),
|
||||
IDLoc, STI);
|
||||
else
|
||||
TOut.emitRRX(Mips::ADDiu, TmpReg, TmpReg, MCOperand::createExpr(LoExpr),
|
||||
IDLoc, STI);
|
||||
|
||||
if (isABI_N32() || isABI_N64())
|
||||
TOut.emitRRI(Mips::LD, FirstReg, TmpReg, 0, IDLoc, STI);
|
||||
else {
|
||||
TOut.emitRRI(Mips::LW, FirstReg, TmpReg, 0, IDLoc, STI);
|
||||
TOut.emitRRI(Mips::LW, nextReg(FirstReg), TmpReg, 4, IDLoc, STI);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
bool MipsAsmParser::expandLoadDoubleImmToFPR(MCInst &Inst, bool Is64FPU,
|
||||
SMLoc IDLoc, MCStreamer &Out,
|
||||
const MCSubtargetInfo *STI) {
|
||||
MipsTargetStreamer &TOut = getTargetStreamer();
|
||||
assert(Inst.getNumOperands() == 2 && "Invalid operand count");
|
||||
assert(Inst.getOperand(0).isReg() && Inst.getOperand(1).isImm() &&
|
||||
"Invalid instruction operand.");
|
||||
|
||||
unsigned FirstReg = Inst.getOperand(0).getReg();
|
||||
uint64_t ImmOp64 = Inst.getOperand(1).getImm();
|
||||
|
||||
ImmOp64 = convertIntToDoubleImm(ImmOp64);
|
||||
|
||||
uint32_t LoImmOp64 = Lo_32(ImmOp64);
|
||||
uint32_t HiImmOp64 = Hi_32(ImmOp64);
|
||||
|
||||
unsigned TmpReg = getATReg(IDLoc);
|
||||
if (!TmpReg)
|
||||
return true;
|
||||
|
||||
if ((LoImmOp64 == 0) &&
|
||||
!((HiImmOp64 & 0xffff0000) && (HiImmOp64 & 0x0000ffff))) {
|
||||
// FIXME: In the case where the constant is zero, we can load the
|
||||
// register directly from the zero register.
|
||||
|
||||
if (isABI_N32() || isABI_N64()) {
|
||||
if (loadImmediate(ImmOp64, TmpReg, Mips::NoRegister, false, false, IDLoc,
|
||||
Out, STI))
|
||||
return true;
|
||||
TOut.emitRR(Mips::DMTC1, FirstReg, TmpReg, IDLoc, STI);
|
||||
return false;
|
||||
}
|
||||
|
||||
MCSection *CS = getStreamer().getCurrentSectionOnly();
|
||||
// FIXME: Enhance this expansion to use the .lit4 & .lit8 sections
|
||||
// where appropriate.
|
||||
MCSection *ReadOnlySection = getContext().getELFSection(
|
||||
".rodata", ELF::SHT_PROGBITS, ELF::SHF_ALLOC);
|
||||
|
||||
MCSymbol *Sym = getContext().createTempSymbol();
|
||||
const MCExpr *LoSym =
|
||||
MCSymbolRefExpr::create(Sym, MCSymbolRefExpr::VK_None, getContext());
|
||||
const MipsMCExpr *LoExpr =
|
||||
MipsMCExpr::create(MipsMCExpr::MEK_LO, LoSym, getContext());
|
||||
|
||||
getStreamer().SwitchSection(ReadOnlySection);
|
||||
getStreamer().EmitLabel(Sym, IDLoc);
|
||||
getStreamer().EmitIntValue(HiImmOp64, 4);
|
||||
getStreamer().EmitIntValue(LoImmOp64, 4);
|
||||
getStreamer().SwitchSection(CS);
|
||||
|
||||
if(emitPartialAddress(TOut, IDLoc, Sym))
|
||||
if (loadImmediate(HiImmOp64, TmpReg, Mips::NoRegister, true, false, IDLoc,
|
||||
Out, STI))
|
||||
return true;
|
||||
TOut.emitRRX(Is64FPU ? Mips::LDC164 : Mips::LDC1, FirstReg, ATReg,
|
||||
MCOperand::createExpr(LoExpr), IDLoc, STI);
|
||||
|
||||
if (hasMips32r2()) {
|
||||
TOut.emitRR(Mips::MTC1, FirstReg, Mips::ZERO, IDLoc, STI);
|
||||
TOut.emitRRR(Mips::MTHC1_D32, FirstReg, FirstReg, TmpReg, IDLoc, STI);
|
||||
} else {
|
||||
TOut.emitRR(Mips::MTC1, nextReg(FirstReg), TmpReg, IDLoc, STI);
|
||||
TOut.emitRR(Mips::MTC1, FirstReg, Mips::ZERO, IDLoc, STI);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
MCSection *CS = getStreamer().getCurrentSectionOnly();
|
||||
// FIXME: Enhance this expansion to use the .lit4 & .lit8 sections
|
||||
// where appropriate.
|
||||
MCSection *ReadOnlySection =
|
||||
getContext().getELFSection(".rodata", ELF::SHT_PROGBITS, ELF::SHF_ALLOC);
|
||||
|
||||
MCSymbol *Sym = getContext().createTempSymbol();
|
||||
const MCExpr *LoSym =
|
||||
MCSymbolRefExpr::create(Sym, MCSymbolRefExpr::VK_None, getContext());
|
||||
const MipsMCExpr *LoExpr =
|
||||
MipsMCExpr::create(MipsMCExpr::MEK_LO, LoSym, getContext());
|
||||
|
||||
getStreamer().SwitchSection(ReadOnlySection);
|
||||
getStreamer().EmitLabel(Sym, IDLoc);
|
||||
getStreamer().EmitValueToAlignment(8);
|
||||
getStreamer().EmitIntValue(ImmOp64, 8);
|
||||
getStreamer().SwitchSection(CS);
|
||||
|
||||
if (emitPartialAddress(TOut, IDLoc, Sym))
|
||||
return true;
|
||||
|
||||
TOut.emitRRX(Is64FPU ? Mips::LDC164 : Mips::LDC1, FirstReg, TmpReg,
|
||||
MCOperand::createExpr(LoExpr), IDLoc, STI);
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -128,14 +128,14 @@ def : InstRW<[P9_ALU_2C, IP_EXEC_1C, DISP_1C],
|
||||
(instregex "MTVSRW(A|Z)$"),
|
||||
(instregex "CMP(WI|LWI|W|LW)(8)?$"),
|
||||
(instregex "CMP(L)?D(I)?$"),
|
||||
(instregex "SUBF(I)?C(8)?$"),
|
||||
(instregex "SUBF(I)?C(8)?(O)?$"),
|
||||
(instregex "ANDI(S)?o(8)?$"),
|
||||
(instregex "ADDC(8)?$"),
|
||||
(instregex "ADDC(8)?(O)?$"),
|
||||
(instregex "ADDIC(8)?(o)?$"),
|
||||
(instregex "ADD(8|4)(o)?$"),
|
||||
(instregex "ADD(E|ME|ZE)(8)?(o)?$"),
|
||||
(instregex "SUBF(E|ME|ZE)?(8)?(o)?$"),
|
||||
(instregex "NEG(8)?(o)?$"),
|
||||
(instregex "ADD(8|4)(O)?(o)?$"),
|
||||
(instregex "ADD(E|ME|ZE)(8)?(O)?(o)?$"),
|
||||
(instregex "SUBF(E|ME|ZE)?(8)?(O)?(o)?$"),
|
||||
(instregex "NEG(8)?(O)?(o)?$"),
|
||||
(instregex "POPCNTB$"),
|
||||
(instregex "ADD(I|IS)?(8)?$"),
|
||||
(instregex "LI(S)?(8)?$"),
|
||||
@ -147,7 +147,7 @@ def : InstRW<[P9_ALU_2C, IP_EXEC_1C, DISP_1C],
|
||||
(instregex "EQV(8)?(o)?$"),
|
||||
(instregex "EXTS(B|H|W)(8)?(_32)?(_64)?(o)?$"),
|
||||
(instregex "ADD(4|8)(TLS)?(_)?$"),
|
||||
(instregex "NEG(8)?$"),
|
||||
(instregex "NEG(8)?(O)?$"),
|
||||
(instregex "ADDI(S)?toc(HA|L)$"),
|
||||
COPY,
|
||||
MCRF,
|
||||
@ -397,7 +397,7 @@ def : InstRW<[P9_DPE_7C, P9_DPO_7C, IP_EXECE_1C, IP_EXECO_1C, DISP_1C],
|
||||
def : InstRW<[P9_DP_5C, IP_EXEC_1C, DISP_3SLOTS_1C],
|
||||
(instrs
|
||||
(instregex "MADD(HD|HDU|LD|LD8)$"),
|
||||
(instregex "MUL(HD|HW|LD|LI|LI8|LW)(U)?$")
|
||||
(instregex "MUL(HD|HW|LD|LI|LI8|LW)(U)?(O)?$")
|
||||
)>;
|
||||
|
||||
// 7 cycle Restricted DP operation. One DP unit, one EXEC pipeline and all three
|
||||
@ -456,7 +456,7 @@ def : InstRW<[P9_DP_7C, P9_ALU_3C, IP_EXEC_1C, IP_EXEC_1C,
|
||||
def : InstRW<[P9_DPOpAndALUOp_7C, IP_EXEC_1C, IP_EXEC_1C,
|
||||
DISP_3SLOTS_1C, DISP_1C],
|
||||
(instrs
|
||||
(instregex "MUL(H|L)(D|W)(U)?o$")
|
||||
(instregex "MUL(H|L)(D|W)(U)?(O)?o$")
|
||||
)>;
|
||||
|
||||
// 7 cycle Restricted DP operation and one 3 cycle ALU operation.
|
||||
@ -944,7 +944,9 @@ def : InstRW<[P9_DIV_12C, IP_EXECE_1C, IP_EXECO_1C, DISP_EVEN_1C],
|
||||
def : InstRW<[P9_DIV_16C_8, IP_EXECO_1C, IP_EXECE_1C, DISP_EVEN_1C],
|
||||
(instrs
|
||||
DIVW,
|
||||
DIVWO,
|
||||
DIVWU,
|
||||
DIVWUO,
|
||||
MODSW
|
||||
)>;
|
||||
|
||||
@ -954,9 +956,13 @@ def : InstRW<[P9_DIV_16C_8, IP_EXECO_1C, IP_EXECE_1C, DISP_EVEN_1C],
|
||||
def : InstRW<[P9_DIV_24C_8, IP_EXECO_1C, IP_EXECE_1C, DISP_EVEN_1C],
|
||||
(instrs
|
||||
DIVWE,
|
||||
DIVWEO,
|
||||
DIVD,
|
||||
DIVDO,
|
||||
DIVWEU,
|
||||
DIVWEUO,
|
||||
DIVDU,
|
||||
DIVDUO,
|
||||
MODSD,
|
||||
MODUD,
|
||||
MODUW
|
||||
@ -968,7 +974,9 @@ def : InstRW<[P9_DIV_24C_8, IP_EXECO_1C, IP_EXECE_1C, DISP_EVEN_1C],
|
||||
def : InstRW<[P9_DIV_40C_8, IP_EXECO_1C, IP_EXECE_1C, DISP_EVEN_1C],
|
||||
(instrs
|
||||
DIVDE,
|
||||
DIVDEU
|
||||
DIVDEO,
|
||||
DIVDEU,
|
||||
DIVDEUO
|
||||
)>;
|
||||
|
||||
// Cracked DIV and ALU operation. Requires one full slice for the ALU operation
|
||||
@ -987,9 +995,13 @@ def : InstRW<[P9_IntDivAndALUOp_26C_8, IP_EXECE_1C, IP_EXECO_1C, IP_EXEC_1C,
|
||||
DISP_EVEN_1C, DISP_1C],
|
||||
(instrs
|
||||
DIVDo,
|
||||
DIVDOo,
|
||||
DIVDUo,
|
||||
DIVDUOo,
|
||||
DIVWEo,
|
||||
DIVWEUo
|
||||
DIVWEOo,
|
||||
DIVWEUo,
|
||||
DIVWEUOo
|
||||
)>;
|
||||
|
||||
// Cracked DIV and ALU operation. Requires one full slice for the ALU operation
|
||||
@ -999,7 +1011,9 @@ def : InstRW<[P9_IntDivAndALUOp_42C_8, IP_EXECE_1C, IP_EXECO_1C, IP_EXEC_1C,
|
||||
DISP_EVEN_1C, DISP_1C],
|
||||
(instrs
|
||||
DIVDEo,
|
||||
DIVDEUo
|
||||
DIVDEOo,
|
||||
DIVDEUo,
|
||||
DIVDEUOo
|
||||
)>;
|
||||
|
||||
// CR access instructions in _BrMCR, IIC_BrMCRX.
|
||||
@ -1024,8 +1038,8 @@ def : InstRW<[P9_ALU_2C, P9_ALU_2C, IP_EXEC_1C, IP_EXEC_1C,
|
||||
def : InstRW<[P9_ALU_2C, P9_ALU_2C, IP_EXEC_1C, IP_EXEC_1C,
|
||||
DISP_1C, DISP_1C],
|
||||
(instrs
|
||||
(instregex "ADDC(8)?o$"),
|
||||
(instregex "SUBFC(8)?o$")
|
||||
(instregex "ADDC(8)?(O)?o$"),
|
||||
(instregex "SUBFC(8)?(O)?o$")
|
||||
)>;
|
||||
|
||||
// Cracked ALU operations.
|
||||
|
@ -497,9 +497,9 @@ def XORIS8 : DForm_4<27, (outs g8rc:$dst), (ins g8rc:$src1, u16imm64:$src2),
|
||||
[(set i64:$dst, (xor i64:$src1, imm16ShiftedZExt:$src2))]>;
|
||||
|
||||
let isCommutable = 1 in
|
||||
defm ADD8 : XOForm_1r<31, 266, 0, (outs g8rc:$rT), (ins g8rc:$rA, g8rc:$rB),
|
||||
"add", "$rT, $rA, $rB", IIC_IntSimple,
|
||||
[(set i64:$rT, (add i64:$rA, i64:$rB))]>;
|
||||
defm ADD8 : XOForm_1rx<31, 266, 0, (outs g8rc:$rT), (ins g8rc:$rA, g8rc:$rB),
|
||||
"add", "$rT, $rA, $rB", IIC_IntSimple,
|
||||
[(set i64:$rT, (add i64:$rA, i64:$rB))]>;
|
||||
// ADD8 has a special form: reg = ADD8(reg, sym@tls) for use by the
|
||||
// initial-exec thread-local storage model. We need to forbid r0 here -
|
||||
// while it works for add just fine, the linker can relax this to local-exec
|
||||
@ -576,9 +576,9 @@ defm SUBFC8 : XOForm_1rc<31, 8, 0, (outs g8rc:$rT), (ins g8rc:$rA, g8rc:$rB),
|
||||
"subfc", "$rT, $rA, $rB", IIC_IntGeneral,
|
||||
[(set i64:$rT, (subc i64:$rB, i64:$rA))]>,
|
||||
PPC970_DGroup_Cracked;
|
||||
defm SUBF8 : XOForm_1r<31, 40, 0, (outs g8rc:$rT), (ins g8rc:$rA, g8rc:$rB),
|
||||
"subf", "$rT, $rA, $rB", IIC_IntGeneral,
|
||||
[(set i64:$rT, (sub i64:$rB, i64:$rA))]>;
|
||||
defm SUBF8 : XOForm_1rx<31, 40, 0, (outs g8rc:$rT), (ins g8rc:$rA, g8rc:$rB),
|
||||
"subf", "$rT, $rA, $rB", IIC_IntGeneral,
|
||||
[(set i64:$rT, (sub i64:$rB, i64:$rA))]>;
|
||||
defm NEG8 : XOForm_3r<31, 104, 0, (outs g8rc:$rT), (ins g8rc:$rA),
|
||||
"neg", "$rT, $rA", IIC_IntSimple,
|
||||
[(set i64:$rT, (ineg i64:$rA))]>;
|
||||
@ -777,10 +777,10 @@ defm DIVD : XOForm_1rcr<31, 489, 0, (outs g8rc:$rT), (ins g8rc:$rA, g8rc:$rB),
|
||||
defm DIVDU : XOForm_1rcr<31, 457, 0, (outs g8rc:$rT), (ins g8rc:$rA, g8rc:$rB),
|
||||
"divdu", "$rT, $rA, $rB", IIC_IntDivD,
|
||||
[(set i64:$rT, (udiv i64:$rA, i64:$rB))]>, isPPC64;
|
||||
def DIVDE : XOForm_1<31, 425, 0, (outs g8rc:$rT), (ins g8rc:$rA, g8rc:$rB),
|
||||
"divde $rT, $rA, $rB", IIC_IntDivD,
|
||||
[(set i64:$rT, (int_ppc_divde g8rc:$rA, g8rc:$rB))]>,
|
||||
isPPC64, Requires<[HasExtDiv]>;
|
||||
defm DIVDE : XOForm_1rcr<31, 425, 0, (outs g8rc:$rT), (ins g8rc:$rA, g8rc:$rB),
|
||||
"divde", "$rT, $rA, $rB", IIC_IntDivD,
|
||||
[(set i64:$rT, (int_ppc_divde g8rc:$rA, g8rc:$rB))]>,
|
||||
isPPC64, Requires<[HasExtDiv]>;
|
||||
|
||||
let Predicates = [IsISA3_0] in {
|
||||
def MADDHD : VAForm_1a<48, (outs g8rc :$RT), (ins g8rc:$RA, g8rc:$RB, g8rc:$RC),
|
||||
@ -815,24 +815,14 @@ def MODUD : XForm_8<31, 265, (outs g8rc:$rT), (ins g8rc:$rA, g8rc:$rB),
|
||||
[(set i64:$rT, (urem i64:$rA, i64:$rB))]>;
|
||||
}
|
||||
|
||||
let Defs = [CR0] in
|
||||
def DIVDEo : XOForm_1<31, 425, 0, (outs g8rc:$rT), (ins g8rc:$rA, g8rc:$rB),
|
||||
"divde. $rT, $rA, $rB", IIC_IntDivD,
|
||||
[]>, isDOT, PPC970_DGroup_Cracked, PPC970_DGroup_First,
|
||||
isPPC64, Requires<[HasExtDiv]>;
|
||||
def DIVDEU : XOForm_1<31, 393, 0, (outs g8rc:$rT), (ins g8rc:$rA, g8rc:$rB),
|
||||
"divdeu $rT, $rA, $rB", IIC_IntDivD,
|
||||
[(set i64:$rT, (int_ppc_divdeu g8rc:$rA, g8rc:$rB))]>,
|
||||
isPPC64, Requires<[HasExtDiv]>;
|
||||
let Defs = [CR0] in
|
||||
def DIVDEUo : XOForm_1<31, 393, 0, (outs g8rc:$rT), (ins g8rc:$rA, g8rc:$rB),
|
||||
"divdeu. $rT, $rA, $rB", IIC_IntDivD,
|
||||
[]>, isDOT, PPC970_DGroup_Cracked, PPC970_DGroup_First,
|
||||
isPPC64, Requires<[HasExtDiv]>;
|
||||
defm DIVDEU : XOForm_1rcr<31, 393, 0, (outs g8rc:$rT), (ins g8rc:$rA, g8rc:$rB),
|
||||
"divdeu", "$rT, $rA, $rB", IIC_IntDivD,
|
||||
[(set i64:$rT, (int_ppc_divdeu g8rc:$rA, g8rc:$rB))]>,
|
||||
isPPC64, Requires<[HasExtDiv]>;
|
||||
let isCommutable = 1 in
|
||||
defm MULLD : XOForm_1r<31, 233, 0, (outs g8rc:$rT), (ins g8rc:$rA, g8rc:$rB),
|
||||
"mulld", "$rT, $rA, $rB", IIC_IntMulHD,
|
||||
[(set i64:$rT, (mul i64:$rA, i64:$rB))]>, isPPC64;
|
||||
defm MULLD : XOForm_1rx<31, 233, 0, (outs g8rc:$rT), (ins g8rc:$rA, g8rc:$rB),
|
||||
"mulld", "$rT, $rA, $rB", IIC_IntMulHD,
|
||||
[(set i64:$rT, (mul i64:$rA, i64:$rB))]>, isPPC64;
|
||||
let Interpretation64Bit = 1, isCodeGenOnly = 1 in
|
||||
def MULLI8 : DForm_2<7, (outs g8rc:$rD), (ins g8rc:$rA, s16imm64:$imm),
|
||||
"mulli $rD, $rA, $imm", IIC_IntMulLI,
|
||||
|
@ -1023,6 +1023,32 @@ multiclass XOForm_1r<bits<6> opcode, bits<9> xo, bit oe, dag OOL, dag IOL,
|
||||
}
|
||||
}
|
||||
|
||||
// Multiclass for instructions which have a record overflow form as well
|
||||
// as a record form but no carry (i.e. mulld, mulldo, subf, subfo, etc.)
|
||||
multiclass XOForm_1rx<bits<6> opcode, bits<9> xo, bit oe, dag OOL, dag IOL,
|
||||
string asmbase, string asmstr, InstrItinClass itin,
|
||||
list<dag> pattern> {
|
||||
let BaseName = asmbase in {
|
||||
def NAME : XOForm_1<opcode, xo, 0, OOL, IOL,
|
||||
!strconcat(asmbase, !strconcat(" ", asmstr)), itin,
|
||||
pattern>, RecFormRel;
|
||||
let Defs = [CR0] in
|
||||
def o : XOForm_1<opcode, xo, 0, OOL, IOL,
|
||||
!strconcat(asmbase, !strconcat(". ", asmstr)), itin,
|
||||
[]>, isDOT, RecFormRel;
|
||||
}
|
||||
let BaseName = !strconcat(asmbase, "O") in {
|
||||
let Defs = [XER] in
|
||||
def O : XOForm_1<opcode, xo, 1, OOL, IOL,
|
||||
!strconcat(asmbase, !strconcat("o ", asmstr)), itin,
|
||||
[]>, RecFormRel;
|
||||
let Defs = [XER, CR0] in
|
||||
def Oo : XOForm_1<opcode, xo, 1, OOL, IOL,
|
||||
!strconcat(asmbase, !strconcat("o. ", asmstr)), itin,
|
||||
[]>, isDOT, RecFormRel;
|
||||
}
|
||||
}
|
||||
|
||||
// Multiclass for instructions for which the non record form is not cracked
|
||||
// and the record form is cracked (i.e. divw, mullw, etc.)
|
||||
multiclass XOForm_1rcr<bits<6> opcode, bits<9> xo, bit oe, dag OOL, dag IOL,
|
||||
@ -1038,6 +1064,16 @@ multiclass XOForm_1rcr<bits<6> opcode, bits<9> xo, bit oe, dag OOL, dag IOL,
|
||||
[]>, isDOT, RecFormRel, PPC970_DGroup_First,
|
||||
PPC970_DGroup_Cracked;
|
||||
}
|
||||
let BaseName = !strconcat(asmbase, "O") in {
|
||||
let Defs = [XER] in
|
||||
def O : XOForm_1<opcode, xo, 1, OOL, IOL,
|
||||
!strconcat(asmbase, !strconcat("o ", asmstr)), itin,
|
||||
[]>, RecFormRel;
|
||||
let Defs = [XER, CR0] in
|
||||
def Oo : XOForm_1<opcode, xo, 1, OOL, IOL,
|
||||
!strconcat(asmbase, !strconcat("o. ", asmstr)), itin,
|
||||
[]>, isDOT, RecFormRel;
|
||||
}
|
||||
}
|
||||
|
||||
multiclass XOForm_1rc<bits<6> opcode, bits<9> xo, bit oe, dag OOL, dag IOL,
|
||||
@ -1053,6 +1089,16 @@ multiclass XOForm_1rc<bits<6> opcode, bits<9> xo, bit oe, dag OOL, dag IOL,
|
||||
!strconcat(asmbase, !strconcat(". ", asmstr)), itin,
|
||||
[]>, isDOT, RecFormRel;
|
||||
}
|
||||
let BaseName = !strconcat(asmbase, "O") in {
|
||||
let Defs = [CARRY, XER] in
|
||||
def O : XOForm_1<opcode, xo, 1, OOL, IOL,
|
||||
!strconcat(asmbase, !strconcat("o ", asmstr)), itin,
|
||||
[]>, RecFormRel;
|
||||
let Defs = [CARRY, XER, CR0] in
|
||||
def Oo : XOForm_1<opcode, xo, 1, OOL, IOL,
|
||||
!strconcat(asmbase, !strconcat("o. ", asmstr)), itin,
|
||||
[]>, isDOT, RecFormRel;
|
||||
}
|
||||
}
|
||||
|
||||
multiclass XOForm_3r<bits<6> opcode, bits<9> xo, bit oe, dag OOL, dag IOL,
|
||||
@ -1067,6 +1113,16 @@ multiclass XOForm_3r<bits<6> opcode, bits<9> xo, bit oe, dag OOL, dag IOL,
|
||||
!strconcat(asmbase, !strconcat(". ", asmstr)), itin,
|
||||
[]>, isDOT, RecFormRel;
|
||||
}
|
||||
let BaseName = !strconcat(asmbase, "O") in {
|
||||
let Defs = [XER] in
|
||||
def O : XOForm_3<opcode, xo, 1, OOL, IOL,
|
||||
!strconcat(asmbase, !strconcat("o ", asmstr)), itin,
|
||||
[]>, RecFormRel;
|
||||
let Defs = [XER, CR0] in
|
||||
def Oo : XOForm_3<opcode, xo, 1, OOL, IOL,
|
||||
!strconcat(asmbase, !strconcat("o. ", asmstr)), itin,
|
||||
[]>, isDOT, RecFormRel;
|
||||
}
|
||||
}
|
||||
|
||||
multiclass XOForm_3rc<bits<6> opcode, bits<9> xo, bit oe, dag OOL, dag IOL,
|
||||
@ -1082,6 +1138,16 @@ multiclass XOForm_3rc<bits<6> opcode, bits<9> xo, bit oe, dag OOL, dag IOL,
|
||||
!strconcat(asmbase, !strconcat(". ", asmstr)), itin,
|
||||
[]>, isDOT, RecFormRel;
|
||||
}
|
||||
let BaseName = !strconcat(asmbase, "O") in {
|
||||
let Defs = [CARRY, XER] in
|
||||
def O : XOForm_3<opcode, xo, 1, OOL, IOL,
|
||||
!strconcat(asmbase, !strconcat("o ", asmstr)), itin,
|
||||
[]>, RecFormRel;
|
||||
let Defs = [CARRY, XER, CR0] in
|
||||
def Oo : XOForm_3<opcode, xo, 1, OOL, IOL,
|
||||
!strconcat(asmbase, !strconcat("o. ", asmstr)), itin,
|
||||
[]>, isDOT, RecFormRel;
|
||||
}
|
||||
}
|
||||
|
||||
multiclass MForm_2r<bits<6> opcode, dag OOL, dag IOL,
|
||||
@ -2776,9 +2842,9 @@ def MODUW : XForm_8<31, 267, (outs gprc:$rT), (ins gprc:$rA, gprc:$rB),
|
||||
let PPC970_Unit = 1, hasSideEffects = 0 in { // FXU Operations.
|
||||
// XO-Form instructions. Arithmetic instructions that can set overflow bit
|
||||
let isCommutable = 1 in
|
||||
defm ADD4 : XOForm_1r<31, 266, 0, (outs gprc:$rT), (ins gprc:$rA, gprc:$rB),
|
||||
"add", "$rT, $rA, $rB", IIC_IntSimple,
|
||||
[(set i32:$rT, (add i32:$rA, i32:$rB))]>;
|
||||
defm ADD4 : XOForm_1rx<31, 266, 0, (outs gprc:$rT), (ins gprc:$rA, gprc:$rB),
|
||||
"add", "$rT, $rA, $rB", IIC_IntSimple,
|
||||
[(set i32:$rT, (add i32:$rA, i32:$rB))]>;
|
||||
let isCodeGenOnly = 1 in
|
||||
def ADD4TLS : XOForm_1<31, 266, 0, (outs gprc:$rT), (ins gprc:$rA, tlsreg32:$rB),
|
||||
"add $rT, $rA, $rB", IIC_IntSimple,
|
||||
@ -2795,24 +2861,14 @@ defm DIVW : XOForm_1rcr<31, 491, 0, (outs gprc:$rT), (ins gprc:$rA, gprc:$rB),
|
||||
defm DIVWU : XOForm_1rcr<31, 459, 0, (outs gprc:$rT), (ins gprc:$rA, gprc:$rB),
|
||||
"divwu", "$rT, $rA, $rB", IIC_IntDivW,
|
||||
[(set i32:$rT, (udiv i32:$rA, i32:$rB))]>;
|
||||
def DIVWE : XOForm_1<31, 427, 0, (outs gprc:$rT), (ins gprc:$rA, gprc:$rB),
|
||||
"divwe $rT, $rA, $rB", IIC_IntDivW,
|
||||
[(set i32:$rT, (int_ppc_divwe gprc:$rA, gprc:$rB))]>,
|
||||
Requires<[HasExtDiv]>;
|
||||
let Defs = [CR0] in
|
||||
def DIVWEo : XOForm_1<31, 427, 0, (outs gprc:$rT), (ins gprc:$rA, gprc:$rB),
|
||||
"divwe. $rT, $rA, $rB", IIC_IntDivW,
|
||||
[]>, isDOT, PPC970_DGroup_Cracked, PPC970_DGroup_First,
|
||||
Requires<[HasExtDiv]>;
|
||||
def DIVWEU : XOForm_1<31, 395, 0, (outs gprc:$rT), (ins gprc:$rA, gprc:$rB),
|
||||
"divweu $rT, $rA, $rB", IIC_IntDivW,
|
||||
[(set i32:$rT, (int_ppc_divweu gprc:$rA, gprc:$rB))]>,
|
||||
Requires<[HasExtDiv]>;
|
||||
let Defs = [CR0] in
|
||||
def DIVWEUo : XOForm_1<31, 395, 0, (outs gprc:$rT), (ins gprc:$rA, gprc:$rB),
|
||||
"divweu. $rT, $rA, $rB", IIC_IntDivW,
|
||||
[]>, isDOT, PPC970_DGroup_Cracked, PPC970_DGroup_First,
|
||||
Requires<[HasExtDiv]>;
|
||||
defm DIVWE : XOForm_1rcr<31, 427, 0, (outs gprc:$rT), (ins gprc:$rA, gprc:$rB),
|
||||
"divwe", "$rT, $rA, $rB", IIC_IntDivW,
|
||||
[(set i32:$rT, (int_ppc_divwe gprc:$rA, gprc:$rB))]>,
|
||||
Requires<[HasExtDiv]>;
|
||||
defm DIVWEU : XOForm_1rcr<31, 395, 0, (outs gprc:$rT), (ins gprc:$rA, gprc:$rB),
|
||||
"divweu", "$rT, $rA, $rB", IIC_IntDivW,
|
||||
[(set i32:$rT, (int_ppc_divweu gprc:$rA, gprc:$rB))]>,
|
||||
Requires<[HasExtDiv]>;
|
||||
let isCommutable = 1 in {
|
||||
defm MULHW : XOForm_1r<31, 75, 0, (outs gprc:$rT), (ins gprc:$rA, gprc:$rB),
|
||||
"mulhw", "$rT, $rA, $rB", IIC_IntMulHW,
|
||||
@ -2820,13 +2876,13 @@ defm MULHW : XOForm_1r<31, 75, 0, (outs gprc:$rT), (ins gprc:$rA, gprc:$rB),
|
||||
defm MULHWU : XOForm_1r<31, 11, 0, (outs gprc:$rT), (ins gprc:$rA, gprc:$rB),
|
||||
"mulhwu", "$rT, $rA, $rB", IIC_IntMulHWU,
|
||||
[(set i32:$rT, (mulhu i32:$rA, i32:$rB))]>;
|
||||
defm MULLW : XOForm_1r<31, 235, 0, (outs gprc:$rT), (ins gprc:$rA, gprc:$rB),
|
||||
"mullw", "$rT, $rA, $rB", IIC_IntMulHW,
|
||||
[(set i32:$rT, (mul i32:$rA, i32:$rB))]>;
|
||||
defm MULLW : XOForm_1rx<31, 235, 0, (outs gprc:$rT), (ins gprc:$rA, gprc:$rB),
|
||||
"mullw", "$rT, $rA, $rB", IIC_IntMulHW,
|
||||
[(set i32:$rT, (mul i32:$rA, i32:$rB))]>;
|
||||
} // isCommutable
|
||||
defm SUBF : XOForm_1r<31, 40, 0, (outs gprc:$rT), (ins gprc:$rA, gprc:$rB),
|
||||
"subf", "$rT, $rA, $rB", IIC_IntGeneral,
|
||||
[(set i32:$rT, (sub i32:$rB, i32:$rA))]>;
|
||||
defm SUBF : XOForm_1rx<31, 40, 0, (outs gprc:$rT), (ins gprc:$rA, gprc:$rB),
|
||||
"subf", "$rT, $rA, $rB", IIC_IntGeneral,
|
||||
[(set i32:$rT, (sub i32:$rB, i32:$rA))]>;
|
||||
defm SUBFC : XOForm_1rc<31, 8, 0, (outs gprc:$rT), (ins gprc:$rA, gprc:$rB),
|
||||
"subfc", "$rT, $rA, $rB", IIC_IntGeneral,
|
||||
[(set i32:$rT, (subc i32:$rB, i32:$rA))]>,
|
||||
|
@ -52,6 +52,12 @@ struct RISCVRegisterInfo : public RISCVGenRegisterInfo {
|
||||
bool trackLivenessAfterRegAlloc(const MachineFunction &) const override {
|
||||
return true;
|
||||
}
|
||||
|
||||
const TargetRegisterClass *
|
||||
getPointerRegClass(const MachineFunction &MF,
|
||||
unsigned Kind = 0) const override {
|
||||
return &RISCV::GPRRegClass;
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
|
@ -121,10 +121,3 @@ def : Pat<(select (i32 (seteq I32:$cond, 0)), F32:$lhs, F32:$rhs),
|
||||
(SELECT_F32 F32:$rhs, F32:$lhs, I32:$cond)>;
|
||||
def : Pat<(select (i32 (seteq I32:$cond, 0)), F64:$lhs, F64:$rhs),
|
||||
(SELECT_F64 F64:$rhs, F64:$lhs, I32:$cond)>;
|
||||
|
||||
// The legalizer inserts an unnecessary `and 1` to make input conform
|
||||
// to getBooleanContents, which we can lower away.
|
||||
def : Pat<(select (i32 (and I32:$cond, 1)), F32:$lhs, F32:$rhs),
|
||||
(SELECT_F32 F32:$lhs, F32:$rhs, I32:$cond)>;
|
||||
def : Pat<(select (i32 (and I32:$cond, 1)), F64:$lhs, F64:$rhs),
|
||||
(SELECT_F64 F64:$lhs, F64:$rhs, I32:$cond)>;
|
||||
|
@ -1396,9 +1396,13 @@ void X86FrameLowering::emitPrologue(MachineFunction &MF,
|
||||
int FI;
|
||||
if (unsigned Reg = TII.isStoreToStackSlot(FrameInstr, FI)) {
|
||||
if (X86::FR64RegClass.contains(Reg)) {
|
||||
int Offset;
|
||||
unsigned IgnoredFrameReg;
|
||||
int Offset = getFrameIndexReference(MF, FI, IgnoredFrameReg);
|
||||
Offset += SEHFrameOffset;
|
||||
if (IsWin64Prologue && IsFunclet)
|
||||
Offset = getWin64EHFrameIndexRef(MF, FI, IgnoredFrameReg);
|
||||
else
|
||||
Offset = getFrameIndexReference(MF, FI, IgnoredFrameReg) +
|
||||
SEHFrameOffset;
|
||||
|
||||
HasWinCFI = true;
|
||||
assert(!NeedsWinFPO && "SEH_SaveXMM incompatible with FPO data");
|
||||
@ -1554,9 +1558,13 @@ X86FrameLowering::getPSPSlotOffsetFromSP(const MachineFunction &MF) const {
|
||||
|
||||
unsigned
|
||||
X86FrameLowering::getWinEHFuncletFrameSize(const MachineFunction &MF) const {
|
||||
const X86MachineFunctionInfo *X86FI = MF.getInfo<X86MachineFunctionInfo>();
|
||||
// This is the size of the pushed CSRs.
|
||||
unsigned CSSize =
|
||||
MF.getInfo<X86MachineFunctionInfo>()->getCalleeSavedFrameSize();
|
||||
unsigned CSSize = X86FI->getCalleeSavedFrameSize();
|
||||
// This is the size of callee saved XMMs.
|
||||
const auto& WinEHXMMSlotInfo = X86FI->getWinEHXMMSlotInfo();
|
||||
unsigned XMMSize = WinEHXMMSlotInfo.size() *
|
||||
TRI->getSpillSize(X86::VR128RegClass);
|
||||
// This is the amount of stack a funclet needs to allocate.
|
||||
unsigned UsedSize;
|
||||
EHPersonality Personality =
|
||||
@ -1576,7 +1584,7 @@ X86FrameLowering::getWinEHFuncletFrameSize(const MachineFunction &MF) const {
|
||||
unsigned FrameSizeMinusRBP = alignTo(CSSize + UsedSize, getStackAlignment());
|
||||
// Subtract out the size of the callee saved registers. This is how much stack
|
||||
// each funclet will allocate.
|
||||
return FrameSizeMinusRBP - CSSize;
|
||||
return FrameSizeMinusRBP + XMMSize - CSSize;
|
||||
}
|
||||
|
||||
static bool isTailCallOpcode(unsigned Opc) {
|
||||
@ -1850,6 +1858,20 @@ int X86FrameLowering::getFrameIndexReference(const MachineFunction &MF, int FI,
|
||||
return Offset + FPDelta;
|
||||
}
|
||||
|
||||
int X86FrameLowering::getWin64EHFrameIndexRef(const MachineFunction &MF,
|
||||
int FI, unsigned &FrameReg) const {
|
||||
const MachineFrameInfo &MFI = MF.getFrameInfo();
|
||||
const X86MachineFunctionInfo *X86FI = MF.getInfo<X86MachineFunctionInfo>();
|
||||
const auto& WinEHXMMSlotInfo = X86FI->getWinEHXMMSlotInfo();
|
||||
const auto it = WinEHXMMSlotInfo.find(FI);
|
||||
|
||||
if (it == WinEHXMMSlotInfo.end())
|
||||
return getFrameIndexReference(MF, FI, FrameReg);
|
||||
|
||||
FrameReg = TRI->getStackRegister();
|
||||
return alignDown(MFI.getMaxCallFrameSize(), getStackAlignment()) + it->second;
|
||||
}
|
||||
|
||||
int X86FrameLowering::getFrameIndexReferenceSP(const MachineFunction &MF,
|
||||
int FI, unsigned &FrameReg,
|
||||
int Adjustment) const {
|
||||
@ -1948,6 +1970,8 @@ bool X86FrameLowering::assignCalleeSavedSpillSlots(
|
||||
X86MachineFunctionInfo *X86FI = MF.getInfo<X86MachineFunctionInfo>();
|
||||
|
||||
unsigned CalleeSavedFrameSize = 0;
|
||||
unsigned XMMCalleeSavedFrameSize = 0;
|
||||
auto &WinEHXMMSlotInfo = X86FI->getWinEHXMMSlotInfo();
|
||||
int SpillSlotOffset = getOffsetOfLocalArea() + X86FI->getTCReturnAddrDelta();
|
||||
|
||||
int64_t TailCallReturnAddrDelta = X86FI->getTCReturnAddrDelta();
|
||||
@ -2025,12 +2049,20 @@ bool X86FrameLowering::assignCalleeSavedSpillSlots(
|
||||
unsigned Size = TRI->getSpillSize(*RC);
|
||||
unsigned Align = TRI->getSpillAlignment(*RC);
|
||||
// ensure alignment
|
||||
SpillSlotOffset -= std::abs(SpillSlotOffset) % Align;
|
||||
assert(SpillSlotOffset < 0 && "SpillSlotOffset should always < 0 on X86");
|
||||
SpillSlotOffset = -alignTo(-SpillSlotOffset, Align);
|
||||
|
||||
// spill into slot
|
||||
SpillSlotOffset -= Size;
|
||||
int SlotIndex = MFI.CreateFixedSpillStackObject(Size, SpillSlotOffset);
|
||||
CSI[i - 1].setFrameIdx(SlotIndex);
|
||||
MFI.ensureMaxAlignment(Align);
|
||||
|
||||
// Save the start offset and size of XMM in stack frame for funclets.
|
||||
if (X86::VR128RegClass.contains(Reg)) {
|
||||
WinEHXMMSlotInfo[SlotIndex] = XMMCalleeSavedFrameSize;
|
||||
XMMCalleeSavedFrameSize += Size;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
|
@ -99,6 +99,8 @@ public:
|
||||
int getFrameIndexReference(const MachineFunction &MF, int FI,
|
||||
unsigned &FrameReg) const override;
|
||||
|
||||
int getWin64EHFrameIndexRef(const MachineFunction &MF,
|
||||
int FI, unsigned &SPReg) const;
|
||||
int getFrameIndexReferenceSP(const MachineFunction &MF,
|
||||
int FI, unsigned &SPReg, int Adjustment) const;
|
||||
int getFrameIndexReferencePreferSP(const MachineFunction &MF, int FI,
|
||||
|
@ -1085,6 +1085,8 @@ X86InstrInfo::convertToThreeAddress(MachineFunction::iterator &MFI,
|
||||
return nullptr;
|
||||
case X86::SUB32ri8:
|
||||
case X86::SUB32ri: {
|
||||
if (!MI.getOperand(2).isImm())
|
||||
return nullptr;
|
||||
int64_t Imm = MI.getOperand(2).getImm();
|
||||
if (!isInt<32>(-Imm))
|
||||
return nullptr;
|
||||
@ -1111,6 +1113,8 @@ X86InstrInfo::convertToThreeAddress(MachineFunction::iterator &MFI,
|
||||
|
||||
case X86::SUB64ri8:
|
||||
case X86::SUB64ri32: {
|
||||
if (!MI.getOperand(2).isImm())
|
||||
return nullptr;
|
||||
int64_t Imm = MI.getOperand(2).getImm();
|
||||
if (!isInt<32>(-Imm))
|
||||
return nullptr;
|
||||
|
@ -36,6 +36,10 @@ class X86MachineFunctionInfo : public MachineFunctionInfo {
|
||||
/// is stashed.
|
||||
signed char RestoreBasePointerOffset = 0;
|
||||
|
||||
/// WinEHXMMSlotInfo - Slot information of XMM registers in the stack frame
|
||||
/// in bytes.
|
||||
DenseMap<int, unsigned> WinEHXMMSlotInfo;
|
||||
|
||||
/// CalleeSavedFrameSize - Size of the callee-saved register portion of the
|
||||
/// stack frame in bytes.
|
||||
unsigned CalleeSavedFrameSize = 0;
|
||||
@ -120,6 +124,10 @@ public:
|
||||
void setRestoreBasePointer(const MachineFunction *MF);
|
||||
int getRestoreBasePointerOffset() const {return RestoreBasePointerOffset; }
|
||||
|
||||
DenseMap<int, unsigned>& getWinEHXMMSlotInfo() { return WinEHXMMSlotInfo; }
|
||||
const DenseMap<int, unsigned>& getWinEHXMMSlotInfo() const {
|
||||
return WinEHXMMSlotInfo; }
|
||||
|
||||
unsigned getCalleeSavedFrameSize() const { return CalleeSavedFrameSize; }
|
||||
void setCalleeSavedFrameSize(unsigned bytes) { CalleeSavedFrameSize = bytes; }
|
||||
|
||||
|
@ -692,12 +692,27 @@ static bool tryOptimizeLEAtoMOV(MachineBasicBlock::iterator II) {
|
||||
return true;
|
||||
}
|
||||
|
||||
static bool isFuncletReturnInstr(MachineInstr &MI) {
|
||||
switch (MI.getOpcode()) {
|
||||
case X86::CATCHRET:
|
||||
case X86::CLEANUPRET:
|
||||
return true;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
llvm_unreachable("impossible");
|
||||
}
|
||||
|
||||
void
|
||||
X86RegisterInfo::eliminateFrameIndex(MachineBasicBlock::iterator II,
|
||||
int SPAdj, unsigned FIOperandNum,
|
||||
RegScavenger *RS) const {
|
||||
MachineInstr &MI = *II;
|
||||
MachineFunction &MF = *MI.getParent()->getParent();
|
||||
MachineBasicBlock &MBB = *MI.getParent();
|
||||
MachineFunction &MF = *MBB.getParent();
|
||||
MachineBasicBlock::iterator MBBI = MBB.getFirstTerminator();
|
||||
bool IsEHFuncletEpilogue = MBBI == MBB.end() ? false
|
||||
: isFuncletReturnInstr(*MBBI);
|
||||
const X86FrameLowering *TFI = getFrameLowering(MF);
|
||||
int FrameIndex = MI.getOperand(FIOperandNum).getIndex();
|
||||
|
||||
@ -709,6 +724,8 @@ X86RegisterInfo::eliminateFrameIndex(MachineBasicBlock::iterator II,
|
||||
MF.getFrameInfo().isFixedObjectIndex(FrameIndex)) &&
|
||||
"Return instruction can only reference SP relative frame objects");
|
||||
FIOffset = TFI->getFrameIndexReferenceSP(MF, FrameIndex, BasePtr, 0);
|
||||
} else if (TFI->Is64Bit && (MBB.isEHFuncletEntry() || IsEHFuncletEpilogue)) {
|
||||
FIOffset = TFI->getWin64EHFrameIndexRef(MF, FrameIndex, BasePtr);
|
||||
} else {
|
||||
FIOffset = TFI->getFrameIndexReference(MF, FrameIndex, BasePtr);
|
||||
}
|
||||
|
@ -677,7 +677,7 @@ private:
|
||||
FunctionCallee AsanMemmove, AsanMemcpy, AsanMemset;
|
||||
InlineAsm *EmptyAsm;
|
||||
Value *LocalDynamicShadow = nullptr;
|
||||
GlobalsMetadata GlobalsMD;
|
||||
const GlobalsMetadata &GlobalsMD;
|
||||
DenseMap<const AllocaInst *, bool> ProcessedAllocas;
|
||||
};
|
||||
|
||||
@ -783,7 +783,7 @@ private:
|
||||
}
|
||||
int GetAsanVersion(const Module &M) const;
|
||||
|
||||
GlobalsMetadata GlobalsMD;
|
||||
const GlobalsMetadata &GlobalsMD;
|
||||
bool CompileKernel;
|
||||
bool Recover;
|
||||
bool UseGlobalsGC;
|
||||
|
@ -731,9 +731,8 @@ InstrProfiling::getOrCreateRegionCounters(InstrProfIncrementInst *Inc) {
|
||||
PD = It->second;
|
||||
}
|
||||
|
||||
// Match the linkage and visibility of the name global, except on COFF, where
|
||||
// the linkage must be local and consequentially the visibility must be
|
||||
// default.
|
||||
// Match the linkage and visibility of the name global. COFF supports using
|
||||
// comdats with internal symbols, so do that if we can.
|
||||
Function *Fn = Inc->getParent()->getParent();
|
||||
GlobalValue::LinkageTypes Linkage = NamePtr->getLinkage();
|
||||
GlobalValue::VisibilityTypes Visibility = NamePtr->getVisibility();
|
||||
@ -749,19 +748,25 @@ InstrProfiling::getOrCreateRegionCounters(InstrProfIncrementInst *Inc) {
|
||||
// new comdat group for the counters and profiling data. If we use the comdat
|
||||
// of the parent function, that will result in relocations against discarded
|
||||
// sections.
|
||||
Comdat *Cmdt = nullptr;
|
||||
GlobalValue::LinkageTypes CounterLinkage = Linkage;
|
||||
if (needsComdatForCounter(*Fn, *M)) {
|
||||
StringRef CmdtPrefix = getInstrProfComdatPrefix();
|
||||
bool NeedComdat = needsComdatForCounter(*Fn, *M);
|
||||
Comdat *Cmdt = nullptr; // Comdat group.
|
||||
if (NeedComdat) {
|
||||
if (TT.isOSBinFormatCOFF()) {
|
||||
// For COFF, the comdat group name must be the name of a symbol in the
|
||||
// group. Use the counter variable name, and upgrade its linkage to
|
||||
// something externally visible, like linkonce_odr.
|
||||
CmdtPrefix = getInstrProfCountersVarPrefix();
|
||||
CounterLinkage = GlobalValue::LinkOnceODRLinkage;
|
||||
// For COFF, put the counters, data, and values each into their own
|
||||
// comdats. We can't use a group because the Visual C++ linker will
|
||||
// report duplicate symbol errors if there are multiple external symbols
|
||||
// with the same name marked IMAGE_COMDAT_SELECT_ASSOCIATIVE.
|
||||
Linkage = GlobalValue::LinkOnceODRLinkage;
|
||||
Visibility = GlobalValue::HiddenVisibility;
|
||||
} else {
|
||||
// Otherwise, create one comdat group for everything.
|
||||
Cmdt = M->getOrInsertComdat(getVarName(Inc, getInstrProfComdatPrefix()));
|
||||
}
|
||||
Cmdt = M->getOrInsertComdat(getVarName(Inc, CmdtPrefix));
|
||||
}
|
||||
auto MaybeSetComdat = [=](GlobalVariable *GV) {
|
||||
if (NeedComdat)
|
||||
GV->setComdat(Cmdt ? Cmdt : M->getOrInsertComdat(GV->getName()));
|
||||
};
|
||||
|
||||
uint64_t NumCounters = Inc->getNumCounters()->getZExtValue();
|
||||
LLVMContext &Ctx = M->getContext();
|
||||
@ -776,8 +781,8 @@ InstrProfiling::getOrCreateRegionCounters(InstrProfIncrementInst *Inc) {
|
||||
CounterPtr->setSection(
|
||||
getInstrProfSectionName(IPSK_cnts, TT.getObjectFormat()));
|
||||
CounterPtr->setAlignment(8);
|
||||
CounterPtr->setComdat(Cmdt);
|
||||
CounterPtr->setLinkage(CounterLinkage);
|
||||
MaybeSetComdat(CounterPtr);
|
||||
CounterPtr->setLinkage(Linkage);
|
||||
|
||||
auto *Int8PtrTy = Type::getInt8PtrTy(Ctx);
|
||||
// Allocate statically the array of pointers to value profile nodes for
|
||||
@ -798,7 +803,7 @@ InstrProfiling::getOrCreateRegionCounters(InstrProfIncrementInst *Inc) {
|
||||
ValuesVar->setSection(
|
||||
getInstrProfSectionName(IPSK_vals, TT.getObjectFormat()));
|
||||
ValuesVar->setAlignment(8);
|
||||
ValuesVar->setComdat(Cmdt);
|
||||
MaybeSetComdat(ValuesVar);
|
||||
ValuesPtrExpr =
|
||||
ConstantExpr::getBitCast(ValuesVar, Type::getInt8PtrTy(Ctx));
|
||||
}
|
||||
@ -831,7 +836,8 @@ InstrProfiling::getOrCreateRegionCounters(InstrProfIncrementInst *Inc) {
|
||||
Data->setVisibility(Visibility);
|
||||
Data->setSection(getInstrProfSectionName(IPSK_data, TT.getObjectFormat()));
|
||||
Data->setAlignment(INSTR_PROF_DATA_ALIGNMENT);
|
||||
Data->setComdat(Cmdt);
|
||||
MaybeSetComdat(Data);
|
||||
Data->setLinkage(Linkage);
|
||||
|
||||
PD.RegionCounters = CounterPtr;
|
||||
PD.DataVar = Data;
|
||||
|
@ -1522,6 +1522,41 @@ uint32_t GVN::ValueTable::phiTranslate(const BasicBlock *Pred,
|
||||
return NewNum;
|
||||
}
|
||||
|
||||
// Return true if the value number \p Num and NewNum have equal value.
|
||||
// Return false if the result is unknown.
|
||||
bool GVN::ValueTable::areCallValsEqual(uint32_t Num, uint32_t NewNum,
|
||||
const BasicBlock *Pred,
|
||||
const BasicBlock *PhiBlock, GVN &Gvn) {
|
||||
CallInst *Call = nullptr;
|
||||
LeaderTableEntry *Vals = &Gvn.LeaderTable[Num];
|
||||
while (Vals) {
|
||||
Call = dyn_cast<CallInst>(Vals->Val);
|
||||
if (Call && Call->getParent() == PhiBlock)
|
||||
break;
|
||||
Vals = Vals->Next;
|
||||
}
|
||||
|
||||
if (AA->doesNotAccessMemory(Call))
|
||||
return true;
|
||||
|
||||
if (!MD || !AA->onlyReadsMemory(Call))
|
||||
return false;
|
||||
|
||||
MemDepResult local_dep = MD->getDependency(Call);
|
||||
if (!local_dep.isNonLocal())
|
||||
return false;
|
||||
|
||||
const MemoryDependenceResults::NonLocalDepInfo &deps =
|
||||
MD->getNonLocalCallDependency(Call);
|
||||
|
||||
// Check to see if the Call has no function local clobber.
|
||||
for (unsigned i = 0; i < deps.size(); i++) {
|
||||
if (deps[i].getResult().isNonFuncLocal())
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/// Translate value number \p Num using phis, so that it has the values of
|
||||
/// the phis in BB.
|
||||
uint32_t GVN::ValueTable::phiTranslateImpl(const BasicBlock *Pred,
|
||||
@ -1568,8 +1603,11 @@ uint32_t GVN::ValueTable::phiTranslateImpl(const BasicBlock *Pred,
|
||||
}
|
||||
}
|
||||
|
||||
if (uint32_t NewNum = expressionNumbering[Exp])
|
||||
if (uint32_t NewNum = expressionNumbering[Exp]) {
|
||||
if (Exp.opcode == Instruction::Call && NewNum != Num)
|
||||
return areCallValsEqual(Num, NewNum, Pred, PhiBlock, Gvn) ? NewNum : Num;
|
||||
return NewNum;
|
||||
}
|
||||
return Num;
|
||||
}
|
||||
|
||||
|
@ -597,9 +597,13 @@ static bool moveUp(AliasAnalysis &AA, StoreInst *SI, Instruction *P,
|
||||
|
||||
ToLift.push_back(C);
|
||||
for (unsigned k = 0, e = C->getNumOperands(); k != e; ++k)
|
||||
if (auto *A = dyn_cast<Instruction>(C->getOperand(k)))
|
||||
if (A->getParent() == SI->getParent())
|
||||
if (auto *A = dyn_cast<Instruction>(C->getOperand(k))) {
|
||||
if (A->getParent() == SI->getParent()) {
|
||||
// Cannot hoist user of P above P
|
||||
if(A == P) return false;
|
||||
Args.insert(A);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// We made it, we need to lift
|
||||
|
@ -1888,6 +1888,14 @@ static VectorType *isVectorPromotionViable(Partition &P, const DataLayout &DL) {
|
||||
bool HaveCommonEltTy = true;
|
||||
auto CheckCandidateType = [&](Type *Ty) {
|
||||
if (auto *VTy = dyn_cast<VectorType>(Ty)) {
|
||||
// Return if bitcast to vectors is different for total size in bits.
|
||||
if (!CandidateTys.empty()) {
|
||||
VectorType *V = CandidateTys[0];
|
||||
if (DL.getTypeSizeInBits(VTy) != DL.getTypeSizeInBits(V)) {
|
||||
CandidateTys.clear();
|
||||
return;
|
||||
}
|
||||
}
|
||||
CandidateTys.push_back(VTy);
|
||||
if (!CommonEltTy)
|
||||
CommonEltTy = VTy->getElementType();
|
||||
|
@ -504,6 +504,12 @@ static Error replaceAndRemoveSections(const CopyConfig &Config, Object &Obj) {
|
||||
return false;
|
||||
if (StringRef(Sec.Name).startswith(".gnu.warning"))
|
||||
return false;
|
||||
// We keep the .ARM.attribute section to maintain compatibility
|
||||
// with Debian derived distributions. This is a bug in their
|
||||
// patchset as documented here:
|
||||
// https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=943798
|
||||
if (Sec.Type == SHT_ARM_ATTRIBUTES)
|
||||
return false;
|
||||
if (Sec.ParentSegment != nullptr)
|
||||
return false;
|
||||
return (Sec.Flags & SHF_ALLOC) == 0;
|
||||
|
@ -112,7 +112,8 @@ defm set_section_flags
|
||||
|
||||
def strip_all : Flag<["--"], "strip-all">,
|
||||
HelpText<"Remove non-allocated sections outside segments. "
|
||||
".gnu.warning* sections are not removed">;
|
||||
".gnu.warning* and .ARM.attribute sections are not "
|
||||
"removed">;
|
||||
def S : Flag<["-"], "S">, Alias<strip_all>;
|
||||
def strip_all_gnu : Flag<["--"], "strip-all-gnu">,
|
||||
HelpText<"Compatible with GNU objcopy's --strip-all">;
|
||||
|
@ -40,7 +40,8 @@ def p : Flag<["-"], "p">, Alias<preserve_dates>;
|
||||
|
||||
def strip_all : Flag<["--"], "strip-all">,
|
||||
HelpText<"Remove non-allocated sections outside segments. "
|
||||
".gnu.warning* sections are not removed">;
|
||||
".gnu.warning* and .ARM.attribute sections are not "
|
||||
"removed">;
|
||||
def s : Flag<["-"], "s">, Alias<strip_all>;
|
||||
def no_strip_all : Flag<["--"], "no-strip-all">,
|
||||
HelpText<"Disable --strip-all">;
|
||||
|
@ -523,7 +523,6 @@ int main(int argc, char **argv) {
|
||||
initializeDwarfEHPreparePass(Registry);
|
||||
initializeSafeStackLegacyPassPass(Registry);
|
||||
initializeSjLjEHPreparePass(Registry);
|
||||
initializeStackProtectorPass(Registry);
|
||||
initializePreISelIntrinsicLoweringLegacyPassPass(Registry);
|
||||
initializeGlobalMergePass(Registry);
|
||||
initializeIndirectBrExpandPassPass(Registry);
|
||||
|
@ -31,7 +31,7 @@
|
||||
..
|
||||
lib
|
||||
clang
|
||||
9.0.0
|
||||
9.0.1
|
||||
lib
|
||||
freebsd
|
||||
..
|
||||
|
@ -37,7 +37,7 @@
|
||||
aout
|
||||
..
|
||||
clang
|
||||
9.0.0
|
||||
9.0.1
|
||||
include
|
||||
cuda_wrappers
|
||||
..
|
||||
|
@ -1,3 +1,3 @@
|
||||
/* $FreeBSD$ */
|
||||
|
||||
#define FREEBSD_CC_VERSION 1300005
|
||||
#define FREEBSD_CC_VERSION 1300006
|
||||
|
@ -1,3 +1,4 @@
|
||||
|
||||
# $FreeBSD$
|
||||
|
||||
.include "../clang.pre.mk"
|
||||
@ -5,7 +6,7 @@
|
||||
.PATH: ${CLANG_SRCS}/lib/Headers
|
||||
|
||||
INCSGROUPS= INCS CUDA OMP PPC
|
||||
INCSDIR= ${LIBDIR}/clang/9.0.0/include
|
||||
INCSDIR= ${LIBDIR}/clang/9.0.1/include
|
||||
CUDADIR= ${INCSDIR}/cuda_wrappers
|
||||
OMPDIR= ${INCSDIR}/openmp_wrappers
|
||||
PPCDIR= ${INCSDIR}/ppc_wrappers
|
||||
|
@ -1,14 +1,14 @@
|
||||
// $FreeBSD$
|
||||
|
||||
#define LLVM_REVISION "372316"
|
||||
#define LLVM_REPOSITORY "https://llvm.org/svn/llvm-project/llvm/tags/RELEASE_900/final"
|
||||
#define LLVM_REVISION "c1a0a213378a458fbea1a5c77b315c7dce08fd05"
|
||||
#define LLVM_REPOSITORY "git@github.com:llvm/llvm-project.git"
|
||||
|
||||
#define CLANG_REVISION "372316"
|
||||
#define CLANG_REPOSITORY "https://llvm.org/svn/llvm-project/cfe/tags/RELEASE_900/final"
|
||||
#define CLANG_REVISION "c1a0a213378a458fbea1a5c77b315c7dce08fd05"
|
||||
#define CLANG_REPOSITORY "git@github.com:llvm/llvm-project.git"
|
||||
|
||||
// <Upstream revision at import>-<Local identifier in __FreeBSD_version style>
|
||||
#define LLD_REVISION "372316-1300005"
|
||||
#define LLD_REVISION "c1a0a213378a458fbea1a5c77b315c7dce08fd05-1300006"
|
||||
#define LLD_REPOSITORY "FreeBSD"
|
||||
|
||||
#define LLDB_REVISION "372316"
|
||||
#define LLDB_REPOSITORY "https://llvm.org/svn/llvm-project/lldb/tags/RELEASE_900/final"
|
||||
#define LLDB_REVISION "c1a0a213378a458fbea1a5c77b315c7dce08fd05"
|
||||
#define LLDB_REPOSITORY "git@github.com:llvm/llvm-project.git"
|
||||
|
@ -1,9 +1,9 @@
|
||||
/* $FreeBSD$ */
|
||||
|
||||
#define CLANG_VERSION 9.0.0
|
||||
#define CLANG_VERSION_STRING "9.0.0"
|
||||
#define CLANG_VERSION 9.0.1
|
||||
#define CLANG_VERSION_STRING "9.0.1"
|
||||
#define CLANG_VERSION_MAJOR 9
|
||||
#define CLANG_VERSION_MINOR 0
|
||||
#define CLANG_VERSION_PATCHLEVEL 0
|
||||
#define CLANG_VERSION_PATCHLEVEL 1
|
||||
|
||||
#define CLANG_VENDOR "FreeBSD "
|
||||
|
@ -62,7 +62,7 @@
|
||||
#define CLANG_HAVE_RLIMITS 1
|
||||
|
||||
/* The LLVM product name and version */
|
||||
#define BACKEND_PACKAGE_STRING "LLVM 9.0.0"
|
||||
#define BACKEND_PACKAGE_STRING "LLVM 9.0.1"
|
||||
|
||||
/* Linker version detected at compile time. */
|
||||
/* #undef HOST_LINK_VERSION */
|
||||
|
@ -1,6 +1,6 @@
|
||||
// $FreeBSD$
|
||||
|
||||
#define LLD_VERSION 9.0.0
|
||||
#define LLD_VERSION_STRING "9.0.0"
|
||||
#define LLD_VERSION 9.0.1
|
||||
#define LLD_VERSION_STRING "9.0.1"
|
||||
#define LLD_VERSION_MAJOR 9
|
||||
#define LLD_VERSION_MINOR 0
|
||||
|
@ -322,10 +322,10 @@
|
||||
#define PACKAGE_NAME "LLVM"
|
||||
|
||||
/* Define to the full name and version of this package. */
|
||||
#define PACKAGE_STRING "LLVM 9.0.0"
|
||||
#define PACKAGE_STRING "LLVM 9.0.1"
|
||||
|
||||
/* Define to the version of this package. */
|
||||
#define PACKAGE_VERSION "9.0.0"
|
||||
#define PACKAGE_VERSION "9.0.1"
|
||||
|
||||
/* Define to the vendor of this package. */
|
||||
/* #undef PACKAGE_VENDOR */
|
||||
|
@ -73,10 +73,10 @@
|
||||
#define LLVM_VERSION_MINOR 0
|
||||
|
||||
/* Patch version of the LLVM API */
|
||||
#define LLVM_VERSION_PATCH 0
|
||||
#define LLVM_VERSION_PATCH 1
|
||||
|
||||
/* LLVM version string */
|
||||
#define LLVM_VERSION_STRING "9.0.0"
|
||||
#define LLVM_VERSION_STRING "9.0.1"
|
||||
|
||||
/* Whether LLVM records statistics for use with GetStatistics(),
|
||||
* PrintStatistics() or PrintStatisticsJSON()
|
||||
|
@ -1,3 +1,3 @@
|
||||
/* $FreeBSD$ */
|
||||
#define LLVM_REVISION "372316"
|
||||
#define LLVM_REPOSITORY "https://llvm.org/svn/llvm-project/llvm/tags/RELEASE_900/final"
|
||||
#define LLVM_REVISION "c1a0a213378a458fbea1a5c77b315c7dce08fd05"
|
||||
#define LLVM_REPOSITORY "git@github.com:llvm/llvm-project.git"
|
||||
|
@ -14,7 +14,7 @@ CRTSRC= ${SRCTOP}/contrib/llvm-project/compiler-rt
|
||||
|
||||
.PATH: ${CRTSRC}/lib
|
||||
|
||||
CLANGDIR= /usr/lib/clang/9.0.0
|
||||
CLANGDIR= /usr/lib/clang/9.0.1
|
||||
LIBDIR= ${CLANGDIR}/lib/freebsd
|
||||
SHLIBDIR= ${LIBDIR}
|
||||
|
||||
|
@ -1380,257 +1380,256 @@ OLD_FILES+=usr/bin/llvm-objdump
|
||||
OLD_FILES+=usr/bin/llvm-ranlib
|
||||
OLD_FILES+=usr/bin/llvm-symbolizer
|
||||
OLD_FILES+=usr/bin/llvm-tblgen
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/cuda_wrappers/algorithm
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/cuda_wrappers/complex
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/cuda_wrappers/new
|
||||
OLD_DIRS+=usr/lib/clang/9.0.0/include/cuda_wrappers
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/openmp_wrappers/__clang_openmp_math.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/openmp_wrappers/__clang_openmp_math_declares.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/openmp_wrappers/cmath
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/openmp_wrappers/math.h
|
||||
OLD_DIRS+=usr/lib/clang/9.0.0/include/openmp_wrappers
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/ppc_wrappers/emmintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/ppc_wrappers/mm_malloc.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/ppc_wrappers/mmintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/ppc_wrappers/xmmintrin.h
|
||||
OLD_DIRS+=usr/lib/clang/9.0.0/include/ppc_wrappers
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/sanitizer/allocator_interface.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/sanitizer/asan_interface.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/sanitizer/common_interface_defs.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/sanitizer/coverage_interface.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/sanitizer/dfsan_interface.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/sanitizer/hwasan_interface.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/sanitizer/linux_syscall_hooks.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/sanitizer/lsan_interface.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/sanitizer/msan_interface.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/sanitizer/netbsd_syscall_hooks.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/sanitizer/scudo_interface.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/sanitizer/tsan_interface.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/sanitizer/tsan_interface_atomic.h
|
||||
OLD_DIRS+=usr/lib/clang/9.0.0/include/sanitizer
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/__clang_cuda_builtin_vars.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/__clang_cuda_cmath.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/__clang_cuda_complex_builtins.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/__clang_cuda_device_functions.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/__clang_cuda_intrinsics.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/__clang_cuda_libdevice_declares.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/__clang_cuda_math_forward_declares.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/__clang_cuda_runtime_wrapper.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/__stddef_max_align_t.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/__wmmintrin_aes.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/__wmmintrin_pclmul.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/adxintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/altivec.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/ammintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/arm64intr.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/arm_acle.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/arm_fp16.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/arm_neon.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/armintr.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/avx2intrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/avx512bf16intrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/avx512bitalgintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/avx512bwintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/avx512cdintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/avx512dqintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/avx512erintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/avx512fintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/avx512ifmaintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/avx512ifmavlintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/avx512pfintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/avx512vbmi2intrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/avx512vbmiintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/avx512vbmivlintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/avx512vlbf16intrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/avx512vlbitalgintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/avx512vlbwintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/avx512vlcdintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/avx512vldqintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/avx512vlintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/avx512vlvbmi2intrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/avx512vlvnniintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/avx512vlvp2intersectintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/avx512vnniintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/avx512vp2intersectintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/avx512vpopcntdqintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/avx512vpopcntdqvlintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/avxintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/bmi2intrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/bmiintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/cetintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/cldemoteintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/clflushoptintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/clwbintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/clzerointrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/cpuid.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/emmintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/enqcmdintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/f16cintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/float.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/fma4intrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/fmaintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/fxsrintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/gfniintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/htmintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/htmxlintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/ia32intrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/immintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/intrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/inttypes.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/invpcidintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/iso646.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/limits.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/lwpintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/lzcntintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/mm3dnow.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/mm_malloc.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/mmintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/module.modulemap
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/movdirintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/msa.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/mwaitxintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/nmmintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/opencl-c-base.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/opencl-c.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/pconfigintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/pkuintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/pmmintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/popcntintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/prfchwintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/ptwriteintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/rdseedintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/rtmintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/s390intrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/sgxintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/shaintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/smmintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/stdalign.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/stdarg.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/stdatomic.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/stdbool.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/stddef.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/stdint.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/stdnoreturn.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/tbmintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/tgmath.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/tmmintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/unwind.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/vadefs.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/vaesintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/varargs.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/vecintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/vpclmulqdqintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/waitpkgintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/wbnoinvdintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/wmmintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/x86intrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/xmmintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/xopintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/xsavecintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/xsaveintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/xsaveoptintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/xsavesintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/include/xtestintrin.h
|
||||
OLD_DIRS+=usr/lib/clang/9.0.0/include
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.asan-aarch64.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.asan-aarch64.so
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.asan-arm.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.asan-arm.so
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.asan-armhf.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.asan-armhf.so
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.asan-i386.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.asan-i386.so
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.asan-preinit-aarch64.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.asan-preinit-arm.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.asan-preinit-armhf.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.asan-preinit-i386.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.asan-preinit-x86_64.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.asan-x86_64.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.asan-x86_64.so
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.asan_cxx-aarch64.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.asan_cxx-arm.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.asan_cxx-armhf.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.asan_cxx-i386.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.asan_cxx-x86_64.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.cfi-aarch64.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.cfi-arm.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.cfi-armhf.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.cfi-i386.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.cfi-x86_64.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.cfi_diag-aarch64.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.cfi_diag-arm.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.cfi_diag-armhf.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.cfi_diag-i386.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.cfi_diag-x86_64.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.dd-aarch64.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.dd-x86_64.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.fuzzer-aarch64.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.fuzzer-x86_64.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.fuzzer_no_main-aarch64.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.fuzzer_no_main-x86_64.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.msan-aarch64.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.msan-x86_64.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.msan_cxx-aarch64.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.msan_cxx-x86_64.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.profile-aarch64.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.profile-arm.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.profile-armhf.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.profile-i386.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.profile-powerpc.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.profile-powerpc64.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.profile-x86_64.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.safestack-aarch64.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.safestack-i386.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.safestack-x86_64.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.stats-aarch64.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.stats-arm.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.stats-armhf.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.stats-i386.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.stats-x86_64.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.stats_client-aarch64.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.stats_client-arm.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.stats_client-armhf.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.stats_client-i386.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.stats_client-x86_64.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.tsan-aarch64.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.tsan-x86_64.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.tsan_cxx-aarch64.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.tsan_cxx-x86_64.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.ubsan_minimal-aarch64.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.ubsan_minimal-arm.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.ubsan_minimal-armhf.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.ubsan_minimal-i386.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.ubsan_minimal-x86_64.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.ubsan_standalone-aarch64.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.ubsan_standalone-arm.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.ubsan_standalone-armhf.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.ubsan_standalone-i386.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.ubsan_standalone-x86_64.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.ubsan_standalone_cxx-aarch64.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.ubsan_standalone_cxx-arm.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.ubsan_standalone_cxx-armhf.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.ubsan_standalone_cxx-i386.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.ubsan_standalone_cxx-x86_64.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.xray-aarch64.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.xray-arm.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.xray-armhf.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.xray-basic-aarch64.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.xray-basic-arm.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.xray-basic-armhf.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.xray-basic-x86_64.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.xray-fdr-aarch64.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.xray-fdr-arm.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.xray-fdr-armhf.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.xray-fdr-x86_64.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.xray-profiling-aarch64.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.xray-profiling-arm.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.xray-profiling-armhf.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.xray-profiling-x86_64.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.0/lib/freebsd/libclang_rt.xray-x86_64.a
|
||||
|
||||
OLD_DIRS+=usr/lib/clang/9.0.0/lib/freebsd
|
||||
OLD_DIRS+=usr/lib/clang/9.0.0/lib
|
||||
OLD_DIRS+=usr/lib/clang/9.0.0
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/include/cuda_wrappers/algorithm
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/include/cuda_wrappers/complex
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/include/cuda_wrappers/new
|
||||
OLD_DIRS+=usr/lib/clang/9.0.1/include/cuda_wrappers
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/include/openmp_wrappers/__clang_openmp_math.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/include/openmp_wrappers/__clang_openmp_math_declares.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/include/openmp_wrappers/cmath
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/include/openmp_wrappers/math.h
|
||||
OLD_DIRS+=usr/lib/clang/9.0.1/include/openmp_wrappers
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/include/ppc_wrappers/emmintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/include/ppc_wrappers/mm_malloc.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/include/ppc_wrappers/mmintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/include/ppc_wrappers/xmmintrin.h
|
||||
OLD_DIRS+=usr/lib/clang/9.0.1/include/ppc_wrappers
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/include/sanitizer/allocator_interface.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/include/sanitizer/asan_interface.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/include/sanitizer/common_interface_defs.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/include/sanitizer/coverage_interface.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/include/sanitizer/dfsan_interface.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/include/sanitizer/hwasan_interface.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/include/sanitizer/linux_syscall_hooks.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/include/sanitizer/lsan_interface.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/include/sanitizer/msan_interface.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/include/sanitizer/netbsd_syscall_hooks.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/include/sanitizer/scudo_interface.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/include/sanitizer/tsan_interface.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/include/sanitizer/tsan_interface_atomic.h
|
||||
OLD_DIRS+=usr/lib/clang/9.0.1/include/sanitizer
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/include/__clang_cuda_builtin_vars.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/include/__clang_cuda_cmath.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/include/__clang_cuda_complex_builtins.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/include/__clang_cuda_device_functions.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/include/__clang_cuda_intrinsics.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/include/__clang_cuda_libdevice_declares.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/include/__clang_cuda_math_forward_declares.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/include/__clang_cuda_runtime_wrapper.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/include/__stddef_max_align_t.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/include/__wmmintrin_aes.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/include/__wmmintrin_pclmul.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/include/adxintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/include/altivec.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/include/ammintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/include/arm64intr.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/include/arm_acle.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/include/arm_fp16.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/include/arm_neon.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/include/armintr.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/include/avx2intrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/include/avx512bf16intrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/include/avx512bitalgintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/include/avx512bwintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/include/avx512cdintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/include/avx512dqintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/include/avx512erintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/include/avx512fintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/include/avx512ifmaintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/include/avx512ifmavlintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/include/avx512pfintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/include/avx512vbmi2intrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/include/avx512vbmiintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/include/avx512vbmivlintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/include/avx512vlbf16intrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/include/avx512vlbitalgintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/include/avx512vlbwintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/include/avx512vlcdintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/include/avx512vldqintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/include/avx512vlintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/include/avx512vlvbmi2intrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/include/avx512vlvnniintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/include/avx512vlvp2intersectintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/include/avx512vnniintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/include/avx512vp2intersectintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/include/avx512vpopcntdqintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/include/avx512vpopcntdqvlintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/include/avxintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/include/bmi2intrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/include/bmiintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/include/cetintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/include/cldemoteintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/include/clflushoptintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/include/clwbintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/include/clzerointrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/include/cpuid.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/include/emmintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/include/enqcmdintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/include/f16cintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/include/float.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/include/fma4intrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/include/fmaintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/include/fxsrintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/include/gfniintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/include/htmintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/include/htmxlintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/include/ia32intrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/include/immintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/include/intrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/include/inttypes.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/include/invpcidintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/include/iso646.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/include/limits.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/include/lwpintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/include/lzcntintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/include/mm3dnow.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/include/mm_malloc.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/include/mmintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/include/module.modulemap
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/include/movdirintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/include/msa.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/include/mwaitxintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/include/nmmintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/include/opencl-c-base.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/include/opencl-c.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/include/pconfigintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/include/pkuintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/include/pmmintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/include/popcntintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/include/prfchwintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/include/ptwriteintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/include/rdseedintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/include/rtmintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/include/s390intrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/include/sgxintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/include/shaintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/include/smmintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/include/stdalign.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/include/stdarg.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/include/stdatomic.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/include/stdbool.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/include/stddef.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/include/stdint.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/include/stdnoreturn.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/include/tbmintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/include/tgmath.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/include/tmmintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/include/unwind.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/include/vadefs.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/include/vaesintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/include/varargs.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/include/vecintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/include/vpclmulqdqintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/include/waitpkgintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/include/wbnoinvdintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/include/wmmintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/include/x86intrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/include/xmmintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/include/xopintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/include/xsavecintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/include/xsaveintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/include/xsaveoptintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/include/xsavesintrin.h
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/include/xtestintrin.h
|
||||
OLD_DIRS+=usr/lib/clang/9.0.1/include
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/lib/freebsd/libclang_rt.asan-aarch64.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/lib/freebsd/libclang_rt.asan-aarch64.so
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/lib/freebsd/libclang_rt.asan-arm.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/lib/freebsd/libclang_rt.asan-arm.so
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/lib/freebsd/libclang_rt.asan-armhf.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/lib/freebsd/libclang_rt.asan-armhf.so
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/lib/freebsd/libclang_rt.asan-i386.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/lib/freebsd/libclang_rt.asan-i386.so
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/lib/freebsd/libclang_rt.asan-preinit-aarch64.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/lib/freebsd/libclang_rt.asan-preinit-arm.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/lib/freebsd/libclang_rt.asan-preinit-armhf.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/lib/freebsd/libclang_rt.asan-preinit-i386.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/lib/freebsd/libclang_rt.asan-preinit-x86_64.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/lib/freebsd/libclang_rt.asan-x86_64.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/lib/freebsd/libclang_rt.asan-x86_64.so
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/lib/freebsd/libclang_rt.asan_cxx-aarch64.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/lib/freebsd/libclang_rt.asan_cxx-arm.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/lib/freebsd/libclang_rt.asan_cxx-armhf.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/lib/freebsd/libclang_rt.asan_cxx-i386.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/lib/freebsd/libclang_rt.asan_cxx-x86_64.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/lib/freebsd/libclang_rt.cfi-aarch64.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/lib/freebsd/libclang_rt.cfi-arm.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/lib/freebsd/libclang_rt.cfi-armhf.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/lib/freebsd/libclang_rt.cfi-i386.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/lib/freebsd/libclang_rt.cfi-x86_64.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/lib/freebsd/libclang_rt.cfi_diag-aarch64.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/lib/freebsd/libclang_rt.cfi_diag-arm.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/lib/freebsd/libclang_rt.cfi_diag-armhf.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/lib/freebsd/libclang_rt.cfi_diag-i386.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/lib/freebsd/libclang_rt.cfi_diag-x86_64.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/lib/freebsd/libclang_rt.dd-aarch64.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/lib/freebsd/libclang_rt.dd-x86_64.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/lib/freebsd/libclang_rt.fuzzer-aarch64.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/lib/freebsd/libclang_rt.fuzzer-x86_64.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/lib/freebsd/libclang_rt.fuzzer_no_main-aarch64.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/lib/freebsd/libclang_rt.fuzzer_no_main-x86_64.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/lib/freebsd/libclang_rt.msan-aarch64.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/lib/freebsd/libclang_rt.msan-x86_64.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/lib/freebsd/libclang_rt.msan_cxx-aarch64.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/lib/freebsd/libclang_rt.msan_cxx-x86_64.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/lib/freebsd/libclang_rt.profile-aarch64.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/lib/freebsd/libclang_rt.profile-arm.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/lib/freebsd/libclang_rt.profile-armhf.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/lib/freebsd/libclang_rt.profile-i386.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/lib/freebsd/libclang_rt.profile-powerpc.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/lib/freebsd/libclang_rt.profile-powerpc64.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/lib/freebsd/libclang_rt.profile-x86_64.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/lib/freebsd/libclang_rt.safestack-aarch64.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/lib/freebsd/libclang_rt.safestack-i386.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/lib/freebsd/libclang_rt.safestack-x86_64.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/lib/freebsd/libclang_rt.stats-aarch64.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/lib/freebsd/libclang_rt.stats-arm.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/lib/freebsd/libclang_rt.stats-armhf.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/lib/freebsd/libclang_rt.stats-i386.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/lib/freebsd/libclang_rt.stats-x86_64.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/lib/freebsd/libclang_rt.stats_client-aarch64.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/lib/freebsd/libclang_rt.stats_client-arm.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/lib/freebsd/libclang_rt.stats_client-armhf.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/lib/freebsd/libclang_rt.stats_client-i386.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/lib/freebsd/libclang_rt.stats_client-x86_64.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/lib/freebsd/libclang_rt.tsan-aarch64.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/lib/freebsd/libclang_rt.tsan-x86_64.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/lib/freebsd/libclang_rt.tsan_cxx-aarch64.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/lib/freebsd/libclang_rt.tsan_cxx-x86_64.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/lib/freebsd/libclang_rt.ubsan_minimal-aarch64.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/lib/freebsd/libclang_rt.ubsan_minimal-arm.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/lib/freebsd/libclang_rt.ubsan_minimal-armhf.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/lib/freebsd/libclang_rt.ubsan_minimal-i386.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/lib/freebsd/libclang_rt.ubsan_minimal-x86_64.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/lib/freebsd/libclang_rt.ubsan_standalone-aarch64.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/lib/freebsd/libclang_rt.ubsan_standalone-arm.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/lib/freebsd/libclang_rt.ubsan_standalone-armhf.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/lib/freebsd/libclang_rt.ubsan_standalone-i386.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/lib/freebsd/libclang_rt.ubsan_standalone-x86_64.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/lib/freebsd/libclang_rt.ubsan_standalone_cxx-aarch64.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/lib/freebsd/libclang_rt.ubsan_standalone_cxx-arm.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/lib/freebsd/libclang_rt.ubsan_standalone_cxx-armhf.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/lib/freebsd/libclang_rt.ubsan_standalone_cxx-i386.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/lib/freebsd/libclang_rt.ubsan_standalone_cxx-x86_64.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/lib/freebsd/libclang_rt.xray-aarch64.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/lib/freebsd/libclang_rt.xray-arm.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/lib/freebsd/libclang_rt.xray-armhf.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/lib/freebsd/libclang_rt.xray-basic-aarch64.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/lib/freebsd/libclang_rt.xray-basic-arm.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/lib/freebsd/libclang_rt.xray-basic-armhf.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/lib/freebsd/libclang_rt.xray-basic-x86_64.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/lib/freebsd/libclang_rt.xray-fdr-aarch64.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/lib/freebsd/libclang_rt.xray-fdr-arm.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/lib/freebsd/libclang_rt.xray-fdr-armhf.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/lib/freebsd/libclang_rt.xray-fdr-x86_64.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/lib/freebsd/libclang_rt.xray-profiling-aarch64.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/lib/freebsd/libclang_rt.xray-profiling-arm.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/lib/freebsd/libclang_rt.xray-profiling-armhf.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/lib/freebsd/libclang_rt.xray-profiling-x86_64.a
|
||||
OLD_FILES+=usr/lib/clang/9.0.1/lib/freebsd/libclang_rt.xray-x86_64.a
|
||||
OLD_DIRS+=usr/lib/clang/9.0.1/lib/freebsd
|
||||
OLD_DIRS+=usr/lib/clang/9.0.1/lib
|
||||
OLD_DIRS+=usr/lib/clang/9.0.1
|
||||
OLD_DIRS+=usr/lib/clang
|
||||
OLD_FILES+=usr/share/doc/llvm/clang/LICENSE.TXT
|
||||
OLD_DIRS+=usr/share/doc/llvm/clang
|
||||
|
Loading…
x
Reference in New Issue
Block a user