1
0
Fork 0
mirror of https://gitlab.alpinelinux.org/alpine/aports.git synced 2025-07-12 18:59:50 +03:00

main/llvm18: include clang and lld in projects to build

-DLLVM_ENABLE_PROJECTS="clang;clang-tools-extra;lld"

also, sort Contributors by last name
This commit is contained in:
Celeste 2025-07-10 04:06:37 +00:00
parent ceb84316e3
commit 2d9bf42105
13 changed files with 1112 additions and 226 deletions

View file

@ -7,16 +7,16 @@ Subject: [PATCH] Disable dynamic lib tests for musl's dlclose() is noop
unittests/Support/CMakeLists.txt | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/unittests/Support/CMakeLists.txt b/unittests/Support/CMakeLists.txt
index 641163e..4f508d9 100644
diff --git a/llvm/unittests/Support/CMakeLists.txt b/llvm/unittests/Support/CMakeLists.txt
index df35a77..ee8ee76 100644
--- a/llvm/unittests/Support/CMakeLists.txt
+++ b/llvm/unittests/Support/CMakeLists.txt
@@ -124,5 +124,5 @@
@@ -136,7 +136,7 @@ target_link_libraries(SupportTests PRIVATE LLVMTestingSupport ${LLVM_PTHREAD_LIB
if(NOT LLVM_INTEGRATED_CRT_ALLOC)
# The test doesn't pass when using a custom allocator, PR47881.
- add_subdirectory(DynamicLibrary)
+ # add_subdirectory(DynamicLibrary)
endif()
add_subdirectory(CommandLineInit)

View file

@ -1,6 +1,6 @@
--- a/lib/Driver/ToolChains/Gnu.cpp
+++ b/lib/Driver/ToolChains/Gnu.cpp
@@ -2073,7 +2073,7 @@
--- a/clang/lib/Driver/ToolChains/Gnu.cpp
+++ b/clang/lib/Driver/ToolChains/Gnu.cpp
@@ -2452,7 +2452,7 @@ void Generic_GCC::GCCInstallationDetector::AddDefaultGCCPrefixes(
static const char *const AArch64LibDirs[] = {"/lib64", "/lib"};
static const char *const AArch64Triples[] = {
"aarch64-none-linux-gnu", "aarch64-linux-gnu", "aarch64-redhat-linux",
@ -9,8 +9,8 @@
static const char *const AArch64beLibDirs[] = {"/lib"};
static const char *const AArch64beTriples[] = {"aarch64_be-none-linux-gnu",
"aarch64_be-linux-gnu"};
@@ -2085,7 +2085,9 @@
"armv7l-linux-musleabihf",
@@ -2462,7 +2462,9 @@ void Generic_GCC::GCCInstallationDetector::AddDefaultGCCPrefixes(
static const char *const ARMHFTriples[] = {"arm-linux-gnueabihf",
"armv7hl-redhat-linux-gnueabi",
"armv6hl-suse-linux-gnueabi",
- "armv7hl-suse-linux-gnueabi"};
@ -20,16 +20,16 @@
static const char *const ARMebLibDirs[] = {"/lib"};
static const char *const ARMebTriples[] = {"armeb-linux-gnueabi"};
static const char *const ARMebHFTriples[] = {
@@ -2101,7 +2103,7 @@
@@ -2482,7 +2484,7 @@ void Generic_GCC::GCCInstallationDetector::AddDefaultGCCPrefixes(
"x86_64-redhat-linux", "x86_64-suse-linux",
"x86_64-manbo-linux-gnu", "x86_64-linux-gnu",
"x86_64-slackware-linux", "x86_64-unknown-linux",
- "x86_64-amazon-linux"};
+ "x86_64-amazon-linux", "x86_64-linux-musl"};
+ "x86_64-amazon-linux", "x86_64-linux-musl"};
static const char *const X32Triples[] = {"x86_64-linux-gnux32",
"x86_64-pc-linux-gnux32"};
static const char *const X32LibDirs[] = {"/libx32", "/lib"};
@@ -2497,6 +2504,7 @@
@@ -2491,11 +2493,13 @@ void Generic_GCC::GCCInstallationDetector::AddDefaultGCCPrefixes(
"i586-linux-gnu", "i686-linux-gnu", "i686-pc-linux-gnu",
"i386-redhat-linux6E", "i686-redhat-linux", "i386-redhat-linux",
"i586-suse-linux", "i686-montavista-linux",
@ -37,3 +37,20 @@
};
static const char *const LoongArch64LibDirs[] = {"/lib64", "/lib"};
static const char *const LoongArch64Triples[] = {
- "loongarch64-linux-gnu", "loongarch64-unknown-linux-gnu"};
+ "loongarch64-linux-gnu", "loongarch64-unknown-linux-gnu",
+ "loongarch64-linux-musl"};
static const char *const M68kLibDirs[] = {"/lib"};
static const char *const M68kTriples[] = {
@@ -2558,7 +2562,8 @@ void Generic_GCC::GCCInstallationDetector::AddDefaultGCCPrefixes(
static const char *const RISCV64LibDirs[] = {"/lib64", "/lib"};
static const char *const RISCV64Triples[] = {"riscv64-unknown-linux-gnu",
"riscv64-linux-gnu",
- "riscv64-unknown-elf"};
+ "riscv64-unknown-elf",
+ "riscv64-linux-musl"};
static const char *const SPARCv8LibDirs[] = {"/lib32", "/lib"};
static const char *const SPARCv8Triples[] = {"sparc-linux-gnu",

View file

@ -1,22 +1,21 @@
diff --git a/lib/Driver/ToolChains/Gnu.cpp b/lib/Driver/ToolChains/Gnu.cpp
index 4f23403..da6883e 100644
--- a/lib/Driver/ToolChains/Gnu.cpp
+++ b/lib/Driver/ToolChains/Gnu.cpp
@@ -588,6 +588,10 @@ void tools::gnutools::Linker::ConstructJob(Compilation &C, const JobAction &JA,
--- a/clang/lib/Driver/ToolChains/Gnu.cpp
+++ b/clang/lib/Driver/ToolChains/Gnu.cpp
@@ -561,6 +561,13 @@ void tools::gnutools::Linker::ConstructJob(Compilation &C, const JobAction &JA,
CmdArgs.push_back("-lm");
}
+ if (!Args.hasArg(options::OPT_nostdlib, options::OPT_nostartfiles, options::OPT_nodefaultlibs)) {
+ if (Triple.isMusl() &&
+ !Args.hasArg(options::OPT_nostdlib,
+ options::OPT_nostartfiles,
+ options::OPT_nodefaultlibs)) {
+ CmdArgs.push_back("-lssp_nonshared");
+ }
+
// Silence warnings when linking C code with a C++ '-stdlib' argument.
Args.ClaimAllArgs(options::OPT_stdlib_EQ);
diff --git a/lib/Driver/ToolChains/Linux.h b/lib/Driver/ToolChains/Linux.h
index 52439174..d754b543 100644
--- a/lib/Driver/ToolChains/Linux.h
+++ b/lib/Driver/ToolChains/Linux.h
--- a/clang/lib/Driver/ToolChains/Linux.h
+++ b/clang/lib/Driver/ToolChains/Linux.h
@@ -11,6 +11,7 @@
#include "Gnu.h"
@ -25,8 +24,7 @@ index 52439174..d754b543 100644
namespace clang {
namespace driver {
@@ -63,7 +64,15 @@ public:
const llvm::opt::ArgList &DriverArgs, const JobAction &JA,
@@ -64,6 +65,14 @@ public:
const llvm::fltSemantics *FPType = nullptr) const override;
const char *getDefaultLinker() const override;
@ -41,10 +39,8 @@ index 52439174..d754b543 100644
protected:
Tool *buildAssembler() const override;
diff --git a/test/Driver/fsanitize.c b/test/Driver/fsanitize.c
index 8ad6dc25..1619b59a 100644
--- a/test/Driver/fsanitize.c
+++ b/test/Driver/fsanitize.c
--- a/clang/test/Driver/fsanitize.c
+++ b/clang/test/Driver/fsanitize.c
@@ -700,12 +700,12 @@
// RUN: %clang -fno-sanitize=safe-stack -### %s 2>&1 | FileCheck %s -check-prefix=NOSP
// NOSP-NOT: "-fsanitize=safe-stack"
@ -61,10 +57,8 @@ index 8ad6dc25..1619b59a 100644
// NO-SP-NOT: stack-protector
// NO-SP: "-fsanitize=safe-stack"
// SP-ASAN: error: invalid argument '-fsanitize=safe-stack' not allowed with '-fsanitize=address'
diff --git a/test/Driver/stack-protector.c b/test/Driver/stack-protector.c
index 16937691..80987f67 100644
--- a/test/Driver/stack-protector.c
+++ b/test/Driver/stack-protector.c
--- a/clang/test/Driver/stack-protector.c
+++ b/clang/test/Driver/stack-protector.c
@@ -33,6 +33,22 @@
// SSP-PS4-BUF: "-stack-protector" "2"
// SSP-PS4-BUF: "-stack-protector-buffer-size" "16"

View file

@ -1,75 +1,113 @@
# Contributor: Rasmus Thomsen <oss@cogitri.dev>
# Contributor: Ariadne Conill <ariadne@dereferenced.org>
# Contributor: Patrick Gansterer <paroga@paroga.com>
# Contributor: Jakub Jirutka <jakub@jirutka.cz>
# Contributor: Martell Malone <martell@marinelayer.io>
# Contributor: Eric Molitor <eric@molitor.org>
# Contributor: Rasmus Thomsen <oss@cogitri.dev>
# Contributor: Travis Tilley <ttilley@gmail.com>
# Contributor: Mitch Tishmack <mitch.tishmack@gmail.com>
# Contributor: Jakub Jirutka <jakub@jirutka.cz>
# Contributor: Ariadne Conill <ariadne@dereferenced.org>
# Contributor: lauren n. liberda <lauren@selfisekai.rocks>
# Contributor: omni <omni+alpine@hack.org>
# Maintainer: Celeste <cielesti@protonmail.com>
maintainer="Celeste <cielesti@protonmail.com>"
_pkgname=llvm
pkgver=18.1.8
pkgrel=6
_sover=${pkgver%.*}
_majorver=${pkgver%%.*}
_prevmajorver=$((_majorver - 1))
pkgname=$_pkgname$_majorver
pkgrel=5
pkgdesc="Low Level Virtual Machine compiler system, version $_majorver"
arch="all"
_clangdesc="C language family front-end for LLVM"
_llddesc="The LLVM Linker"
url="https://llvm.org/"
license="Apache-2.0"
depends_dev="$pkgname=$pkgver-r$pkgrel libffi-dev zlib-dev zstd-dev"
arch="all"
license="Apache-2.0 WITH LLVM-exception"
depends_dev="
$pkgname=$pkgver-r$pkgrel
curl-dev
libffi-dev
zlib-dev
zstd-dev
"
# See https://gitlab.alpinelinux.org/alpine/aports/-/commit/51d2fba931fb2ef0046dea19405a9290c8735051#note_234651
[ -z "$BOOTSTRAP" ] && depends_dev="$depends_dev $pkgname-test-utils=$pkgver-r$pkgrel"
makedepends_host="$depends_dev binutils-dev curl-dev libxml2-dev~2.13"
makedepends_build="chrpath cmake python3 py3-setuptools samurai "
[ -z "$BOOTSTRAP" ] && depends_dev="
$depends_dev
$pkgname-test-utils=$pkgver-r$pkgrel
"
makedepends_host="
$depends_dev
binutils-dev
curl-static
libxml2-dev
"
makedepends_build="
chrpath
cmake
python3
py3-setuptools
samurai
"
# diffutils for diff: unrecognized option: strip-trailing-cr
# coreutils for 'od' binary
checkdepends="bash coreutils diffutils"
subpackages="
$pkgname-gtest:_gtest
$pkgname-static
$pkgname-libs
$pkgname-static:llvmstatic
$pkgname-libs:llvmlibs
$pkgname-linker-tools:linktools
$pkgname-dev
$pkgname-test-utils-pyc
$pkgname-dev:llvmdev
$pkgname-lit-pyc
$pkgname-lit:_llvm_lit:noarch
$pkgname-test-utils:_test_utils
clang$_majorver-extra-tools:extra
clang$_majorver:_clang
clang$_majorver-static:clangstatic
clang$_majorver-headers::noarch
clang$_majorver-libclang
clang$_majorver-libs:clanglibs
clang$_majorver-dev:clangdev
clang$_majorver-ccache:_ccache:noarch
"
source="https://github.com/llvm/llvm-project/releases/download/llvmorg-$pkgver/llvm-project-$pkgver.src.tar.xz
0001-Disable-dynamic-lib-tests-for-musl-s-dlclose-is-noop.patch
allocscore.patch
fix-memory-mf_exec-on-aarch64.patch
install-prefix.patch
llvm-stack-size.patch
backport-miscompile-floating-point.patch
backport-riscv64-jitlink-fixes.patch
fix-hexagon-tests.patch
llvm-riscv-xthreadmempair.patch
fix-macho-invalid-test.patch
fix-memory-mf_exec-on-aarch64.patch
gcc15-cstdint.patch
install-prefix.patch
llvm-riscv-xthreadmempair.patch
llvm-stack-size.patch
skip-roundeven-tests.patch
10-add-musl-triples.patch
30-Enable-stack-protector-by-default-for-Alpine-Linux.patch
clang-001-fortify-include.patch
clang-002-fortify-enable.patch
clang-003-as-needed.patch
LLD-add-build-shared-libs-option.patch
"
builddir="$srcdir/$_pkgname-project-$pkgver.src"
# Whether is this package the default (latest) LLVM version.
_default_llvm="no"
# If crosscompiling, we need llvm-tblgen on the build machine.
if [ "$CBUILD" != "$CHOST" ]; then
_llvm_tblgen="llvm-tblgen"
if [ "$_default_llvm" = no ]; then
_llvm_tblgen="llvm$_majorver-tblgen"
fi
makedepends_build="$makedepends_build cmd:$_llvm_tblgen"
_cmake_cross_options="
-DCMAKE_CROSSCOMPILING=ON
-DLLVM_TABLEGEN=/usr/bin/$_llvm_tblgen
"
fi
if [ "$_default_llvm" = yes ]; then
provides="llvm=$pkgver-r$pkgrel"
replaces="llvm"
fi
# explicit override for previous version as well
replaces="llvm17"
# ld.lld: error: src/gn/gn_main.o: could not infer e_machine
# from bitcode target triple s390x-alpine-linux-musl
case "$CARCH" in
s390x) _lld="" ;;
*)
_lld=";lld"
subpackages="
$subpackages
lld$_majorver:_lld
lld$_majorver-libs:lldlibs
lld$_majorver-dev:llddev
"
;;
esac
# NOTE: It seems that there's no (sane) way how to change includedir, sharedir
# etc. separately, just the CMAKE_INSTALL_PREFIX. Standard CMake variables and
@ -91,20 +129,92 @@ replaces="llvm17"
#
_prefix="usr/lib/llvm$_majorver"
# gcc is for libgcc-dev which we don't have split
_depends_clang="
fortify-headers>=1.1-r2
gcc
libstdc++-dev
musl-dev
"
# llvm-config and llvm-tblgen are needed for cross-compiling, otherwise
# CMake tries to build them, even when LLVM_NATIVE_TOOL_DIR is set
# llvm-dev provides llvm-config; clang provides clang-tblgen
if [ "$CBUILD" != "$CHOST" ]; then
makedepends_host="
$makedepends_host
$_depends_clang
"
makedepends_build="
$makedepends_build
$pkgname-dev
cmd:llvm$_majorver-tblgen
clang$_majorver
lld$_majorver
"
_cmake_cross_options="
-DCMAKE_SYSTEM_NAME=Linux
-DCMAKE_SYSTEM_PROCESSOR=$CARCH
-DCMAKE_SYSROOT=$CBUILDROOT
-DCMAKE_AR=/usr/bin/llvm$_majorver-ar
-DCMAKE_NM=/usr/bin/llvm$_majorver-nm
-DCMAKE_RANLIB=/usr/bin/llvm$_majorver-ranlib
-DCMAKE_ASM_COMPILER=clang-$_majorver
-DCMAKE_ASM_COMPILER_TARGET=$CHOST
-DCMAKE_C_COMPILER=clang-$_majorver
-DCMAKE_C_COMPILER_TARGET=$CHOST
-DCMAKE_CXX_COMPILER=clang++-$_majorver
-DCMAKE_CXX_COMPILER_TARGET=$CHOST
-DCMAKE_LINKER_TYPE=LLD
-DLLVM_ENABLE_LLD=ON
-DLLVM_NATIVE_TOOL_DIR=/$_prefix/bin
-DLLVM_TABLEGEN=/usr/bin/llvm$_majorver-tblgen
-DCLANG_TABLEGEN=/usr/bin/clang$_majorver-tblgen
"
# support stripping by placing abuild's expected stripcmd in $tmpdir/bin
export PATH="$PATH:$tmpdir/bin"
# we don't need build-base-$CTARGET_ARCH, LLVM/Clang has what is needed
export BOOTSTRAP=nobase
export CC=clang-$_majorver CXX=clang++-$_majorver
# --sysroot is handled by CMAKE_SYSROOT in $_cmake_cross_options
export CFLAGS="$BUILDCFLAGS" CXXFLAGS="$BUILDCXXFLAGS"
export CPPFLAGS="$BUILDCPPFLAGS" LDFLAGS="$BUILDLDFLAGS"
fi
# Internal binutils bfd plugin, so should not be linked to by other programs.
# Only available under /usr/lib/bfd-plugins/LLVMgold-$_majorver.so and
# $_prefix/lib/LLVMgold.so, so should not conflict with other versions.
somask="LLVMgold.so"
_llvm_targets="-DLLVM_TARGETS_TO_BUILD=AMDGPU;BPF;WebAssembly"
case "$CARCH" in
arm*) _llvm_targets="$_llvm_targets;ARM" ;;
loongarch64) _llvm_targets="$_llvm_targets;LoongArch";;
ppc*) _llvm_targets="$_llvm_targets;PowerPC" ;;
riscv64) _llvm_targets="$_llvm_targets;RISCV" ;;
*) _llvm_targets="" ;;
esac
prepare() {
default_prepare
if [ "$CBUILD" != "$CHOST" ]; then
mkdir -p "$tmpdir"/bin
ln -sv /usr/bin/llvm$_majorver-strip "$tmpdir"/bin/$CHOST-strip
fi
cd llvm
# Known broken test on musl
rm -v test/CodeGen/AArch64/wineh4.mir
# https://github.com/llvm/llvm-project/issues/47657
rm -v test/ExecutionEngine/Interpreter/intrinsics.ll
case "$CARCH" in
x86|arm*)
rm -v test/Object/macho-invalid.test \
test/tools/llvm-size/radix.test \
armv7|x86)
rm -v test/tools/llvm-size/radix.test
;;
armhf)
rm -v test/tools/llvm-size/radix.test \
test/ExecutionEngine/frem.ll
;;
esac
@ -114,30 +224,30 @@ build() {
# Auto-detect it by guessing either.
local ffi_include_dir="$(pkg-config --cflags-only-I libffi | sed 's|^-I||g')"
local targets= common_targets="AMDGPU;BPF;WebAssembly"
case "$CARCH" in
arm*) targets="-DLLVM_TARGETS_TO_BUILD=ARM;$common_targets";;
loongarch64) targets="-DLLVM_TARGETS_TO_BUILD=LoongArch;$common_targets";;
ppc64le) targets="-DLLVM_TARGETS_TO_BUILD=PowerPC;$common_targets";;
riscv64) targets="-DLLVM_TARGETS_TO_BUILD=RISCV;$common_targets";;
esac
# Interferes with detection of compiler flags when building with Clang.
# (For example, -fPIC won't be detected, which causes failures later on.)
# This is due to an arch-specific -Wunused-command-line-argument warning,
# but the archs affected may change in future versions of Clang.
if $CC --version | grep -qi clang; then
export CFLAGS="${CFLAGS//-fstack-clash-protection}"
fi
if $CXX --version | grep -qi clang; then
export CXXFLAGS="${CXXFLAGS//-fstack-clash-protection}"
fi
# NOTE: DO NOT change CMAKE_BUILD_TYPE! Buildmodes like None will enable
# debug assertions for LLVM!
cmake -B build -G Ninja -Wno-dev -S llvm \
cmake -S llvm -B build -G Ninja -Wno-dev \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX=/$_prefix \
-DCMAKE_INSTALL_RPATH=/$_prefix \
\
-DLLVM_DEFAULT_TARGET_TRIPLE="$CHOST" \
-DLLVM_HOST_TRIPLE="$CHOST" \
\
-DCMAKE_INSTALL_RPATH=/$_prefix/lib \
-DFFI_INCLUDE_DIR="$ffi_include_dir" \
\
-DLLVM_HOST_TRIPLE="$CHOST" \
-DLLVM_APPEND_VC_REV=OFF \
-DLLVM_BINUTILS_INCDIR=/usr/include \
-DLLVM_BUILD_DOCS=OFF \
-DLLVM_BUILD_EXAMPLES=OFF \
-DLLVM_BUILD_EXTERNAL_COMPILER_RT=ON \
-DLLVM_BUILD_LLVM_DYLIB=ON \
-DLLVM_BUILD_TESTS="$(want_check && echo ON || echo OFF)" \
-DLLVM_ENABLE_ASSERTIONS=OFF \
@ -148,9 +258,9 @@ build() {
-DLLVM_ENABLE_LIBCXX=OFF \
-DLLVM_ENABLE_LIBEDIT=OFF \
-DLLVM_ENABLE_PIC=ON \
-DLLVM_ENABLE_PROJECTS="clang;clang-tools-extra$_lld" \
-DLLVM_ENABLE_RTTI=ON \
-DLLVM_ENABLE_SPHINX=OFF \
-DLLVM_ENABLE_TERMINFO=ON \
-DLLVM_ENABLE_ZLIB=FORCE_ON \
-DLLVM_ENABLE_ZSTD=FORCE_ON \
-DLLVM_INCLUDE_BENCHMARKS=OFF \
@ -159,8 +269,22 @@ build() {
-DLLVM_INSTALL_UTILS=ON \
-DLLVM_LINK_LLVM_DYLIB=ON \
-DLLVM_USE_PERF=ON \
$targets \
$_cmake_cross_options
\
-DCLANG_CONFIG_FILE_SYSTEM_DIR=/etc/clang$_majorver \
-DCLANG_DEFAULT_PIE_ON_LINUX=ON \
-DCLANG_ENABLE_ARCMT=OFF \
-DCLANG_ENABLE_STATIC_ANALYZER=OFF \
-DCLANG_INCLUDE_TESTS=OFF \
-DCLANG_LINK_CLANG_DYLIB=ON \
-DCLANG_PLUGIN_SUPPORT=ON \
-DCLANG_SYSTEMZ_DEFAULT_ARCH=z196 \
-DCLANG_VENDOR=Alpine \
-DENABLE_LINKER_BUILD_ID=ON \
-DLIBCLANG_BUILD_STATIC=ON \
-DLLD_BUILD_SHARED_LIBS=ON \
\
$_cmake_cross_options \
$_llvm_targets
cmake --build build
@ -168,166 +292,368 @@ build() {
}
check() {
LD_LIBRARY_PATH="$PWD/build/lib" \
ninja -C build check-llvm
}
package() {
depends="$pkgname-linker-tools=$pkgver-r$pkgrel"
DESTDIR="$pkgdir" cmake --install build
python3 llvm/utils/lit/setup.py install --root="$pkgdir"
cd "$pkgdir"/$_prefix
# setuptools installs lit to /usr/bin, move it to $_prefix
mv -v "$pkgdir"/usr/bin/lit "$pkgdir"/$_prefix/bin/lit
ln -sv lit "$pkgdir"/$_prefix/bin/llvm-lit
# Symlink files from /usr/lib/llvm*/bin to /usr/bin.
mkdir -p "$pkgdir"/usr/bin
local name newname path
for path in bin/*; do
(cd "$pkgdir"/$_prefix
local name newname path; for path in bin/*; do
name=${path##*/}
# Add version infix/suffix to the executable name.
case "$name" in
llvm-*) newname="llvm$_majorver-${name#llvm-}";;
*) newname="$name$_majorver";;
*-$_majorver) newname=$name ;;
clang++) newname="$name-$_majorver" ;;
clang-tblgen) newname="clang$_majorver-${name#clang-}" ;;
count|llc|lli|not|opt) newname="$name$_majorver" ;;
llvm-*) newname="llvm$_majorver-${name#llvm-}" ;;
*) continue ;;
esac
# If this package provides=llvm (i.e. it's the default/latest
# llvm package), omit version infix/suffix.
if [ "$_default_llvm" = yes ]; then
newname=$name
fi
case "$name" in
FileCheck | obj2yaml | yaml2obj) continue;;
esac
ln -s ../lib/llvm$_majorver/bin/$name "$pkgdir"/usr/bin/$newname
done
ln -sv ../lib/llvm$_majorver/bin/$name "$pkgdir"/usr/bin/$newname
done)
mkdir -p "$pkgdir"/usr/include "$pkgdir"/usr/lib/cmake
# symlink include to /usr/include/llvm$_llvmver
ln -sfv ../lib/$pkgname/include "$pkgdir"/usr/include/$pkgname
ln -sv ../lib/llvm$_majorver/include "$pkgdir"/usr/include/llvm$_majorver
# symlink cmake dir to system cmake
ln -sfv ../$pkgname/lib/cmake/llvm "$pkgdir"/usr/lib/cmake/$pkgname
# symlink cmake dirs to system cmake location, so find_package works
local f; for f in clang ${_lld/;} llvm; do
ln -sv ../llvm$_majorver/lib/cmake/$f "$pkgdir"/usr/lib/cmake/$f$_majorver
done
local libllvm_soname="libLLVM.so.$_sover"
local libllvm_soname2="libLLVM-$_majorver.so"
# libLLVM should be in /usr/lib. This is needed for binaries that are
# dynamically linked with libLLVM, so they can find it on default path.
mv -v "$pkgdir"/$_prefix/lib/$libllvm_soname "$pkgdir"/usr/lib/
ln -sv $libllvm_soname "$pkgdir"/usr/lib/$libllvm_soname2
# And also symlink it back to the LLVM prefix.
ln -sv ../../$libllvm_soname "$pkgdir"/$_prefix/lib/$libllvm_soname
ln -sfv ../../$libllvm_soname "$pkgdir"/$_prefix/lib/$libllvm_soname2
# for bfd to work with clang -flto, you need to put the linker plugin in the bfd dir too,
# not just usr/lib.
mkdir -p "$pkgdir"/usr/lib/bfd-plugins
ln -sv ../llvm$_majorver/lib/LLVMgold.so "$pkgdir"/usr/lib/bfd-plugins/LLVMgold-$_majorver.so
# also add a suffix-version variant of llvm-config, as that's what things normally check for
ln -sv ../lib/llvm$_majorver/bin/llvm-config "$pkgdir"/usr/bin/llvm-config-$_majorver
# create system clang config
# clang doesn't really have a way to set default -march abi options, so use the system config dir
# see the clang UsersManual for how this config directory is parsed / fallback order.
# this is set based on our gcc baseline. see the --with arguments in main/gcc.
mkdir -p "$pkgdir"/etc/clang$_majorver
# silent the unused-command-line-argument warning for -fstack-clash-protection,
# which is in abuild's default.conf but unimplemented for some architectures.
# (reference: https://maskray.me/blog/2023-08-25-clang-wunused-command-line-argument)
cat > clang.cfg <<-EOF
-fstack-clash-protection
EOF
cat > clang++.cfg <<-EOF
@clang.cfg
EOF
local arm32_enabled x86_enabled
if [ -z "$_llvm_targets" ]; then
arm32_enabled=true
x86_enabled=true
else
case "$_llvm_targets" in
*X86*) x86_enabled=true ;;
*) x86_enabled=false ;;
esac
case "$_llvm_targets" in
*ARM*) arm32_enabled=true ;;
*) arm32_enabled=false ;;
esac
fi
# clang defaults to pentium4 on i*86- triples.
# see https://github.com/llvm/llvm-project/issues/61347
$x86_enabled && cat > "$(arch_to_hostspec x86).cfg" <<-EOF
-march=pentium-m -mfpmath=sse
EOF
# clang defaults to 'armv6' for armhf, i.e. no -zk.
# -zk is also a deprecated name for -kz.
$arm32_enabled && cat > "$(arch_to_hostspec armhf).cfg" <<-EOF
-march=armv6kz
-mfpu=vfp
-mtune=arm1176jzf-s
EOF
# it's possible to do CHOST-clang.cfg and similar to make it per-tool
# which is given priority over the separate target and driver configs
mv -v ./*-linux-musl*.cfg "$pkgdir"/etc/clang$_majorver/ || :
mv -v ./clang*.cfg "$pkgdir"/etc/clang$_majorver/
# delete things we don't want non-latest of
rm -v "$pkgdir"/$_prefix/share/clang/bash-autocomplete.sh
rm -v "$pkgdir"/$_prefix/share/clang/clang-*.el
rm -v "$pkgdir"/$_prefix/share/clang/clang-format-bbedit.applescript
local clang_libs="
libclang-cpp.so
libclang-cpp.so.$_sover
libclang.so
libclang.so.$_sover
libclang.so.$pkgver
"
for f in $clang_libs; do
ln -sv ../lib/llvm$_majorver/lib/$f "$pkgdir"/usr/lib/$f
done
(cd "$pkgdir"/$_prefix/lib
for f in liblld*.so*; do
ln -sv ../lib/llvm$_majorver/lib/$f "$pkgdir"/usr/lib/$f
done)
mkdir -p "$pkgdir"/usr/lib/clang "$pkgdir"/usr/lib/ccache/bin
# compat symlink back to fix clang with -no-canonical-prefixes
ln -sv ../llvm$_majorver/lib/clang/$_majorver "$pkgdir"/usr/lib/clang/$_majorver
# create ccache symlinks, for clang$_majorver-ccache subpackage
ln -sv ../../../bin/ccache "$pkgdir"/usr/lib/ccache/bin/clang-$_majorver
ln -sv ../../../bin/ccache "$pkgdir"/usr/lib/ccache/bin/clang++-$_majorver
}
_gtest() {
pkgdesc="LLVM $_majorver gtest static libraries"
depends=""
_common_subpkg
amove "$_prefix"/lib/libLLVMTesting*.a \
"$_prefix"/lib/libllvm_gtest*.a \
"$_prefix"/include/llvm-gmock \
"$_prefix"/include/llvm-gtest
amove \
$_prefix/lib/libLLVMTesting*.a \
$_prefix/lib/libllvm_gtest*.a \
$_prefix/include/llvm-gmock \
$_prefix/include/llvm-gtest
}
static() {
llvmstatic() {
pkgdesc="LLVM $_majorver static libraries"
depends=""
_common_subpkg
amove "$_prefix"/lib/*.a
amove $_prefix/lib/libLLVM*.a
}
libs() {
llvmlibs() {
pkgdesc="LLVM $_majorver runtime library"
depends=""
local soname="libLLVM.so.${pkgver%.*}"
local soname2="libLLVM-$_majorver.so"
mkdir -p "$subpkgdir"
cd "$subpkgdir"
# libLLVM should be in /usr/lib. This is needed for binaries that are
# dynamically linked with libLLVM, so they can find it on default path.
mkdir -p "$subpkgdir"/usr/lib
mv "$pkgdir"/$_prefix/lib/$soname "$subpkgdir"/usr/lib/
ln -s $soname usr/lib/$soname2
# And also symlink it back to the LLVM prefix.
mkdir -p $_prefix/lib
ln -s ../../$soname $_prefix/lib/$soname
ln -s ../../$soname $_prefix/lib/$soname2
amove \
usr/lib/libLLVM.so.$_sover \
$_prefix/lib/libLLVM.so.$_sover
}
linktools() {
_common_subpkg
pkgdesc="$pkgdesc (linker plugins)"
amove \
$_prefix/lib/libLTO.so* \
usr/lib/bfd-plugins/ \
$_prefix/lib/LLVMgold* \
if [ "$_default_llvm" = yes ]; then
ln -sfv llvm$_majorver/lib/LLVMgold.so "$subpkgdir"/usr/lib/
ln -sfv llvm$_majorver/lib/libLTO.so "$subpkgdir"/usr/lib/
# for bfd to work with clang -flto, you need to put the linker plugin in the bfd dir too,
# not just usr/lib.
mkdir -p "$subpkgdir"/usr/lib/bfd-plugins/
ln -sfv ../llvm$_majorver/lib/LLVMgold.so "$subpkgdir"/usr/lib/bfd-plugins/
fi
$_prefix/lib/libLTO.so*
}
dev() {
_common_subpkg
default_dev
cd "$subpkgdir"
llvmdev() {
pkgdesc="$pkgdesc (development files)"
depends="$depends_dev"
amove \
$_prefix/lib \
$_prefix/bin/llvm-config
usr/bin/llvm*config* \
usr/include/llvm* \
usr/lib/cmake/llvm* \
usr/lib/libLLVM*.so \
$_prefix/bin/llvm-config \
$_prefix/include/llvm*/ \
$_prefix/lib/cmake/llvm/ \
$_prefix/lib/libLLVM*.so \
$_prefix/lib/libRemarks*
}
if [ "$_default_llvm" = yes ]; then
ln -sf llvm$_majorver usr/lib/cmake/llvm
ln -sf llvm$_majorver/lib/LLVMgold.so "$pkgdir"/usr/lib/
ln -sf llvm$_majorver/lib/libLTO.so "$pkgdir"/usr/lib/
fi
_llvm_lit() {
pkgdesc="LLVM $_majorver utilities for executing LLVM and Clang style test suites (llvm-lit)"
depends="$pkgname-test-utils=$pkgver-r$pkgrel"
# also add a suffix-version variant of llvm-config, as that's what things normally check for
mkdir -p "$subpkgdir"/usr/bin/
ln -sfv ../lib/llvm$_majorver/bin/llvm-config "$subpkgdir"/usr/bin/llvm-config-$_majorver
amove \
usr/bin/llvm$_majorver-lit \
usr/lib/python3*/site-packages/lit*/ \
$_prefix/bin/lit \
$_prefix/bin/llvm-lit
}
_test_utils() {
pkgdesc="LLVM $_majorver utilities for executing LLVM and Clang style test suites"
depends="python3"
_common_subpkg
pkgdesc="LLVM $_majorver utilities for executing LLVM and Clang style test suites (binaries)"
depends=""
local litver=$(python3 "$builddir"/llvm/utils/lit/setup.py --version 2>/dev/null \
| sed 's/\.dev.*$//')
test -n "$litver"
provides="$provides lit=$litver-r$pkgrel"
amove usr/lib/$pkgname/bin/FileCheck \
usr/lib/$pkgname/bin/count \
usr/lib/$pkgname/bin/not \
usr/lib/python* \
usr/bin/lit
mv "$subpkgdir"/usr/bin/lit "$subpkgdir"/$_prefix/bin/lit
ln -s lit "$subpkgdir"/$_prefix/bin/llvm-lit
if [ "$_default_llvm" = yes ]; then
amove usr/bin/count usr/bin/not
ln -s ../lib/llvm$_majorver/bin/lit "$subpkgdir"/usr/bin/lit
else
amove usr/bin/count$_majorver usr/bin/not$_majorver
fi
amove \
usr/bin/count$_majorver \
usr/bin/not$_majorver \
$_prefix/bin/FileCheck \
$_prefix/bin/count \
$_prefix/bin/not
}
_common_subpkg() {
if [ "$_default_llvm" = yes ]; then
replaces="llvm${subpkgname#"$pkgname"} llvm${_prevmajorver}${subpkgname#"$pkgname"}"
provides="llvm${subpkgname#"$pkgname"}=$pkgver-r$pkgrel"
fi
_lld() {
pkgdesc="$_llddesc"
amove \
$_prefix/bin/*lld* \
$_prefix/bin/wasm-ld
}
lldlibs() {
pkgdesc="$_llddesc (libraries)"
amove \
usr/lib/liblld*.so.* \
$_prefix/lib/liblld*.so.*
}
llddev() {
pkgdesc="$_llddesc (development files)"
depends="lld$_majorver=$pkgver-r$pkgrel"
amove \
usr/lib/cmake/lld$_majorver \
usr/lib/liblld*.so \
$_prefix/include/lld \
$_prefix/lib/cmake/lld \
$_prefix/lib/liblld*.so
}
extra() {
pkgdesc="Extra tools built using Clang's tooling APIs"
amove \
$_prefix/bin/clang-apply-replacements* \
$_prefix/bin/clang-change-namespace* \
$_prefix/bin/clang-doc* \
$_prefix/bin/clang-format* \
$_prefix/bin/clang-include-cleaner* \
$_prefix/bin/clang-include-fixer* \
$_prefix/bin/clang-move* \
$_prefix/bin/clang-offload-bundler* \
$_prefix/bin/clang-pseudo* \
$_prefix/bin/clang-query* \
$_prefix/bin/clang-refactor* \
$_prefix/bin/clang-rename* \
$_prefix/bin/clang-reorder-fields* \
$_prefix/bin/clang-repl* \
$_prefix/bin/clang-scan-deps* \
$_prefix/bin/clang-tidy* \
$_prefix/bin/clangd* \
$_prefix/bin/c-index-test* \
$_prefix/bin/diagtool* \
$_prefix/bin/find-all-symbols* \
$_prefix/bin/git-clang-format* \
$_prefix/bin/hmaptool* \
$_prefix/bin/modularize* \
$_prefix/bin/pp-trace* \
$_prefix/bin/run-clang-tidy* \
$_prefix/share/clang
}
_clang() {
pkgdesc="$_clangdesc"
# the libraries should always exactly match, not just by soname
depends="
$pkgname-linker-tools=$pkgver-r$pkgrel
$subpkgname-headers=$pkgver-r$pkgrel
$subpkgname-libs=$pkgver-r$pkgrel
$_depends_clang
"
amove \
etc/clang* \
usr/bin/clang* \
usr/lib/clang \
$_prefix/bin/*-arch \
$_prefix/bin/clang*
}
clangdev() {
pkgdesc="$_clangdesc (development files)"
depends="clang$_majorver=$pkgver-r$pkgrel"
# move cmake to -dev
amove \
usr/lib/cmake/clang$_majorver \
usr/lib/libclang*.so \
$_prefix/include/clang*/ \
$_prefix/lib/cmake/clang \
$_prefix/lib/libclang*.so
}
clangstatic() {
pkgdesc="$_clangdesc (static library)"
amove \
$_prefix/lib/libclang*.a \
$_prefix/lib/libfindAllSymbols.a
}
clanglibs() {
pkgdesc="$_clangdesc (C++ interface)"
# this can fail depending on the symlinks and is already moved
amove \
usr/lib/libclang-cpp.so.* \
$_prefix/lib/libclang-cpp.so.*
}
libclang() {
pkgdesc="$_clangdesc (C interface)"
depends="clang$_majorver-headers=$pkgver-r$pkgrel"
# we add an extra subpackage for this so things that link to libclang don't
# have to pull libclang-cpp too (separate)
amove \
usr/lib/libclang.so.* \
$_prefix/lib/libclang.so.*
}
headers() {
pkgdesc="$_clangdesc (header files)"
amove $_prefix/lib/clang/$_majorver/include
}
_ccache() {
pkgdesc="$_clangdesc (ccache symlinks)"
install_if="clang$_majorver=$pkgver-r$pkgrel ccache"
amove usr/lib/ccache/bin
}
sha512sums="
25eeee9984c8b4d0fbc240df90f33cbb000d3b0414baff5c8982beafcc5e59e7ef18f6f85d95b3a5f60cb3d4cd4f877c80487b5768bc21bc833f107698ad93db llvm-project-18.1.8.src.tar.xz
84ed6b165445d0cdb59daa59f612a7d960bf67b13a1b19bdd2a19d46548013e756faca6b8249cb6c60354f3a9aaef46652e5f531944c71294e46d2f7bfd8b832 0001-Disable-dynamic-lib-tests-for-musl-s-dlclose-is-noop.patch
f98a42e0ce6fef78487b49412d9961fc7013f17205d77956b4c0b23d3de1f7a282eca9551266b66a7243496cbfc2838bb95c4e0a009030163af090e9a8d6ed95 0001-Disable-dynamic-lib-tests-for-musl-s-dlclose-is-noop.patch
ef63d5e01440cff65c10b84b65099bbd539bae72065d5581a8d2409cf2d0d4410d5bb3f501273ab29ee65bf8f5d23653a074428c2711ff9209324de56b857f3f allocscore.patch
1826a6877d0c9e93c2d6ce0b4f83fe1118b9449f82f1919b37be5fc6d7c11ae22e0c02a7d3e6e23ce41bbb07df2ff08124aa9172e254ef2b12ecbc80d9a674a9 fix-memory-mf_exec-on-aarch64.patch
ebc0be314c129ef38f00c8c2be9d589658cae89ac8cda109e35933b5044e775a3d370c0c584d3e501e4d43167b8523d8c5e5a85653d8ebe853571697ae40fb35 install-prefix.patch
2123f01d8075a15cf8c2d8091fc8c92cb99807b1d654af13b436690ddb55f3e893a494593b3c92aeab26e50db4e0500ac688129ab6bc11e4765c0308b90db101 llvm-stack-size.patch
ce04c88e95282b2b1938c7b0014d5b4f8360f1f128fed706f5e6a2f3eabc3848c60ff63fe605e5eebc7b9b0669793b77f91a3f63b1c1562291ff69e7d951fd09 backport-miscompile-floating-point.patch
48c17c5413c9cf75520353c2553a522ae47a7d1792ecd0c750fa4eb5798f3ef009ae439d75b734986411ad0b438d37a18cdb5493112d7f98496a3dc6feb6ca72 backport-riscv64-jitlink-fixes.patch
bd51d487c46472963a350cd90f7d7a5d8a4494467716f4e4e3d21ba6be5f65c0e84f173a5bb8468fb68325e75401f08110f8886320d5caa9acd339d795b254bc fix-hexagon-tests.patch
3cd5f0086034cfa79f01c9ab8c28c76e89fbda4758fb6f550c65da1026a97f69abc6172253b89cc6c9852ef5a4c02031abcadef7781aed6d6a3ec025eb4cbc15 llvm-riscv-xthreadmempair.patch
5e67befcc470c605aa61ff2e0c63057e121633def720e5c67fb4ecdc4a5852bee6ca93fe9953531389dc43f79e1828a411f5a40eb70a686d47ab127153be0ade fix-macho-invalid-test.patch
1826a6877d0c9e93c2d6ce0b4f83fe1118b9449f82f1919b37be5fc6d7c11ae22e0c02a7d3e6e23ce41bbb07df2ff08124aa9172e254ef2b12ecbc80d9a674a9 fix-memory-mf_exec-on-aarch64.patch
6799218f1938e028d253f02e70af01ea300b3435e2bd9db35e38a669ea3c3fdab89b676c62c780007d900e7c187692efe4da3267b71f43028bdbd0478653fde1 gcc15-cstdint.patch
510833875b190101a2bc466a7d3e17e820d4806345f350385c2e8e5112713fd864467f245e85f9b192b2c9b00c3fa33c5de773f98a38dfbb4ae80e158af19738 install-prefix.patch
3cd5f0086034cfa79f01c9ab8c28c76e89fbda4758fb6f550c65da1026a97f69abc6172253b89cc6c9852ef5a4c02031abcadef7781aed6d6a3ec025eb4cbc15 llvm-riscv-xthreadmempair.patch
2123f01d8075a15cf8c2d8091fc8c92cb99807b1d654af13b436690ddb55f3e893a494593b3c92aeab26e50db4e0500ac688129ab6bc11e4765c0308b90db101 llvm-stack-size.patch
a45f078c4ddd5e1bece2e2e6795d4760a88dd3bb0921786d2f0650979268554e87e9190b42be1efa7e76e8d14a5a6db453dc367711576397e00fe647c9261791 skip-roundeven-tests.patch
b5440db2b4ae8e35ef02b3c43a14a1341ef322f541ffd6556e2db00d1006c9e1487f5f8f78dae15d24f18b11a969626b73b21d1bc227a8889b93f99577b5913f 10-add-musl-triples.patch
cf177cea6ad679a605f92936c39d12462595f554bca01eddf5700eee07fe636b53a961c142c3aab76a02e384a9fd2be328796bcc2e5175bb8acca485e3f981d7 30-Enable-stack-protector-by-default-for-Alpine-Linux.patch
379443909e20ac392a8237c24c02c0f5da9bf8c176e7562da9212f6867fdd06e7bae21b5260cba3e55b9136f1d67275cc197ebb976b496bab52a3d9f74a37014 clang-001-fortify-include.patch
89c00914c59cf3243a885430d708e099dac6ab7c01b1541fb4fea578fe20b623821bf123edddfa551a12f8e960c4b28ac18a007758a6fe4d9953bc4c7bd2c6e6 clang-002-fortify-enable.patch
a8f5d2fca12fe0533f634284bbfc6857281a81b4f3a367d70c53f2186817ce2bdd1acf196a9200380f197b213b5f73db8404a17ca0c34cc990b60e110f06ebba clang-003-as-needed.patch
56b362308a0a7050531a438cd1ee76ebbdaa6d0bd8019d9cb3a15de105bf1d17e74c19bffce8c09aac2ee05cede01e6ed665931ef593bc84804d645a6f818c15 LLD-add-build-shared-libs-option.patch
"

View file

@ -0,0 +1,23 @@
--- a/lld/CMakeLists.txt
+++ b/lld/CMakeLists.txt
@@ -160,6 +160,9 @@ if (LLD_USE_VTUNE)
endif()
endif()
+option(LLD_BUILD_SHARED_LIBS
+ "Build lld libraries as shared libraries instead of static" OFF)
+
option(LLD_BUILD_TOOLS
"Build the lld tools. If OFF, just generate build targets." ON)
--- a/lld/cmake/modules/AddLLD.cmake
+++ b/lld/cmake/modules/AddLLD.cmake
@@ -7,7 +7,7 @@ macro(add_lld_library name)
""
""
${ARGN})
- if(ARG_SHARED)
+ if( LLD_BUILD_SHARED_LIBS OR ARG_SHARED )
set(ARG_ENABLE_SHARED SHARED)
endif()
llvm_add_library(${name} ${ARG_ENABLE_SHARED} ${ARG_UNPARSED_ARGUMENTS})

View file

@ -0,0 +1,348 @@
Patch-Source: https://salsa.debian.org/pkg-llvm-team/llvm-toolchain/-/blob/18/debian/patches/backport-miscompile-floating-point.diff
Upstream: https://github.com/llvm/llvm-project/commit/90c14748638f1e10e31173b145fdbb5c4529c922
--
Index: llvm-toolchain-18-18.1.8/llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
===================================================================
--- llvm-toolchain-18-18.1.8.orig/llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
+++ llvm-toolchain-18-18.1.8/llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
@@ -2168,7 +2168,8 @@ void SelectionDAGLegalize::ExpandFPLibCa
Results.push_back(Tmp.first);
Results.push_back(Tmp.second);
} else {
- SDValue Tmp = ExpandLibCall(LC, Node, false).first;
+ bool IsSignedArgument = Node->getOpcode() == ISD::FLDEXP;
+ SDValue Tmp = ExpandLibCall(LC, Node, IsSignedArgument).first;
Results.push_back(Tmp);
}
}
Index: llvm-toolchain-18-18.1.8/llvm/test/CodeGen/PowerPC/ldexp-libcall.ll
===================================================================
--- llvm-toolchain-18-18.1.8.orig/llvm/test/CodeGen/PowerPC/ldexp-libcall.ll
+++ llvm-toolchain-18-18.1.8/llvm/test/CodeGen/PowerPC/ldexp-libcall.ll
@@ -10,7 +10,7 @@ define float @call_ldexpf(float %a, i32
; CHECK-NEXT: std r0, 48(r1)
; CHECK-NEXT: .cfi_def_cfa_offset 32
; CHECK-NEXT: .cfi_offset lr, 16
-; CHECK-NEXT: clrldi r4, r4, 32
+; CHECK-NEXT: extsw r4, r4
; CHECK-NEXT: bl ldexpf
; CHECK-NEXT: nop
; CHECK-NEXT: addi r1, r1, 32
@@ -29,7 +29,7 @@ define double @call_ldexp(double %a, i32
; CHECK-NEXT: std r0, 48(r1)
; CHECK-NEXT: .cfi_def_cfa_offset 32
; CHECK-NEXT: .cfi_offset lr, 16
-; CHECK-NEXT: clrldi r4, r4, 32
+; CHECK-NEXT: extsw r4, r4
; CHECK-NEXT: bl ldexp
; CHECK-NEXT: nop
; CHECK-NEXT: addi r1, r1, 32
Index: llvm-toolchain-18-18.1.8/llvm/test/CodeGen/PowerPC/ldexp.ll
===================================================================
--- llvm-toolchain-18-18.1.8.orig/llvm/test/CodeGen/PowerPC/ldexp.ll
+++ llvm-toolchain-18-18.1.8/llvm/test/CodeGen/PowerPC/ldexp.ll
@@ -1,6 +1,7 @@
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 2
; RUN: llc -mcpu=pwr9 -mtriple=powerpc64le-unknown-unknown \
; RUN: -ppc-vsr-nums-as-vr -ppc-asm-full-reg-names < %s | FileCheck %s
+; XFAIL: *
define float @ldexp_f32(i8 zeroext %x) {
; CHECK-LABEL: ldexp_f32:
@@ -59,22 +60,24 @@ define <2 x float> @ldexp_v2f32(<2 x flo
; CHECK-NEXT: .cfi_offset v29, -48
; CHECK-NEXT: .cfi_offset v30, -32
; CHECK-NEXT: .cfi_offset v31, -16
-; CHECK-NEXT: xxsldwi vs0, v2, v2, 3
; CHECK-NEXT: li r3, 0
+; CHECK-NEXT: xxsldwi vs0, v2, v2, 3
; CHECK-NEXT: stxv v29, 32(r1) # 16-byte Folded Spill
; CHECK-NEXT: xscvspdpn f1, vs0
-; CHECK-NEXT: vextuwrx r4, r3, v3
+; CHECK-NEXT: vextuwrx r3, r3, v3
; CHECK-NEXT: stxv v30, 48(r1) # 16-byte Folded Spill
; CHECK-NEXT: stxv v31, 64(r1) # 16-byte Folded Spill
+; CHECK-NEXT: extsw r4, r3
; CHECK-NEXT: vmr v31, v3
; CHECK-NEXT: vmr v30, v2
; CHECK-NEXT: bl ldexpf
; CHECK-NEXT: nop
-; CHECK-NEXT: xxswapd vs0, v30
; CHECK-NEXT: li r3, 4
+; CHECK-NEXT: xxswapd vs0, v30
; CHECK-NEXT: xscvdpspn v29, f1
; CHECK-NEXT: xscvspdpn f1, vs0
-; CHECK-NEXT: vextuwrx r4, r3, v31
+; CHECK-NEXT: vextuwrx r3, r3, v31
+; CHECK-NEXT: extsw r4, r3
; CHECK-NEXT: bl ldexpf
; CHECK-NEXT: nop
; CHECK-NEXT: xscvdpspn vs0, f1
@@ -160,7 +163,7 @@ define half @ldexp_f16(half %arg0, i32 %
; CHECK-NEXT: .cfi_def_cfa_offset 32
; CHECK-NEXT: .cfi_offset lr, 16
; CHECK-NEXT: xscvdphp f0, f1
-; CHECK-NEXT: clrldi r4, r4, 32
+; CHECK-NEXT: extsw r4, r4
; CHECK-NEXT: mffprwz r3, f0
; CHECK-NEXT: clrlwi r3, r3, 16
; CHECK-NEXT: mtfprwz f0, r3
Index: llvm-toolchain-18-18.1.8/llvm/test/CodeGen/PowerPC/negative-integer-fp-libcall.ll
===================================================================
--- /dev/null
+++ llvm-toolchain-18-18.1.8/llvm/test/CodeGen/PowerPC/negative-integer-fp-libcall.ll
@@ -0,0 +1,26 @@
+; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 2
+; RUN: llc -O1 -mtriple=powerpc64-unknown-linux-gnu -mcpu=pwr8 < %s | FileCheck %s
+
+; Test that a negative parameter smaller than 64 bits (e.g., int)
+; is correctly implemented with sign-extension when passed to
+; a floating point libcall.
+
+define double @ldexp_test(ptr %a, ptr %b) nounwind {
+; CHECK-LABEL: ldexp_test:
+; CHECK: # %bb.0:
+; CHECK-NEXT: mflr 0
+; CHECK-NEXT: stdu 1, -112(1)
+; CHECK-NEXT: std 0, 128(1)
+; CHECK-NEXT: lfd 1, 0(3)
+; CHECK-NEXT: lwa 4, 0(4)
+; CHECK-NEXT: bl ldexp
+; CHECK-NEXT: nop
+; CHECK-NEXT: addi 1, 1, 112
+; CHECK-NEXT: ld 0, 16(1)
+; CHECK-NEXT: mtlr 0
+; CHECK-NEXT: blr
+ %base = load double, ptr %a
+ %exp = load i32, ptr %b
+ %call = call double @llvm.ldexp.f64.i32(double %base, i32 signext %exp)
+ ret double %call
+}
Index: llvm-toolchain-18-18.1.8/llvm/test/CodeGen/X86/fold-int-pow2-with-fmul-or-fdiv.ll
===================================================================
--- llvm-toolchain-18-18.1.8.orig/llvm/test/CodeGen/X86/fold-int-pow2-with-fmul-or-fdiv.ll
+++ llvm-toolchain-18-18.1.8/llvm/test/CodeGen/X86/fold-int-pow2-with-fmul-or-fdiv.ll
@@ -406,13 +406,15 @@ define <8 x half> @fmul_pow2_ldexp_8xhal
; CHECK-SSE-NEXT: subq $72, %rsp
; CHECK-SSE-NEXT: .cfi_def_cfa_offset 80
; CHECK-SSE-NEXT: movdqa %xmm0, (%rsp) # 16-byte Spill
-; CHECK-SSE-NEXT: pextrw $7, %xmm0, %edi
+; CHECK-SSE-NEXT: pextrw $7, %xmm0, %eax
+; CHECK-SSE-NEXT: movswl %ax, %edi
; CHECK-SSE-NEXT: movss {{.*#+}} xmm0 = [8.192E+3,0.0E+0,0.0E+0,0.0E+0]
; CHECK-SSE-NEXT: callq ldexpf@PLT
; CHECK-SSE-NEXT: callq __truncsfhf2@PLT
; CHECK-SSE-NEXT: movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
; CHECK-SSE-NEXT: movdqa (%rsp), %xmm0 # 16-byte Reload
-; CHECK-SSE-NEXT: pextrw $6, %xmm0, %edi
+; CHECK-SSE-NEXT: pextrw $6, %xmm0, %eax
+; CHECK-SSE-NEXT: movswl %ax, %edi
; CHECK-SSE-NEXT: movd {{.*#+}} xmm0 = [8.192E+3,0.0E+0,0.0E+0,0.0E+0]
; CHECK-SSE-NEXT: callq ldexpf@PLT
; CHECK-SSE-NEXT: callq __truncsfhf2@PLT
@@ -420,13 +422,15 @@ define <8 x half> @fmul_pow2_ldexp_8xhal
; CHECK-SSE-NEXT: # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1],xmm0[2],mem[2],xmm0[3],mem[3]
; CHECK-SSE-NEXT: movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
; CHECK-SSE-NEXT: movdqa (%rsp), %xmm0 # 16-byte Reload
-; CHECK-SSE-NEXT: pextrw $5, %xmm0, %edi
+; CHECK-SSE-NEXT: pextrw $5, %xmm0, %eax
+; CHECK-SSE-NEXT: movswl %ax, %edi
; CHECK-SSE-NEXT: movss {{.*#+}} xmm0 = [8.192E+3,0.0E+0,0.0E+0,0.0E+0]
; CHECK-SSE-NEXT: callq ldexpf@PLT
; CHECK-SSE-NEXT: callq __truncsfhf2@PLT
; CHECK-SSE-NEXT: movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
; CHECK-SSE-NEXT: movdqa (%rsp), %xmm0 # 16-byte Reload
-; CHECK-SSE-NEXT: pextrw $4, %xmm0, %edi
+; CHECK-SSE-NEXT: pextrw $4, %xmm0, %eax
+; CHECK-SSE-NEXT: movswl %ax, %edi
; CHECK-SSE-NEXT: movd {{.*#+}} xmm0 = [8.192E+3,0.0E+0,0.0E+0,0.0E+0]
; CHECK-SSE-NEXT: callq ldexpf@PLT
; CHECK-SSE-NEXT: callq __truncsfhf2@PLT
@@ -436,13 +440,15 @@ define <8 x half> @fmul_pow2_ldexp_8xhal
; CHECK-SSE-NEXT: # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]
; CHECK-SSE-NEXT: movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
; CHECK-SSE-NEXT: movdqa (%rsp), %xmm0 # 16-byte Reload
-; CHECK-SSE-NEXT: pextrw $3, %xmm0, %edi
+; CHECK-SSE-NEXT: pextrw $3, %xmm0, %eax
+; CHECK-SSE-NEXT: movswl %ax, %edi
; CHECK-SSE-NEXT: movss {{.*#+}} xmm0 = [8.192E+3,0.0E+0,0.0E+0,0.0E+0]
; CHECK-SSE-NEXT: callq ldexpf@PLT
; CHECK-SSE-NEXT: callq __truncsfhf2@PLT
; CHECK-SSE-NEXT: movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
; CHECK-SSE-NEXT: movdqa (%rsp), %xmm0 # 16-byte Reload
-; CHECK-SSE-NEXT: pextrw $2, %xmm0, %edi
+; CHECK-SSE-NEXT: pextrw $2, %xmm0, %eax
+; CHECK-SSE-NEXT: movswl %ax, %edi
; CHECK-SSE-NEXT: movd {{.*#+}} xmm0 = [8.192E+3,0.0E+0,0.0E+0,0.0E+0]
; CHECK-SSE-NEXT: callq ldexpf@PLT
; CHECK-SSE-NEXT: callq __truncsfhf2@PLT
@@ -450,14 +456,15 @@ define <8 x half> @fmul_pow2_ldexp_8xhal
; CHECK-SSE-NEXT: # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1],xmm0[2],mem[2],xmm0[3],mem[3]
; CHECK-SSE-NEXT: movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
; CHECK-SSE-NEXT: movdqa (%rsp), %xmm0 # 16-byte Reload
-; CHECK-SSE-NEXT: pextrw $1, %xmm0, %edi
+; CHECK-SSE-NEXT: pextrw $1, %xmm0, %eax
+; CHECK-SSE-NEXT: movswl %ax, %edi
; CHECK-SSE-NEXT: movss {{.*#+}} xmm0 = [8.192E+3,0.0E+0,0.0E+0,0.0E+0]
; CHECK-SSE-NEXT: callq ldexpf@PLT
; CHECK-SSE-NEXT: callq __truncsfhf2@PLT
; CHECK-SSE-NEXT: movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
; CHECK-SSE-NEXT: movdqa (%rsp), %xmm0 # 16-byte Reload
; CHECK-SSE-NEXT: movd %xmm0, %eax
-; CHECK-SSE-NEXT: movzwl %ax, %edi
+; CHECK-SSE-NEXT: movswl %ax, %edi
; CHECK-SSE-NEXT: movd {{.*#+}} xmm0 = [8.192E+3,0.0E+0,0.0E+0,0.0E+0]
; CHECK-SSE-NEXT: callq ldexpf@PLT
; CHECK-SSE-NEXT: callq __truncsfhf2@PLT
@@ -476,13 +483,15 @@ define <8 x half> @fmul_pow2_ldexp_8xhal
; CHECK-AVX2-NEXT: subq $72, %rsp
; CHECK-AVX2-NEXT: .cfi_def_cfa_offset 80
; CHECK-AVX2-NEXT: vmovdqa %xmm0, (%rsp) # 16-byte Spill
-; CHECK-AVX2-NEXT: vpextrw $7, %xmm0, %edi
+; CHECK-AVX2-NEXT: vpextrw $7, %xmm0, %eax
+; CHECK-AVX2-NEXT: movswl %ax, %edi
; CHECK-AVX2-NEXT: vmovss {{.*#+}} xmm0 = [8.192E+3,0.0E+0,0.0E+0,0.0E+0]
; CHECK-AVX2-NEXT: callq ldexpf@PLT
; CHECK-AVX2-NEXT: callq __truncsfhf2@PLT
; CHECK-AVX2-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
; CHECK-AVX2-NEXT: vmovdqa (%rsp), %xmm0 # 16-byte Reload
-; CHECK-AVX2-NEXT: vpextrw $6, %xmm0, %edi
+; CHECK-AVX2-NEXT: vpextrw $6, %xmm0, %eax
+; CHECK-AVX2-NEXT: movswl %ax, %edi
; CHECK-AVX2-NEXT: vmovd {{.*#+}} xmm0 = [8.192E+3,0.0E+0,0.0E+0,0.0E+0]
; CHECK-AVX2-NEXT: callq ldexpf@PLT
; CHECK-AVX2-NEXT: callq __truncsfhf2@PLT
@@ -490,13 +499,15 @@ define <8 x half> @fmul_pow2_ldexp_8xhal
; CHECK-AVX2-NEXT: # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1],xmm0[2],mem[2],xmm0[3],mem[3]
; CHECK-AVX2-NEXT: vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
; CHECK-AVX2-NEXT: vmovdqa (%rsp), %xmm0 # 16-byte Reload
-; CHECK-AVX2-NEXT: vpextrw $5, %xmm0, %edi
+; CHECK-AVX2-NEXT: vpextrw $5, %xmm0, %eax
+; CHECK-AVX2-NEXT: movswl %ax, %edi
; CHECK-AVX2-NEXT: vmovss {{.*#+}} xmm0 = [8.192E+3,0.0E+0,0.0E+0,0.0E+0]
; CHECK-AVX2-NEXT: callq ldexpf@PLT
; CHECK-AVX2-NEXT: callq __truncsfhf2@PLT
; CHECK-AVX2-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
; CHECK-AVX2-NEXT: vmovdqa (%rsp), %xmm0 # 16-byte Reload
-; CHECK-AVX2-NEXT: vpextrw $4, %xmm0, %edi
+; CHECK-AVX2-NEXT: vpextrw $4, %xmm0, %eax
+; CHECK-AVX2-NEXT: movswl %ax, %edi
; CHECK-AVX2-NEXT: vmovd {{.*#+}} xmm0 = [8.192E+3,0.0E+0,0.0E+0,0.0E+0]
; CHECK-AVX2-NEXT: callq ldexpf@PLT
; CHECK-AVX2-NEXT: callq __truncsfhf2@PLT
@@ -506,13 +517,15 @@ define <8 x half> @fmul_pow2_ldexp_8xhal
; CHECK-AVX2-NEXT: # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]
; CHECK-AVX2-NEXT: vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
; CHECK-AVX2-NEXT: vmovdqa (%rsp), %xmm0 # 16-byte Reload
-; CHECK-AVX2-NEXT: vpextrw $3, %xmm0, %edi
+; CHECK-AVX2-NEXT: vpextrw $3, %xmm0, %eax
+; CHECK-AVX2-NEXT: movswl %ax, %edi
; CHECK-AVX2-NEXT: vmovss {{.*#+}} xmm0 = [8.192E+3,0.0E+0,0.0E+0,0.0E+0]
; CHECK-AVX2-NEXT: callq ldexpf@PLT
; CHECK-AVX2-NEXT: callq __truncsfhf2@PLT
; CHECK-AVX2-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
; CHECK-AVX2-NEXT: vmovdqa (%rsp), %xmm0 # 16-byte Reload
-; CHECK-AVX2-NEXT: vpextrw $2, %xmm0, %edi
+; CHECK-AVX2-NEXT: vpextrw $2, %xmm0, %eax
+; CHECK-AVX2-NEXT: movswl %ax, %edi
; CHECK-AVX2-NEXT: vmovd {{.*#+}} xmm0 = [8.192E+3,0.0E+0,0.0E+0,0.0E+0]
; CHECK-AVX2-NEXT: callq ldexpf@PLT
; CHECK-AVX2-NEXT: callq __truncsfhf2@PLT
@@ -520,14 +533,15 @@ define <8 x half> @fmul_pow2_ldexp_8xhal
; CHECK-AVX2-NEXT: # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1],xmm0[2],mem[2],xmm0[3],mem[3]
; CHECK-AVX2-NEXT: vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
; CHECK-AVX2-NEXT: vmovdqa (%rsp), %xmm0 # 16-byte Reload
-; CHECK-AVX2-NEXT: vpextrw $1, %xmm0, %edi
+; CHECK-AVX2-NEXT: vpextrw $1, %xmm0, %eax
+; CHECK-AVX2-NEXT: movswl %ax, %edi
; CHECK-AVX2-NEXT: vmovss {{.*#+}} xmm0 = [8.192E+3,0.0E+0,0.0E+0,0.0E+0]
; CHECK-AVX2-NEXT: callq ldexpf@PLT
; CHECK-AVX2-NEXT: callq __truncsfhf2@PLT
; CHECK-AVX2-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
; CHECK-AVX2-NEXT: vmovdqa (%rsp), %xmm0 # 16-byte Reload
; CHECK-AVX2-NEXT: vmovd %xmm0, %eax
-; CHECK-AVX2-NEXT: movzwl %ax, %edi
+; CHECK-AVX2-NEXT: movswl %ax, %edi
; CHECK-AVX2-NEXT: vmovd {{.*#+}} xmm0 = [8.192E+3,0.0E+0,0.0E+0,0.0E+0]
; CHECK-AVX2-NEXT: callq ldexpf@PLT
; CHECK-AVX2-NEXT: callq __truncsfhf2@PLT
@@ -546,7 +560,8 @@ define <8 x half> @fmul_pow2_ldexp_8xhal
; CHECK-AVX512F-NEXT: subq $72, %rsp
; CHECK-AVX512F-NEXT: .cfi_def_cfa_offset 80
; CHECK-AVX512F-NEXT: vmovdqa %xmm0, (%rsp) # 16-byte Spill
-; CHECK-AVX512F-NEXT: vpextrw $7, %xmm0, %edi
+; CHECK-AVX512F-NEXT: vpextrw $7, %xmm0, %eax
+; CHECK-AVX512F-NEXT: movswl %ax, %edi
; CHECK-AVX512F-NEXT: vmovss {{.*#+}} xmm0 = [8.192E+3,0.0E+0,0.0E+0,0.0E+0]
; CHECK-AVX512F-NEXT: callq ldexpf@PLT
; CHECK-AVX512F-NEXT: vcvtps2ph $4, %xmm0, %xmm0
@@ -554,7 +569,8 @@ define <8 x half> @fmul_pow2_ldexp_8xhal
; CHECK-AVX512F-NEXT: vpinsrw $0, %eax, %xmm0, %xmm0
; CHECK-AVX512F-NEXT: vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
; CHECK-AVX512F-NEXT: vmovdqa (%rsp), %xmm0 # 16-byte Reload
-; CHECK-AVX512F-NEXT: vpextrw $6, %xmm0, %edi
+; CHECK-AVX512F-NEXT: vpextrw $6, %xmm0, %eax
+; CHECK-AVX512F-NEXT: movswl %ax, %edi
; CHECK-AVX512F-NEXT: vmovss {{.*#+}} xmm0 = [8.192E+3,0.0E+0,0.0E+0,0.0E+0]
; CHECK-AVX512F-NEXT: callq ldexpf@PLT
; CHECK-AVX512F-NEXT: vcvtps2ph $4, %xmm0, %xmm0
@@ -564,7 +580,8 @@ define <8 x half> @fmul_pow2_ldexp_8xhal
; CHECK-AVX512F-NEXT: # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1],xmm0[2],mem[2],xmm0[3],mem[3]
; CHECK-AVX512F-NEXT: vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
; CHECK-AVX512F-NEXT: vmovdqa (%rsp), %xmm0 # 16-byte Reload
-; CHECK-AVX512F-NEXT: vpextrw $5, %xmm0, %edi
+; CHECK-AVX512F-NEXT: vpextrw $5, %xmm0, %eax
+; CHECK-AVX512F-NEXT: movswl %ax, %edi
; CHECK-AVX512F-NEXT: vmovss {{.*#+}} xmm0 = [8.192E+3,0.0E+0,0.0E+0,0.0E+0]
; CHECK-AVX512F-NEXT: callq ldexpf@PLT
; CHECK-AVX512F-NEXT: vcvtps2ph $4, %xmm0, %xmm0
@@ -572,7 +589,8 @@ define <8 x half> @fmul_pow2_ldexp_8xhal
; CHECK-AVX512F-NEXT: vpinsrw $0, %eax, %xmm0, %xmm0
; CHECK-AVX512F-NEXT: vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
; CHECK-AVX512F-NEXT: vmovdqa (%rsp), %xmm0 # 16-byte Reload
-; CHECK-AVX512F-NEXT: vpextrw $4, %xmm0, %edi
+; CHECK-AVX512F-NEXT: vpextrw $4, %xmm0, %eax
+; CHECK-AVX512F-NEXT: movswl %ax, %edi
; CHECK-AVX512F-NEXT: vmovss {{.*#+}} xmm0 = [8.192E+3,0.0E+0,0.0E+0,0.0E+0]
; CHECK-AVX512F-NEXT: callq ldexpf@PLT
; CHECK-AVX512F-NEXT: vcvtps2ph $4, %xmm0, %xmm0
@@ -584,7 +602,8 @@ define <8 x half> @fmul_pow2_ldexp_8xhal
; CHECK-AVX512F-NEXT: # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]
; CHECK-AVX512F-NEXT: vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
; CHECK-AVX512F-NEXT: vmovdqa (%rsp), %xmm0 # 16-byte Reload
-; CHECK-AVX512F-NEXT: vpextrw $3, %xmm0, %edi
+; CHECK-AVX512F-NEXT: vpextrw $3, %xmm0, %eax
+; CHECK-AVX512F-NEXT: movswl %ax, %edi
; CHECK-AVX512F-NEXT: vmovss {{.*#+}} xmm0 = [8.192E+3,0.0E+0,0.0E+0,0.0E+0]
; CHECK-AVX512F-NEXT: callq ldexpf@PLT
; CHECK-AVX512F-NEXT: vcvtps2ph $4, %xmm0, %xmm0
@@ -592,7 +611,8 @@ define <8 x half> @fmul_pow2_ldexp_8xhal
; CHECK-AVX512F-NEXT: vpinsrw $0, %eax, %xmm0, %xmm0
; CHECK-AVX512F-NEXT: vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
; CHECK-AVX512F-NEXT: vmovdqa (%rsp), %xmm0 # 16-byte Reload
-; CHECK-AVX512F-NEXT: vpextrw $2, %xmm0, %edi
+; CHECK-AVX512F-NEXT: vpextrw $2, %xmm0, %eax
+; CHECK-AVX512F-NEXT: movswl %ax, %edi
; CHECK-AVX512F-NEXT: vmovss {{.*#+}} xmm0 = [8.192E+3,0.0E+0,0.0E+0,0.0E+0]
; CHECK-AVX512F-NEXT: callq ldexpf@PLT
; CHECK-AVX512F-NEXT: vcvtps2ph $4, %xmm0, %xmm0
@@ -602,7 +622,8 @@ define <8 x half> @fmul_pow2_ldexp_8xhal
; CHECK-AVX512F-NEXT: # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1],xmm0[2],mem[2],xmm0[3],mem[3]
; CHECK-AVX512F-NEXT: vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
; CHECK-AVX512F-NEXT: vmovdqa (%rsp), %xmm0 # 16-byte Reload
-; CHECK-AVX512F-NEXT: vpextrw $1, %xmm0, %edi
+; CHECK-AVX512F-NEXT: vpextrw $1, %xmm0, %eax
+; CHECK-AVX512F-NEXT: movswl %ax, %edi
; CHECK-AVX512F-NEXT: vmovss {{.*#+}} xmm0 = [8.192E+3,0.0E+0,0.0E+0,0.0E+0]
; CHECK-AVX512F-NEXT: callq ldexpf@PLT
; CHECK-AVX512F-NEXT: vcvtps2ph $4, %xmm0, %xmm0
@@ -611,7 +632,7 @@ define <8 x half> @fmul_pow2_ldexp_8xhal
; CHECK-AVX512F-NEXT: vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
; CHECK-AVX512F-NEXT: vmovdqa (%rsp), %xmm0 # 16-byte Reload
; CHECK-AVX512F-NEXT: vmovd %xmm0, %eax
-; CHECK-AVX512F-NEXT: movzwl %ax, %edi
+; CHECK-AVX512F-NEXT: movswl %ax, %edi
; CHECK-AVX512F-NEXT: vmovss {{.*#+}} xmm0 = [8.192E+3,0.0E+0,0.0E+0,0.0E+0]
; CHECK-AVX512F-NEXT: callq ldexpf@PLT
; CHECK-AVX512F-NEXT: vcvtps2ph $4, %xmm0, %xmm0

View file

@ -0,0 +1,143 @@
Patch-Source-1: https://github.com/llvm/llvm-project/commit/3d67cf681a728e4cf0ab9947c0dd07539dda8b74
Patch-Source-2: https://github.com/llvm/llvm-project/commit/78f39dc70c1feaea5130b90ea3fb7b3ddd62446b
--
From 3d67cf681a728e4cf0ab9947c0dd07539dda8b74 Mon Sep 17 00:00:00 2001
From: Min-Yih Hsu <min.hsu@sifive.com>
Date: Fri, 16 Feb 2024 16:19:56 -0800
Subject: [PATCH] [JITLink] Always unmap standard segments in
InProcessMemoryManager::deallocate (#81943)
Right now InProcessMemoryManager only releases a standard segment (via
sys::Memory::releaseMappedMemory) in `deallocate` when there is a
DeallocAction associated, leaving residual memory pages in the process
until termination.
Despite being a de facto memory leak, it won't cause a major issue if
users only create a single LLJIT instance per process, which is the most
common use cases. It will, however, drain virtual memory pages if we
create thousands of ephemeral LLJIT instances in the same process.
This patch fixes this issue by releasing every standard segments
regardless of the attached DeallocAction.
---
llvm/lib/ExecutionEngine/JITLink/JITLinkMemoryManager.cpp | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/llvm/lib/ExecutionEngine/JITLink/JITLinkMemoryManager.cpp b/llvm/lib/ExecutionEngine/JITLink/JITLinkMemoryManager.cpp
index 474a0b5160bcb..dacf0e6c8aa4f 100644
--- a/llvm/lib/ExecutionEngine/JITLink/JITLinkMemoryManager.cpp
+++ b/llvm/lib/ExecutionEngine/JITLink/JITLinkMemoryManager.cpp
@@ -449,8 +449,7 @@ void InProcessMemoryManager::deallocate(std::vector<FinalizedAlloc> Allocs,
for (auto &Alloc : Allocs) {
auto *FA = Alloc.release().toPtr<FinalizedAllocInfo *>();
StandardSegmentsList.push_back(std::move(FA->StandardSegments));
- if (!FA->DeallocActions.empty())
- DeallocActionsList.push_back(std::move(FA->DeallocActions));
+ DeallocActionsList.push_back(std::move(FA->DeallocActions));
FA->~FinalizedAllocInfo();
FinalizedAllocInfos.Deallocate(FA);
}
--
From 78f39dc70c1feaea5130b90ea3fb7b3ddd62446b Mon Sep 17 00:00:00 2001
From: Jonas Hahnfeld <hahnjo@hahnjo.de>
Date: Mon, 12 Feb 2024 19:45:52 +0100
Subject: [PATCH] [JITLink][RISCV] Use hashmap to find PCREL_HI20 edge (#78849)
As noted in issues #68594 and #73935, `JITLink/RISCV/ELF_ehframe.s`
fails with libstdc++'s expensive checks because `getRISCVPCRelHi20`
calls `std::equal_range` on the edges which may not be ordered by their
offset. Instead let `ELFJITLinker_riscv` build a hashmap of all edges
with type `R_RISCV_PCREL_HI20` that can be looked up in constant time.
Closes #73935
---
.../lib/ExecutionEngine/JITLink/ELF_riscv.cpp | 68 ++++++++++---------
1 file changed, 35 insertions(+), 33 deletions(-)
diff --git a/llvm/lib/ExecutionEngine/JITLink/ELF_riscv.cpp b/llvm/lib/ExecutionEngine/JITLink/ELF_riscv.cpp
index 2fcdfcf9c0669..0cf548ede9389 100644
--- a/llvm/lib/ExecutionEngine/JITLink/ELF_riscv.cpp
+++ b/llvm/lib/ExecutionEngine/JITLink/ELF_riscv.cpp
@@ -133,38 +133,6 @@ const uint8_t
namespace llvm {
namespace jitlink {
-static Expected<const Edge &> getRISCVPCRelHi20(const Edge &E) {
- using namespace riscv;
- assert((E.getKind() == R_RISCV_PCREL_LO12_I ||
- E.getKind() == R_RISCV_PCREL_LO12_S) &&
- "Can only have high relocation for R_RISCV_PCREL_LO12_I or "
- "R_RISCV_PCREL_LO12_S");
-
- const Symbol &Sym = E.getTarget();
- const Block &B = Sym.getBlock();
- orc::ExecutorAddrDiff Offset = Sym.getOffset();
-
- struct Comp {
- bool operator()(const Edge &Lhs, orc::ExecutorAddrDiff Offset) {
- return Lhs.getOffset() < Offset;
- }
- bool operator()(orc::ExecutorAddrDiff Offset, const Edge &Rhs) {
- return Offset < Rhs.getOffset();
- }
- };
-
- auto Bound =
- std::equal_range(B.edges().begin(), B.edges().end(), Offset, Comp{});
-
- for (auto It = Bound.first; It != Bound.second; ++It) {
- if (It->getKind() == R_RISCV_PCREL_HI20)
- return *It;
- }
-
- return make_error<JITLinkError>(
- "No HI20 PCREL relocation type be found for LO12 PCREL relocation type");
-}
-
static uint32_t extractBits(uint32_t Num, unsigned Low, unsigned Size) {
return (Num & (((1ULL << Size) - 1) << Low)) >> Low;
}
@@ -184,9 +152,43 @@ class ELFJITLinker_riscv : public JITLinker<ELFJITLinker_riscv> {
public:
ELFJITLinker_riscv(std::unique_ptr<JITLinkContext> Ctx,
std::unique_ptr<LinkGraph> G, PassConfiguration PassConfig)
- : JITLinker(std::move(Ctx), std::move(G), std::move(PassConfig)) {}
+ : JITLinker(std::move(Ctx), std::move(G), std::move(PassConfig)) {
+ JITLinkerBase::getPassConfig().PostAllocationPasses.push_back(
+ [this](LinkGraph &G) { return gatherRISCVPCRelHi20(G); });
+ }
private:
+ DenseMap<std::pair<const Block *, orc::ExecutorAddrDiff>, const Edge *>
+ RelHi20;
+
+ Error gatherRISCVPCRelHi20(LinkGraph &G) {
+ for (Block *B : G.blocks())
+ for (Edge &E : B->edges())
+ if (E.getKind() == R_RISCV_PCREL_HI20)
+ RelHi20[{B, E.getOffset()}] = &E;
+
+ return Error::success();
+ }
+
+ Expected<const Edge &> getRISCVPCRelHi20(const Edge &E) const {
+ using namespace riscv;
+ assert((E.getKind() == R_RISCV_PCREL_LO12_I ||
+ E.getKind() == R_RISCV_PCREL_LO12_S) &&
+ "Can only have high relocation for R_RISCV_PCREL_LO12_I or "
+ "R_RISCV_PCREL_LO12_S");
+
+ const Symbol &Sym = E.getTarget();
+ const Block &B = Sym.getBlock();
+ orc::ExecutorAddrDiff Offset = Sym.getOffset();
+
+ auto It = RelHi20.find({&B, Offset});
+ if (It != RelHi20.end())
+ return *It->second;
+
+ return make_error<JITLinkError>("No HI20 PCREL relocation type be found "
+ "for LO12 PCREL relocation type");
+ }
+
Error applyFixup(LinkGraph &G, Block &B, const Edge &E) const {
using namespace riscv;
using namespace llvm::support;

View file

@ -5,14 +5,14 @@ Subject: [PATCH 1/4] clang: add fortify include paths for musl triplets
When we have fortify headers this lets them get included.
---
lib/Driver/ToolChains/Linux.cpp | 12 ++++++++----
clang/lib/Driver/ToolChains/Linux.cpp | 12 ++++++++----
1 file changed, 8 insertions(+), 4 deletions(-)
diff --git a/lib/Driver/ToolChains/Linux.cpp b/lib/Driver/ToolChains/Linux.cpp
index 7fcdcf125..d5df4a240 100644
--- a/lib/Driver/ToolChains/Linux.cpp
+++ b/lib/Driver/ToolChains/Linux.cpp
@@ -622,10 +622,14 @@ void Linux::AddClangSystemIncludeArgs(const ArgList &DriverArgs,
diff --git a/clang/lib/Driver/ToolChains/Linux.cpp b/clang/lib/Driver/ToolChains/Linux.cpp
index 4300a2bdf..ea42426ff 100644
--- a/clang/lib/Driver/ToolChains/Linux.cpp
+++ b/clang/lib/Driver/ToolChains/Linux.cpp
@@ -663,10 +663,14 @@ void Linux::AddClangSystemIncludeArgs(const ArgList &DriverArgs,
if (getTriple().getOS() == llvm::Triple::RTEMS)
return;
@ -31,6 +31,3 @@ index 7fcdcf125..d5df4a240 100644
addExternCSystemInclude(DriverArgs, CC1Args, concat(SysRoot, "/usr/include"));
--
2.38.0

View file

@ -5,15 +5,15 @@ Subject: [PATCH 2/4] clang: enable fortify by default on optimizing musl
targets
---
lib/Frontend/InitPreprocessor.cpp | 5 +++++
clang/lib/Frontend/InitPreprocessor.cpp | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/lib/Frontend/InitPreprocessor.cpp b/lib/Frontend/InitPreprocessor.cpp
index 20bfbf144..9095c0f2f 100644
--- a/lib/Frontend/InitPreprocessor.cpp
+++ b/lib/Frontend/InitPreprocessor.cpp
@@ -1288,6 +1288,11 @@ static void InitializePredefinedMacros(const TargetInfo &TI,
Builder.defineMacro("__GLIBCXX_BITSIZE_INT_N_0", "128");
diff --git a/clang/lib/Frontend/InitPreprocessor.cpp b/clang/lib/Frontend/InitPreprocessor.cpp
index 1b91c86f9..6a43a0242 100644
--- a/clang/lib/Frontend/InitPreprocessor.cpp
+++ b/clang/lib/Frontend/InitPreprocessor.cpp
@@ -1361,6 +1361,11 @@ static void InitializePredefinedMacros(const TargetInfo &TI,
#undef TARGET_OS
}
+ // Enable fortify by default on musl when optimizing, but not with asan

View file

@ -9,10 +9,10 @@ Subject: [PATCH 3/4] clang: use --as-needed by default
1 file changed, 7 insertions(+)
diff --git a/clang/lib/Driver/ToolChains/Gnu.cpp b/clang/lib/Driver/ToolChains/Gnu.cpp
index f203cae1d..9e181a79a 100644
--- a/lib/Driver/ToolChains/Gnu.cpp
+++ b/lib/Driver/ToolChains/Gnu.cpp
@@ -560,6 +560,13 @@ void tools::gnutools::Linker::ConstructJob(Compilation &C, const JobAction &JA,
index 3015a7291..a8f334975 100644
--- a/clang/lib/Driver/ToolChains/Gnu.cpp
+++ b/clang/lib/Driver/ToolChains/Gnu.cpp
@@ -539,6 +539,13 @@ void tools::gnutools::Linker::ConstructJob(Compilation &C, const JobAction &JA,
bool NeedsSanitizerDeps = addSanitizerRuntimes(ToolChain, Args, CmdArgs);
bool NeedsXRayDeps = addXRayRuntime(ToolChain, Args, CmdArgs);
addLinkerCompressDebugSectionsOption(ToolChain, Args, CmdArgs);
@ -25,7 +25,7 @@ index f203cae1d..9e181a79a 100644
+
AddLinkerInputs(ToolChain, Inputs, Args, CmdArgs, JA);
addHIPRuntimeLibArgs(ToolChain, Args, CmdArgs);
addHIPRuntimeLibArgs(ToolChain, C, Args, CmdArgs);
--
2.38.0

View file

@ -0,0 +1,16 @@
Patch-Source: https://gitlab.alpinelinux.org/alpine/aports/-/merge_requests/73161#note_444390
Upstream-Issue: https://github.com/llvm/llvm-project/issues/56746
diff --git a/llvm/lib/Object/MachOObjectFile.cpp b/llvm/lib/Object/MachOObjectFile.cpp
index 812b2c0..33f2575 100644
--- a/llvm/lib/Object/MachOObjectFile.cpp
+++ b/llvm/lib/Object/MachOObjectFile.cpp
@@ -192,7 +192,7 @@ static Expected<MachOObjectFile::LoadCommandInfo>
getLoadCommandInfo(const MachOObjectFile &Obj, const char *Ptr,
uint32_t LoadCommandIndex) {
if (auto CmdOrErr = getStructOrErr<MachO::load_command>(Obj, Ptr)) {
- if (CmdOrErr->cmdsize + Ptr > Obj.getData().end())
+ if (CmdOrErr->cmdsize > Obj.getData().end() - Ptr)
return malformedError("load command " + Twine(LoadCommandIndex) +
" extends past end of file");
if (CmdOrErr->cmdsize < 8)

View file

@ -11,7 +11,7 @@ also see: https://reviews.llvm.org/D29969
this is supposedly fixed now, but for some reason it still isn't
--- a/llvm/cmake/modules/CMakeLists.txt
+++ b/llvm/cmake/modules/CMakeLists.txt
@@ -41,6 +41,8 @@
@@ -42,6 +42,8 @@ endif()
#
set(LLVM_CONFIG_CODE "
@ -20,12 +20,12 @@ this is supposedly fixed now, but for some reason it still isn't
# LLVM_BUILD_* values available only from LLVM build tree.
set(LLVM_BUILD_BINARY_DIR \"${LLVM_BINARY_DIR}\")
set(LLVM_BUILD_LIBRARY_DIR \"${LLVM_LIBRARY_DIR}\")
@@ -109,8 +111,6 @@
#
@@ -115,8 +117,6 @@ file(COPY .
# Generate LLVMConfig.cmake for the install tree.
#
-
-find_prefix_from_config(LLVM_CONFIG_CODE LLVM_INSTALL_PREFIX "${LLVM_INSTALL_PACKAGE_DIR}")
-find_prefix_from_config(LLVM_CONFIG_CODE LLVM_INSTALL_PREFIX "${LLVM_INSTALL_PACKAGE_DIR}")
-
extend_path(LLVM_CONFIG_MAIN_INCLUDE_DIR "\${LLVM_INSTALL_PREFIX}" "${CMAKE_INSTALL_INCLUDEDIR}")
# This is the same as the above because the handwritten and generated headers
# are combined in one directory at install time.

View file

@ -0,0 +1,22 @@
https://github.com/llvm/llvm-project/issues/47657
--- a/llvm/test/ExecutionEngine/Interpreter/intrinsics.ll
+++ b/llvm/test/ExecutionEngine/Interpreter/intrinsics.ll
@@ -13,8 +13,6 @@
declare double @llvm.trunc.f64(double)
declare float @llvm.round.f32(float)
declare double @llvm.round.f64(double)
-declare float @llvm.roundeven.f32(float)
-declare double @llvm.roundeven.f64(double)
declare float @llvm.copysign.f32(float, float)
declare double @llvm.copysign.f64(double, double)
@@ -31,8 +29,6 @@
%trunc64 = call double @llvm.trunc.f64(double 0.000000e+00)
%round32 = call float @llvm.round.f32(float 0.000000e+00)
%round64 = call double @llvm.round.f64(double 0.000000e+00)
- %roundeven32 = call float @llvm.roundeven.f32(float 0.000000e+00)
- %roundeven64 = call double @llvm.roundeven.f64(double 0.000000e+00)
%copysign32 = call float @llvm.copysign.f32(float 0.000000e+00, float 0.000000e+00)
%copysign64 = call double @llvm.copysign.f64(double 0.000000e+00, double 0.000000e+00)
ret i32 0