Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • tdptheking/packages
  • yuriy-chumak/packages
  • peter/packages
  • andri0500/packages
  • ivmai77/packages
  • jonesv/packages
  • systemdlete/packages
  • Osvaldorino/packages
  • lubod/packages
  • Bdragon/packages
  • ska/packages
  • Le1gh/packages
  • dimitsos/packages
  • arcayr/packages
  • alicela1n/packages
  • djt/packages
  • dusxmt/packages
  • lstarnes/packages
  • smaeul/packages
  • krazier/packages
  • koorogi/packages
  • shizonic/packages
  • gavinhoward/packages
  • sroracle/packages
  • adelie/packages
  • alyx/packages
  • sonicrules1234/packages
  • Rsamoraj11/packages
  • ndowens04/packages
  • jogness/packages
  • bunny/packages
  • rmccask/packages
  • zx2c4/packages
  • ndowens/packages
  • CyberLeo/packages
  • paper/packages
  • Ermine/packages
  • zephy/packages
  • ashquarky/adelie-packages
  • mahiuchun/packages
  • TobiX/packages
  • firasuke/packages
42 results
Show changes
Showing
with 1867 additions and 0 deletions
# Contributor: Travis Tilley <ttilley@gmail.com>
# Contributor: Mitch Tishmack <mitch.tishmack@gmail.com>
# Contributor: Jakub Jirutka <jakub@jirutka.cz>
# Maintainer: A. Wilcox <awilfox@adelielinux.org>
_pkgname=llvm
pkgver=16.0.6
_majorver=${pkgver%%.*}
pkgname=$_pkgname$_majorver
pkgrel=0
pkgdesc="Low Level Virtual Machine compiler system, version $_majorver"
url="https://llvm.org/"
arch="all"
options="!checkroot !dbg"
license="NCSA AND (Apache-2.0 WITH LLVM-exception)"
depends=""
depends_dev="$pkgname=$pkgver-r$pkgrel libexecinfo-dev libxml2-dev"
checkdepends="cmd:which"
makedepends="binutils-dev chelf chrpath cmake file libexecinfo-dev libffi-dev
libxml2-dev python3 zlib-dev"
subpackages="$pkgname-static $pkgname-libs $pkgname-dev
$pkgname-test-utils:_test_utils"
source="https://github.com/llvm/llvm-project/releases/download/llvmorg-$pkgver/llvm-project-$pkgver.src.tar.xz
llvm-fix-build-with-musl-libc.patch
disable-FileSystemTest.CreateDir-perms-assert.patch
dyld-elf-ppc32.patch
exegesis-mcjit.patch
graph-diff-simple.txt
hexagon.patch
macho32.patch
musl-ppc64-elfv2.patch
ppc-gcc-bug.patch
python3-test.patch
roundeven.patch
"
builddir="$srcdir/$_pkgname-project-$pkgver.src/llvm"
# ARM has few failures in test suite that we don't care about currently and
# also it takes forever to run them on the builder.
case "$CARCH" in
arm*) options="$options !check";;
esac
# Whether is this package the default (latest) LLVM version.
_default_llvm="no"
if [ "$_default_llvm" = yes ]; then
provides="llvm=$pkgver-r$pkgrel"
replaces="llvm"
fi
# 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
# even LLVM-specific variables, that are related to these paths, actually
# don't work (in llvm 3.7).
#
# When building a software that depends on LLVM, utility llvm-config should be
# used to discover where is LLVM installed. It provides options to print
# path of bindir, includedir, and libdir separately, but in its source, all
# these paths are actually hard-coded against INSTALL_PREFIX. We can patch it
# and move paths manually, but I'm really not sure what it may break...
#
# Also note that we should *not* add version suffix to files in llvm bindir!
# It breaks build system of some software that depends on LLVM, because they
# don't expect these files to have a sufix.
#
# So, we install all the LLVM files into /usr/lib/llvm$_majorver.
# BTW, Fedora and Debian do the same thing.
#
_prefix="usr/lib/llvm$_majorver"
prepare() {
default_prepare
# https://bugs.llvm.org//show_bug.cgi?id=31870
rm test/tools/llvm-symbolizer/print_context.c
case $CARCH in
pmmx|x86|ppc|armhf|armv7)
# Appears to not work when building 32-bit code on 64-bit host.
rm test/tools/llvm-size/radix.test;;
esac
case $CARCH in
ppc)
# unknown issue, only used for bootstrapping (#1244)
for _failing_test in prettyprint_types.s \
simplified-template-names.s; do
rm test/tools/llvm-dwarfdump/X86/$_failing_test;
done;;
esac
# appears to be an issue on musl and glibc, but only fails on musl:
# https://github.com/NixOS/nixpkgs/blob/bb7e9e46/pkgs/development/compilers/llvm/8/llvm.nix#L74
rm -f test/CodeGen/AArch64/wineh4.mir
#1053
rm -fr \
test/tools/UpdateTestChecks \
test/ExecutionEngine/MCJIT/load-object-a.ll \
;
#1202
case $CARCH in
pmmx)
mv "$srcdir"/graph-diff-simple.txt \
test/tools/llvm-xray/X86/graph-diff-simple.txt ;;
esac
}
build() {
# Auto-detect it by guessing either.
ffi_include_dir="$(pkg-config --cflags-only-I libffi | sed 's|^-I||g')"
case $CTARGET_ARCH in
pmmx)
# The standard precision breaks more than it fixes; there are
# 4 failures in standard mode and only (different) 1 in fast.
export CXXFLAGS="$CXXFLAGS -fexcess-precision=fast";;
esac
# Disabled m68k because the endianness fix from llvm18 doesn't work.
cmake -G "Unix Makefiles" -Wno-dev \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX=/$_prefix \
-DCMAKE_VERBOSE_MAKEFILE=NO \
-DFFI_INCLUDE_DIR="$ffi_include_dir" \
-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=ON \
-DLLVM_DEFAULT_TARGET_TRIPLE="$CBUILD" \
-DLLVM_ENABLE_ASSERTIONS=OFF \
-DLLVM_ENABLE_FFI=ON \
-DLLVM_ENABLE_LIBCXX=OFF \
-DLLVM_ENABLE_PIC=ON \
-DLLVM_ENABLE_RTTI=ON \
-DLLVM_ENABLE_SPHINX=OFF \
-DLLVM_ENABLE_TERMINFO=ON \
-DLLVM_ENABLE_ZLIB=ON \
-DLLVM_HOST_TRIPLE="$CHOST" \
-DLLVM_INCLUDE_BENCHMARKS=OFF \
-DLLVM_INCLUDE_EXAMPLES=OFF \
-DLLVM_INSTALL_UTILS=ON \
-DLLVM_LINK_LLVM_DYLIB=ON \
-DLLVM_TARGETS_TO_BUILD='AArch64;AMDGPU;ARM;BPF;Hexagon;Lanai;Mips;MSP430;PowerPC;RISCV;Sparc;SystemZ;WebAssembly;X86;XCore' \
-Bbuild .
make -C build llvm-tblgen
make -C build
python3 utils/lit/setup.py build
}
check() {
make -C build check-llvm
}
package() {
make DESTDIR="$pkgdir" -C build install
cd "$pkgdir"/$_prefix
# Remove RPATHs.
file lib/*.so bin/* \
| awk -F: '$2~/ELF/{print $1}' \
| xargs -r chrpath -d
# Thread 3 requires a lot of stack space to LTO when targeting ARM.
# Note that this occurs even when crossing (on a ppc64 host).
chelf -s 1048576 bin/llvm-lto2
# Symlink files from /usr/lib/llvm*/bin to /usr/bin.
mkdir -p "$pkgdir"/usr/bin
for full_name in bin/*; do
bin_name=${full_name##*/}
# If this package provides=llvm (i.e. it's the default/latest
# llvm package), omit version infix/suffix.
if [ "$_default_llvm" = yes ]; then
link_name=$bin_name
# ..otherwise, add version infix/suffix to the executable name.
else case "$bin_name" in
llvm-*) link_name="llvm$_majorver-${bin_name#llvm-}";;
*) link_name="$bin_name$_majorver";;
esac
fi
case "$name" in
FileCheck | obj2yaml | yaml2obj) continue;;
esac
ln -s ../lib/llvm$_majorver/bin/$bin_name "$pkgdir"/usr/bin/$link_name
done
# Move /usr/lib/$pkgname/include/ into /usr/include/$pkgname/
# and symlink it back.
mkdir -p "$pkgdir"/usr/include/$pkgname
mv include/* "$pkgdir"/usr/include/$pkgname/
rmdir include
ln -s ../../include/$pkgname include
ln -s "$pkgdir"/usr/lib/cmake/llvm ../$pkgname/lib/cmake/llvm
}
static() {
pkgdesc="LLVM $_majorver static libraries"
_common_subpkg
mkdir -p "$subpkgdir"/$_prefix/lib
mv "$pkgdir"/$_prefix/lib/*.a "$subpkgdir"/$_prefix/lib/
strip -d "$subpkgdir"/$_prefix/lib/*.a
}
libs() {
pkgdesc="LLVM $_majorver runtime library"
main_soname="libLLVM-$_majorver.so"
ver_soname="libLLVM-$pkgver.so"
_common_subpkg
# 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/$main_soname "$subpkgdir"/usr/lib/
ln -s $main_soname "$subpkgdir"/usr/lib/$ver_soname
strip "$subpkgdir"/usr/lib/$ver_soname #797
# And also symlink it back to the LLVM prefix.
mkdir -p "$subpkgdir"/$_prefix/lib
ln -s ../../$main_soname "$subpkgdir"/$_prefix/lib/$main_soname
ln -s ../../$main_soname "$subpkgdir"/$_prefix/lib/$ver_soname
}
dev() {
_common_subpkg
default_dev
mkdir -p "$subpkgdir"/$_prefix/bin
mv "$pkgdir"/$_prefix/lib "$subpkgdir"/$_prefix/
mv "$pkgdir"/$_prefix/include "$subpkgdir"/$_prefix/
mv "$pkgdir"/$_prefix/bin/llvm-config "$subpkgdir"/$_prefix/bin/
}
_test_utils() {
pkgdesc="LLVM $_majorver utilities for executing LLVM and Clang style test suites"
depends="python3"
_common_subpkg
replaces=""
litver="$(python3 "$builddir"/utils/lit/setup.py --version 2>/dev/null \
| sed 's/\.dev.*$//')"
test -n "$litver" || return 1
provides="$provides lit=$litver-r$pkgrel"
cd "$builddir"/build
install -D -m 755 bin/FileCheck "$subpkgdir"/$_prefix/bin/FileCheck
install -D -m 755 bin/count "$subpkgdir"/$_prefix/bin/count
install -D -m 755 bin/not "$subpkgdir"/$_prefix/bin/not
python3 ../utils/lit/setup.py install --prefix=/usr --root="$subpkgdir"
ln -s ../../../bin/lit "$subpkgdir"/$_prefix/bin/lit
}
_common_subpkg() {
if [ "$_default_llvm" = yes ]; then
replaces="llvm${subpkgname#$pkgname}"
provides="$replaces=$pkgver-r$pkgrel"
fi
}
sha512sums="89a67ebfbbc764cc456e8825ecfa90707741f8835b1b2adffae0b227ab1fe5ca9cce75b0efaffc9ca8431cae528dc54fd838867a56a2b645344d9e82d19ab1b7 llvm-project-16.0.6.src.tar.xz
e6fec46f3a1183774e4a47b81f3287adc5aa28ebdd52f614c1111fb157cd3137d1b86e04ca76a92b192c900eb5fa4c44f0c00984da14f0a9bb3ee8e488773e00 llvm-fix-build-with-musl-libc.patch
8e694af50a9f1f8a3dcf7c0e1ce1165237011767e3514271984877882962e492057efd16f0e6e303ee534a48c039c8ec00ed8a34eb9e9826b0324100292695f9 disable-FileSystemTest.CreateDir-perms-assert.patch
962ea62f96927f397a234c8770fd5a41d5c8ef528de56da6da76908369ee0e9faca2fcba46b3957a928b8138b46c7c0d8c5f353088009e1921f9c3cfffd96081 dyld-elf-ppc32.patch
5f24f99e31b8e0d1d7a7253be028df55f3524ff600c037404a4870ed22c02467f378b222d7fdd3d7af5b1ef006a90ec0c32c44122771e2ea8763eb62dcfca9dc exegesis-mcjit.patch
a1533f4b9d35e1069fd065fbeb5fedce96fa49fdb007f994d8921d8a04cf2caadca276bbd9553ff86040b0f9dfce489c385fa2a7434e2dee3732942e6914db4e graph-diff-simple.txt
807587a0c897d47a01a846c5c4f7cbf1f2d16437a163b66ee2381a7147e9d04b0141b2c76d022db61903d0d2841ddb267ba98c66c9e41501ca41837659743df8 hexagon.patch
de9791cc476817782b553c4edab696132da4ed2b9a3d80dbf1b85b7dc7a8c5e4caf14f2f26e33c27cd80a91b36709d3b24caea910c0a6315ffbb297cb748468d macho32.patch
bec1fe4761dae33a8012a54b7bbdd179cac82febcd46ace1844772c06f207661c903f05fcb7a5ebbbece3e33a88b20a5d9b31b40e8a8cd5c626aec04cb6735be musl-ppc64-elfv2.patch
bda83678acb97be4d4236179792b3555b8000242fa6bd9e2e78dcd4f6182395df7fa9b8742fde946f19b668615ab37db8670340d43683787d36c540937bca523 ppc-gcc-bug.patch
89ef5fbab039b017a5652656adf17b680525f1c5dd0b1afc8034fe0b34a2ca196d87640f54cc826356cfcd88c6e5f10754b7e38f04ca49ede4f3864080b787bd python3-test.patch
5e0868a96ecd3344a4badb3c23e7e9060a96e3fc7cb4a092febca93eff8c040839041c7a3c8a29955541b585081f84ab8c1ced26198ac93ad2d9db616faf1088 roundeven.patch"
Do not assert permissions of file created in /tmp directory.
This assertion fails, probably due to some specific setup of /tmp
on build servers.
FAIL: LLVM-Unit :: Support/SupportTests/FileSystemTest.CreateDir (1293 of 17222)
******************** TEST 'LLVM-Unit :: Support/SupportTests/FileSystemTest.CreateDir' FAILED ********************
Note: Google Test filter = FileSystemTest.CreateDir
[==========] Running 1 test from 1 test case.
[----------] Global test environment set-up.
[----------] 1 test from FileSystemTest
[ RUN ] FileSystemTest.CreateDir
/home/buildozer/aports/testing/llvm3.9/src/llvm-3.9.1.src/unittests/Support/Path.cpp:591: Failure
Value of: fs::perms::owner_read | fs::perms::owner_exe
Actual: 320
Expected: Status.permissions() & fs::perms::all_all
Which is: 448
--- a/unittests/Support/Path.cpp
+++ b/unittests/Support/Path.cpp
@@ -994,23 +994,23 @@
ASSERT_NO_ERROR(fs::remove(Twine(TestDirectory) + "foo"));
#ifdef LLVM_ON_UNIX
- // Set a 0000 umask so that we can test our directory permissions.
- mode_t OldUmask = ::umask(0000);
-
- fs::file_status Status;
- ASSERT_NO_ERROR(
- fs::create_directory(Twine(TestDirectory) + "baz500", false,
- fs::perms::owner_read | fs::perms::owner_exe));
- ASSERT_NO_ERROR(fs::status(Twine(TestDirectory) + "baz500", Status));
- ASSERT_EQ(Status.permissions() & fs::perms::all_all,
- fs::perms::owner_read | fs::perms::owner_exe);
- ASSERT_NO_ERROR(fs::create_directory(Twine(TestDirectory) + "baz777", false,
- fs::perms::all_all));
- ASSERT_NO_ERROR(fs::status(Twine(TestDirectory) + "baz777", Status));
- ASSERT_EQ(Status.permissions() & fs::perms::all_all, fs::perms::all_all);
-
- // Restore umask to be safe.
- ::umask(OldUmask);
+// // Set a 0000 umask so that we can test our directory permissions.
+// mode_t OldUmask = ::umask(0000);
+//
+// fs::file_status Status;
+// ASSERT_NO_ERROR(
+// fs::create_directory(Twine(TestDirectory) + "baz500", false,
+// fs::perms::owner_read | fs::perms::owner_exe));
+// ASSERT_NO_ERROR(fs::status(Twine(TestDirectory) + "baz500", Status));
+// ASSERT_EQ(Status.permissions() & fs::perms::all_all,
+// fs::perms::owner_read | fs::perms::owner_exe);
+// ASSERT_NO_ERROR(fs::create_directory(Twine(TestDirectory) + "baz777", false,
+// fs::perms::all_all));
+// ASSERT_NO_ERROR(fs::status(Twine(TestDirectory) + "baz777", Status));
+// ASSERT_EQ(Status.permissions() & fs::perms::all_all, fs::perms::all_all);
+//
+// // Restore umask to be safe.
+// ::umask(OldUmask);
#endif
#ifdef _WIN32
Author: A. Wilcox <awilfox@adelielinux.org>
This isn't the proper fix, but debugging the LLVM formatter is a bit
above my paygrade at the moment.
The issue shows up in the DWARF X86 test on ppc and armv7:
error: Simplified template DW_AT_name could not be reconstituted:
original: f3<char, '\x00', '\x01', '\x06', '\a', '\r', '\x0e', '\x1f', ' ', '!', '\x7f', '\x80'>
reconstituted: f3<char, '\x00', '\x00', '\x00', '\a', '\r', '\x00', '\x00', ' ', '!', '\x00', '\x00'>
With this patch, this error does not occur. Debugging shows that the
llvm::format overload called in the error case is <long long>, so I
think it is having an issue converting a 64-bit value on platforms
where char is default-unsigned.
(pmmx does not show this issue, and has signed char.)
--- llvm-14.0.6.src/lib/DebugInfo/DWARF/DWARFDie.cpp.old 2022-06-22 16:46:24.000000000 +0000
+++ llvm-14.0.6.src/lib/DebugInfo/DWARF/DWARFDie.cpp 2022-11-28 10:32:05.573627744 +0000
@@ -506,7 +506,7 @@
OS << (char)Val;
OS << "'";
} else if (Val < 256)
- OS << to_string(llvm::format("'\\x%02x'", Val));
+ OS << to_string(llvm::format("'\\x%02x'", (unsigned char)Val));
else if (Val <= 0xFFFF)
OS << to_string(llvm::format("'\\u%04x'", Val));
else
Author: A. Wilcox <awilfox@adelielinux.org>
Upstream-Status: Pending
This implements the R_PPC_REL32 relocation type, which is needed for the
OrcJIT to work properly on 32-bit PowerPC.
Needs more tests before submitting upstream, but seems to DTRT.
--- llvm-14.0.6.src/lib/ExecutionEngine/RuntimeDyld/RuntimeDyldELF.cpp.old 2022-06-22 16:46:24.000000000 +0000
+++ llvm-14.0.6.src/lib/ExecutionEngine/RuntimeDyld/RuntimeDyldELF.cpp 2022-11-28 06:33:12.239921624 +0000
@@ -825,6 +825,13 @@
case ELF::R_PPC_ADDR16_HA:
writeInt16BE(LocalAddress, applyPPCha(Value + Addend));
break;
+ case ELF::R_PPC_REL32:
+ uint32_t FinalAddress = Section.getLoadAddressWithOffset(Offset);
+ int64_t delta = static_cast<int64_t>(Value - FinalAddress + Addend);
+ if (SignExtend64<32>(delta) != delta)
+ llvm_unreachable("Relocation R_PPC_REL32 overflow");
+ writeInt32BE(LocalAddress, delta);
+ break;
}
}
This diff is collapsed.
#RUN: llvm-xray graph-diff -o - -c min -b min -m %S/Inputs/simple-instrmap.yaml \
#RUN: %S/Inputs/graph-diff-A.yaml %S/Inputs/graph-diff-B.yaml \
#RUN: | FileCheck %s -check-prefix=VCEC
#RUN: llvm-xray graph-diff -o - -c min -m %S/Inputs/simple-instrmap.yaml \
#RUN: %S/Inputs/graph-diff-A.yaml %S/Inputs/graph-diff-B.yaml \
#RUN: | FileCheck %s -check-prefix=EC
#RUN: llvm-xray graph-diff -o - -b min -m %S/Inputs/simple-instrmap.yaml \
#RUN: %S/Inputs/graph-diff-A.yaml %S/Inputs/graph-diff-B.yaml \
#RUN: | FileCheck %s -check-prefix=VC
#RUN: llvm-xray graph-diff -o - -e min -v min -m %S/Inputs/simple-instrmap.yaml \
#RUN: %S/Inputs/graph-diff-A.yaml %S/Inputs/graph-diff-B.yaml \
#RUN: | FileCheck %s -check-prefix=ELVL
#RUN: llvm-xray graph-diff -o - -e min -m %S/Inputs/simple-instrmap.yaml \
#RUN: %S/Inputs/graph-diff-A.yaml %S/Inputs/graph-diff-B.yaml \
#RUN: | FileCheck %s -check-prefix=EL
#RUN: llvm-xray graph-diff -o - -v min -m %S/Inputs/simple-instrmap.yaml \
#RUN: %S/Inputs/graph-diff-A.yaml %S/Inputs/graph-diff-B.yaml \
#RUN: | FileCheck %s -check-prefix=VL
#RUN: llvm-xray graph-diff -o - -v min -b min -m %S/Inputs/simple-instrmap.yaml \
#RUN: %S/Inputs/graph-diff-A.yaml %S/Inputs/graph-diff-B.yaml \
#RUN: | FileCheck %s -check-prefix=VLVC
#RUN: llvm-xray graph-diff -o - -e min -c min -m %S/Inputs/simple-instrmap.yaml \
#RUN: %S/Inputs/graph-diff-A.yaml %S/Inputs/graph-diff-B.yaml \
#RUN: | FileCheck %s -check-prefix=ELEC
#VCEC: digraph xrayDiff {
#VCEC-DAG: F[[F0NO:[0-9]+]] [label="F0"]
#VCEC-DAG: F[[N1NO:[0-9]+]] [label="#1" color="#276419"]
#VCEC-DAG: F[[N2NO:[0-9]+]] [label="#2" color="#276419"]
#VCEC-DAG: F[[N3NO:[0-9]+]] [label="#3" color="#276419"]
#VCEC-DAG: F[[N4NO:[0-9]+]] [label="#4" color="#9BCE61"]
#VCEC-DAG: F[[N5NO:[0-9]+]] [label="#5" color="#F7F7F7"]
#VCEC-DAG: F[[N6NO:[0-9]+]] [label="#6" color="#F5C4E0"]
#VCEC-DAG: F[[N7NO:[0-9]+]] [label="#7" color="#E17FB4"]
#VCEC-DAG: F[[N8NO:[0-9]+]] [label="#8" color="#CB3088"]
#VCEC-DAG: F[[N9NO:[0-9]+]] [label="#9" color="#AD0E69"]
#VCEC-DAG: F[[NANO:[0-9]+]] [label="#10" color="#00FF00"]
#VCEC-DAG: F[[NBNO:[0-9]+]] [label="#11" color="#FF0000"]
#VCEC-DAG: F{{.*}}[[F0NO]] -> F{{.*}}[[N1NO]] [tooltip="F0 -> #1" label="" color="#276419" labelfontcolor="#276419" penwidth=8.00]
#VCEC-DAG: F{{.*}}[[F0NO]] -> F{{.*}}[[N2NO]] [tooltip="F0 -> #2" label="" color="#276419" labelfontcolor="#276419" penwidth=3.00]
#VCEC-DAG: F{{.*}}[[F0NO]] -> F{{.*}}[[N3NO]] [tooltip="F0 -> #3" label="" color="#276419" labelfontcolor="#276419" penwidth=1.33]
#VCEC-DAG: F{{.*}}[[F0NO]] -> F{{.*}}[[N4NO]] [tooltip="F0 -> #4" label="" color="#9BCE61" labelfontcolor="#9BCE61" penwidth=1.00]
#VCEC-DAG: F{{.*}}[[F0NO]] -> F{{.*}}[[N5NO]] [tooltip="F0 -> #5" label="" color="#F7F7F7" labelfontcolor="#F7F7F7" penwidth=1.00]
#VCEC-DAG: F{{.*}}[[F0NO]] -> F{{.*}}[[N6NO]] [tooltip="F0 -> #6" label="" color="#F5C4E0" labelfontcolor="#F5C4E0" penwidth=1.00]
#VCEC-DAG: F{{.*}}[[F0NO]] -> F{{.*}}[[N7NO]] [tooltip="F0 -> #7" label="" color="#E17FB4" labelfontcolor="#E17FB4" penwidth=1.00]
#VCEC-DAG: F{{.*}}[[F0NO]] -> F{{.*}}[[N8NO]] [tooltip="F0 -> #8" label="" color="#CB3088" labelfontcolor="#CB3088" penwidth=1.00]
#VCEC-DAG: F{{.*}}[[F0NO]] -> F{{.*}}[[N9NO]] [tooltip="F0 -> #9" label="" color="#AD0E69" labelfontcolor="#AD0E69" penwidth=1.00]
#VCEC-DAG: F{{.*}}[[F0NO]] -> F{{.*}}[[NANO]] [tooltip="F0 -> #10" label="" color="#00FF00" labelfontcolor="#00FF00" penwidth=1.00]
#VCEC-DAG: F{{.*}}[[F0NO]] -> F{{.*}}[[NBNO]] [tooltip="F0 -> #11" label="" color="#FF0000" labelfontcolor="#FF0000" penwidth=1.00]
#VCEC-NEXT:}
#EC: digraph xrayDiff {
#EC-DAG: F[[F0NO:[0-9]+]] [label="F0"]
#EC-DAG: F[[N1NO:[0-9]+]] [label="#1" color="black"]
#EC-DAG: F[[N2NO:[0-9]+]] [label="#2" color="black"]
#EC-DAG: F[[N3NO:[0-9]+]] [label="#3" color="black"]
#EC-DAG: F[[N4NO:[0-9]+]] [label="#4" color="black"]
#EC-DAG: F[[N5NO:[0-9]+]] [label="#5" color="black"]
#EC-DAG: F[[N6NO:[0-9]+]] [label="#6" color="black"]
#EC-DAG: F[[N7NO:[0-9]+]] [label="#7" color="black"]
#EC-DAG: F[[N8NO:[0-9]+]] [label="#8" color="black"]
#EC-DAG: F[[N9NO:[0-9]+]] [label="#9" color="black"]
#EC-DAG: F[[NANO:[0-9]+]] [label="#10" color="#00FF00"]
#EC-DAG: F[[NBNO:[0-9]+]] [label="#11" color="#FF0000"]
#EC-DAG: F{{.*}}[[F0NO]] -> F{{.*}}[[N1NO]] [tooltip="F0 -> #1" label="" color="#276419" labelfontcolor="#276419" penwidth=8.00]
#EC-DAG: F{{.*}}[[F0NO]] -> F{{.*}}[[N2NO]] [tooltip="F0 -> #2" label="" color="#276419" labelfontcolor="#276419" penwidth=3.00]
#EC-DAG: F{{.*}}[[F0NO]] -> F{{.*}}[[N3NO]] [tooltip="F0 -> #3" label="" color="#276419" labelfontcolor="#276419" penwidth=1.33]
#EC-DAG: F{{.*}}[[F0NO]] -> F{{.*}}[[N4NO]] [tooltip="F0 -> #4" label="" color="#9BCE61" labelfontcolor="#9BCE61" penwidth=1.00]
#EC-DAG: F{{.*}}[[F0NO]] -> F{{.*}}[[N5NO]] [tooltip="F0 -> #5" label="" color="#F7F7F7" labelfontcolor="#F7F7F7" penwidth=1.00]
#EC-DAG: F{{.*}}[[F0NO]] -> F{{.*}}[[N6NO]] [tooltip="F0 -> #6" label="" color="#F5C4E0" labelfontcolor="#F5C4E0" penwidth=1.00]
#EC-DAG: F{{.*}}[[F0NO]] -> F{{.*}}[[N7NO]] [tooltip="F0 -> #7" label="" color="#E17FB4" labelfontcolor="#E17FB4" penwidth=1.00]
#EC-DAG: F{{.*}}[[F0NO]] -> F{{.*}}[[N8NO]] [tooltip="F0 -> #8" label="" color="#CB3088" labelfontcolor="#CB3088" penwidth=1.00]
#EC-DAG: F{{.*}}[[F0NO]] -> F{{.*}}[[N9NO]] [tooltip="F0 -> #9" label="" color="#AD0E69" labelfontcolor="#AD0E69" penwidth=1.00]
#EC-DAG: F{{.*}}[[F0NO]] -> F{{.*}}[[NANO]] [tooltip="F0 -> #10" label="" color="#00FF00" labelfontcolor="#00FF00" penwidth=1.00]
#EC-DAG: F{{.*}}[[F0NO]] -> F{{.*}}[[NBNO]] [tooltip="F0 -> #11" label="" color="#FF0000" labelfontcolor="#FF0000" penwidth=1.00]
#EC-NEXT:}
#VC: digraph xrayDiff {
#VC-DAG: F[[F0NO:[0-9]+]] [label="F0"]
#VC-DAG: F[[N1NO:[0-9]+]] [label="#1" color="#276419"]
#VC-DAG: F[[N2NO:[0-9]+]] [label="#2" color="#276419"]
#VC-DAG: F[[N3NO:[0-9]+]] [label="#3" color="#276419"]
#VC-DAG: F[[N4NO:[0-9]+]] [label="#4" color="#9BCE61"]
#VC-DAG: F[[N5NO:[0-9]+]] [label="#5" color="#F7F7F7"]
#VC-DAG: F[[N6NO:[0-9]+]] [label="#6" color="#F5C4E0"]
#VC-DAG: F[[N7NO:[0-9]+]] [label="#7" color="#E17FB4"]
#VC-DAG: F[[N8NO:[0-9]+]] [label="#8" color="#CB3088"]
#VC-DAG: F[[N9NO:[0-9]+]] [label="#9" color="#AD0E69"]
#VC-DAG: F[[NANO:[0-9]+]] [label="#10" color="#00FF00"]
#VC-DAG: F[[NBNO:[0-9]+]] [label="#11" color="#FF0000"]
#VC-DAG: F{{.*}}[[F0NO]] -> F{{.*}}[[N1NO]] [tooltip="F0 -> #1" label="" color="black" labelfontcolor="black" penwidth=1.00]
#VC-DAG: F{{.*}}[[F0NO]] -> F{{.*}}[[N2NO]] [tooltip="F0 -> #2" label="" color="black" labelfontcolor="black" penwidth=1.00]
#VC-DAG: F{{.*}}[[F0NO]] -> F{{.*}}[[N3NO]] [tooltip="F0 -> #3" label="" color="black" labelfontcolor="black" penwidth=1.00]
#VC-DAG: F{{.*}}[[F0NO]] -> F{{.*}}[[N4NO]] [tooltip="F0 -> #4" label="" color="black" labelfontcolor="black" penwidth=1.00]
#VC-DAG: F{{.*}}[[F0NO]] -> F{{.*}}[[N5NO]] [tooltip="F0 -> #5" label="" color="black" labelfontcolor="black" penwidth=1.00]
#VC-DAG: F{{.*}}[[F0NO]] -> F{{.*}}[[N6NO]] [tooltip="F0 -> #6" label="" color="black" labelfontcolor="black" penwidth=1.00]
#VC-DAG: F{{.*}}[[F0NO]] -> F{{.*}}[[N7NO]] [tooltip="F0 -> #7" label="" color="black" labelfontcolor="black" penwidth=1.00]
#VC-DAG: F{{.*}}[[F0NO]] -> F{{.*}}[[N8NO]] [tooltip="F0 -> #8" label="" color="black" labelfontcolor="black" penwidth=1.00]
#VC-DAG: F{{.*}}[[F0NO]] -> F{{.*}}[[N9NO]] [tooltip="F0 -> #9" label="" color="black" labelfontcolor="black" penwidth=1.00]
#VC-DAG: F{{.*}}[[F0NO]] -> F{{.*}}[[NANO]] [tooltip="F0 -> #10" label="" color="#00FF00" labelfontcolor="#00FF00" penwidth=1.00]
#VC-DAG: F{{.*}}[[F0NO]] -> F{{.*}}[[NBNO]] [tooltip="F0 -> #11" label="" color="#FF0000" labelfontcolor="#FF0000" penwidth=1.00]
#VC-NEXT:}
#ELVL: digraph xrayDiff {
#ELVL-NEXT: node [shape=record]
#ELVL-DAG: F[[F0NO:[0-9]+]] [label="F0"]
#ELVL-DAG: F[[N1NO:[0-9]+]] [label="{#1|800.00%}" color="black"]
#ELVL-DAG: F[[N2NO:[0-9]+]] [label="{#2|300.00%}" color="black"]
#ELVL-DAG: F[[N3NO:[0-9]+]] [label="{#3|133.33%}" color="black"]
#ELVL-DAG: F[[N4NO:[0-9]+]] [label="{#4|50.00%}" color="black"]
#ELVL-DAG: F[[N5NO:[0-9]+]] [label="{#5|0.00%}" color="black"]
#ELVL-DAG: F[[N6NO:[0-9]+]] [label="{#6|-33.33%}" color="black"]
#ELVL-DAG: F[[N7NO:[0-9]+]] [label="{#7|-57.14%}" color="black"]
#ELVL-DAG: F[[N8NO:[0-9]+]] [label="{#8|-75.00%}" color="black"]
#ELVL-DAG: F[[N9NO:[0-9]+]] [label="{#9|-88.89%}" color="black"]
#ELVL-DAG: F[[NANO:[0-9]+]] [label="#10" color="#00FF00"]
#ELVL-DAG: F[[NBNO:[0-9]+]] [label="#11" color="#FF0000"]
#ELVL-DAG: F{{.*}}[[F0NO]] -> F{{.*}}[[N1NO]] [tooltip="F0 -> #1" label="800.00%" color="black" labelfontcolor="black" penwidth=1.00]
#ELVL-DAG: F{{.*}}[[F0NO]] -> F{{.*}}[[N2NO]] [tooltip="F0 -> #2" label="300.00%" color="black" labelfontcolor="black" penwidth=1.00]
#ELVL-DAG: F{{.*}}[[F0NO]] -> F{{.*}}[[N3NO]] [tooltip="F0 -> #3" label="133.33%" color="black" labelfontcolor="black" penwidth=1.00]
#ELVL-DAG: F{{.*}}[[F0NO]] -> F{{.*}}[[N4NO]] [tooltip="F0 -> #4" label="50.00%" color="black" labelfontcolor="black" penwidth=1.00]
#ELVL-DAG: F{{.*}}[[F0NO]] -> F{{.*}}[[N5NO]] [tooltip="F0 -> #5" label="0.00%" color="black" labelfontcolor="black" penwidth=1.00]
#ELVL-DAG: F{{.*}}[[F0NO]] -> F{{.*}}[[N6NO]] [tooltip="F0 -> #6" label="-33.33%" color="black" labelfontcolor="black" penwidth=1.00]
#ELVL-DAG: F{{.*}}[[F0NO]] -> F{{.*}}[[N7NO]] [tooltip="F0 -> #7" label="-57.14%" color="black" labelfontcolor="black" penwidth=1.00]
#ELVL-DAG: F{{.*}}[[F0NO]] -> F{{.*}}[[N8NO]] [tooltip="F0 -> #8" label="-75.00%" color="black" labelfontcolor="black" penwidth=1.00]
#ELVL-DAG: F{{.*}}[[F0NO]] -> F{{.*}}[[N9NO]] [tooltip="F0 -> #9" label="-88.89%" color="black" labelfontcolor="black" penwidth=1.00]
#ELVL-DAG: F{{.*}}[[F0NO]] -> F{{.*}}[[NANO]] [tooltip="F0 -> #10" label="" color="#00FF00" labelfontcolor="#00FF00" penwidth=1.00]
#ELVL-DAG: F{{.*}}[[F0NO]] -> F{{.*}}[[NBNO]] [tooltip="F0 -> #11" label="" color="#FF0000" labelfontcolor="#FF0000" penwidth=1.00]
#ELVL-NEXT:}
#EL: digraph xrayDiff {
#EL-DAG: F[[F0NO:[0-9]+]] [label="F0"]
#EL-DAG: F[[N1NO:[0-9]+]] [label="#1" color="black"]
#EL-DAG: F[[N2NO:[0-9]+]] [label="#2" color="black"]
#EL-DAG: F[[N3NO:[0-9]+]] [label="#3" color="black"]
#EL-DAG: F[[N4NO:[0-9]+]] [label="#4" color="black"]
#EL-DAG: F[[N5NO:[0-9]+]] [label="#5" color="black"]
#EL-DAG: F[[N6NO:[0-9]+]] [label="#6" color="black"]
#EL-DAG: F[[N7NO:[0-9]+]] [label="#7" color="black"]
#EL-DAG: F[[N8NO:[0-9]+]] [label="#8" color="black"]
#EL-DAG: F[[N9NO:[0-9]+]] [label="#9" color="black"]
#EL-DAG: F[[NANO:[0-9]+]] [label="#10" color="#00FF00"]
#EL-DAG: F[[NBNO:[0-9]+]] [label="#11" color="#FF0000"]
#EL-DAG: F{{.*}}[[F0NO]] -> F{{.*}}[[N1NO]] [tooltip="F0 -> #1" label="800.00%" color="black" labelfontcolor="black" penwidth=1.00]
#EL-DAG: F{{.*}}[[F0NO]] -> F{{.*}}[[N2NO]] [tooltip="F0 -> #2" label="300.00%" color="black" labelfontcolor="black" penwidth=1.00]
#EL-DAG: F{{.*}}[[F0NO]] -> F{{.*}}[[N3NO]] [tooltip="F0 -> #3" label="133.33%" color="black" labelfontcolor="black" penwidth=1.00]
#EL-DAG: F{{.*}}[[F0NO]] -> F{{.*}}[[N4NO]] [tooltip="F0 -> #4" label="50.00%" color="black" labelfontcolor="black" penwidth=1.00]
#EL-DAG: F{{.*}}[[F0NO]] -> F{{.*}}[[N5NO]] [tooltip="F0 -> #5" label="0.00%" color="black" labelfontcolor="black" penwidth=1.00]
#EL-DAG: F{{.*}}[[F0NO]] -> F{{.*}}[[N6NO]] [tooltip="F0 -> #6" label="-33.33%" color="black" labelfontcolor="black" penwidth=1.00]
#EL-DAG: F{{.*}}[[F0NO]] -> F{{.*}}[[N7NO]] [tooltip="F0 -> #7" label="-57.14%" color="black" labelfontcolor="black" penwidth=1.00]
#EL-DAG: F{{.*}}[[F0NO]] -> F{{.*}}[[N8NO]] [tooltip="F0 -> #8" label="-75.00%" color="black" labelfontcolor="black" penwidth=1.00]
#EL-DAG: F{{.*}}[[F0NO]] -> F{{.*}}[[N9NO]] [tooltip="F0 -> #9" label="-88.89%" color="black" labelfontcolor="black" penwidth=1.00]
#EL-DAG: F{{.*}}[[F0NO]] -> F{{.*}}[[NANO]] [tooltip="F0 -> #10" label="" color="#00FF00" labelfontcolor="#00FF00" penwidth=1.00]
#EL-DAG: F{{.*}}[[F0NO]] -> F{{.*}}[[NBNO]] [tooltip="F0 -> #11" label="" color="#FF0000" labelfontcolor="#FF0000" penwidth=1.00]
#EL-NEXT:}
#VL: digraph xrayDiff {
#VL-NEXT: node [shape=record]
#VL-DAG: F[[F0NO:[0-9]+]] [label="F0"]
#VL-DAG: F[[N1NO:[0-9]+]] [label="{#1|800.00%}" color="black"]
#VL-DAG: F[[N2NO:[0-9]+]] [label="{#2|300.00%}" color="black"]
#VL-DAG: F[[N3NO:[0-9]+]] [label="{#3|133.33%}" color="black"]
#VL-DAG: F[[N4NO:[0-9]+]] [label="{#4|50.00%}" color="black"]
#VL-DAG: F[[N5NO:[0-9]+]] [label="{#5|0.00%}" color="black"]
#VL-DAG: F[[N6NO:[0-9]+]] [label="{#6|-33.33%}" color="black"]
#VL-DAG: F[[N7NO:[0-9]+]] [label="{#7|-57.14%}" color="black"]
#VL-DAG: F[[N8NO:[0-9]+]] [label="{#8|-75.00%}" color="black"]
#VL-DAG: F[[N9NO:[0-9]+]] [label="{#9|-88.89%}" color="black"]
#VL-DAG: F[[NANO:[0-9]+]] [label="#10" color="#00FF00"]
#VL-DAG: F[[NBNO:[0-9]+]] [label="#11" color="#FF0000"]
#VL-DAG: F{{.*}}[[F0NO]] -> F{{.*}}[[N1NO]] [tooltip="F0 -> #1" label="" color="black" labelfontcolor="black" penwidth=1.00]
#VL-DAG: F{{.*}}[[F0NO]] -> F{{.*}}[[N2NO]] [tooltip="F0 -> #2" label="" color="black" labelfontcolor="black" penwidth=1.00]
#VL-DAG: F{{.*}}[[F0NO]] -> F{{.*}}[[N3NO]] [tooltip="F0 -> #3" label="" color="black" labelfontcolor="black" penwidth=1.00]
#VL-DAG: F{{.*}}[[F0NO]] -> F{{.*}}[[N4NO]] [tooltip="F0 -> #4" label="" color="black" labelfontcolor="black" penwidth=1.00]
#VL-DAG: F{{.*}}[[F0NO]] -> F{{.*}}[[N5NO]] [tooltip="F0 -> #5" label="" color="black" labelfontcolor="black" penwidth=1.00]
#VL-DAG: F{{.*}}[[F0NO]] -> F{{.*}}[[N6NO]] [tooltip="F0 -> #6" label="" color="black" labelfontcolor="black" penwidth=1.00]
#VL-DAG: F{{.*}}[[F0NO]] -> F{{.*}}[[N7NO]] [tooltip="F0 -> #7" label="" color="black" labelfontcolor="black" penwidth=1.00]
#VL-DAG: F{{.*}}[[F0NO]] -> F{{.*}}[[N8NO]] [tooltip="F0 -> #8" label="" color="black" labelfontcolor="black" penwidth=1.00]
#VL-DAG: F{{.*}}[[F0NO]] -> F{{.*}}[[N9NO]] [tooltip="F0 -> #9" label="" color="black" labelfontcolor="black" penwidth=1.00]
#VL-DAG: F{{.*}}[[F0NO]] -> F{{.*}}[[NANO]] [tooltip="F0 -> #10" label="" color="#00FF00" labelfontcolor="#00FF00" penwidth=1.00]
#VL-DAG: F{{.*}}[[F0NO]] -> F{{.*}}[[NBNO]] [tooltip="F0 -> #11" label="" color="#FF0000" labelfontcolor="#FF0000" penwidth=1.00]
#VL-NEXT:}
#VLVC: digraph xrayDiff {
#VLVC-NEXT: node [shape=record]
#VLVC-DAG: F[[F0NO:[0-9]+]] [label="F0"]
#VLVC-DAG: F[[N1NO:[0-9]+]] [label="{#1|800.00%}" color="#276419"]
#VLVC-DAG: F[[N2NO:[0-9]+]] [label="{#2|300.00%}" color="#276419"]
#VLVC-DAG: F[[N3NO:[0-9]+]] [label="{#3|133.33%}" color="#276419"]
#VLVC-DAG: F[[N4NO:[0-9]+]] [label="{#4|50.00%}" color="#9BCE61"]
#VLVC-DAG: F[[N5NO:[0-9]+]] [label="{#5|0.00%}" color="#F7F7F7"]
#VLVC-DAG: F[[N6NO:[0-9]+]] [label="{#6|-33.33%}" color="#F5C4E0"]
#VLVC-DAG: F[[N7NO:[0-9]+]] [label="{#7|-57.14%}" color="#E17FB4"]
#VLVC-DAG: F[[N8NO:[0-9]+]] [label="{#8|-75.00%}" color="#CB3088"]
#VLVC-DAG: F[[N9NO:[0-9]+]] [label="{#9|-88.89%}" color="#AD0E69"]
#VLVC-DAG: F[[NANO:[0-9]+]] [label="#10" color="#00FF00"]
#VLVC-DAG: F[[NBNO:[0-9]+]] [label="#11" color="#FF0000"]
#VLVC-DAG: F{{.*}}[[F0NO]] -> F{{.*}}[[N1NO]] [tooltip="F0 -> #1" label="" color="black" labelfontcolor="black" penwidth=1.00]
#VLVC-DAG: F{{.*}}[[F0NO]] -> F{{.*}}[[N2NO]] [tooltip="F0 -> #2" label="" color="black" labelfontcolor="black" penwidth=1.00]
#VLVC-DAG: F{{.*}}[[F0NO]] -> F{{.*}}[[N3NO]] [tooltip="F0 -> #3" label="" color="black" labelfontcolor="black" penwidth=1.00]
#VLVC-DAG: F{{.*}}[[F0NO]] -> F{{.*}}[[N4NO]] [tooltip="F0 -> #4" label="" color="black" labelfontcolor="black" penwidth=1.00]
#VLVC-DAG: F{{.*}}[[F0NO]] -> F{{.*}}[[N5NO]] [tooltip="F0 -> #5" label="" color="black" labelfontcolor="black" penwidth=1.00]
#VLVC-DAG: F{{.*}}[[F0NO]] -> F{{.*}}[[N6NO]] [tooltip="F0 -> #6" label="" color="black" labelfontcolor="black" penwidth=1.00]
#VLVC-DAG: F{{.*}}[[F0NO]] -> F{{.*}}[[N7NO]] [tooltip="F0 -> #7" label="" color="black" labelfontcolor="black" penwidth=1.00]
#VLVC-DAG: F{{.*}}[[F0NO]] -> F{{.*}}[[N8NO]] [tooltip="F0 -> #8" label="" color="black" labelfontcolor="black" penwidth=1.00]
#VLVC-DAG: F{{.*}}[[F0NO]] -> F{{.*}}[[N9NO]] [tooltip="F0 -> #9" label="" color="black" labelfontcolor="black" penwidth=1.00]
#VLVC-DAG: F{{.*}}[[F0NO]] -> F{{.*}}[[NANO]] [tooltip="F0 -> #10" label="" color="#00FF00" labelfontcolor="#00FF00" penwidth=1.00]
#VLVC-DAG: F{{.*}}[[F0NO]] -> F{{.*}}[[NBNO]] [tooltip="F0 -> #11" label="" color="#FF0000" labelfontcolor="#FF0000" penwidth=1.00]
#VLVC-NEXT:}
#ELEC: digraph xrayDiff {
#ELEC-DAG: F[[F0NO:[0-9]+]] [label="F0"]
#ELEC-DAG: F[[N1NO:[0-9]+]] [label="#1" color="black"]
#ELEC-DAG: F[[N2NO:[0-9]+]] [label="#2" color="black"]
#ELEC-DAG: F[[N3NO:[0-9]+]] [label="#3" color="black"]
#ELEC-DAG: F[[N4NO:[0-9]+]] [label="#4" color="black"]
#ELEC-DAG: F[[N5NO:[0-9]+]] [label="#5" color="black"]
#ELEC-DAG: F[[N6NO:[0-9]+]] [label="#6" color="black"]
#ELEC-DAG: F[[N7NO:[0-9]+]] [label="#7" color="black"]
#ELEC-DAG: F[[N8NO:[0-9]+]] [label="#8" color="black"]
#ELEC-DAG: F[[N9NO:[0-9]+]] [label="#9" color="black"]
#ELEC-DAG: F[[NANO:[0-9]+]] [label="#10" color="#00FF00"]
#ELEC-DAG: F[[NBNO:[0-9]+]] [label="#11" color="#FF0000"]
#ELEC-DAG: F{{.*}}[[F0NO]] -> F{{.*}}[[N1NO]] [tooltip="F0 -> #1" label="800.00%" color="#276419" labelfontcolor="#276419" penwidth=8.00]
#ELEC-DAG: F{{.*}}[[F0NO]] -> F{{.*}}[[N2NO]] [tooltip="F0 -> #2" label="300.00%" color="#276419" labelfontcolor="#276419" penwidth=3.00]
#ELEC-DAG: F{{.*}}[[F0NO]] -> F{{.*}}[[N3NO]] [tooltip="F0 -> #3" label="133.33%" color="#276419" labelfontcolor="#276419" penwidth=1.33]
#ELEC-DAG: F{{.*}}[[F0NO]] -> F{{.*}}[[N4NO]] [tooltip="F0 -> #4" label="50.00%" color="#9BCE61" labelfontcolor="#9BCE61" penwidth=1.00]
#ELEC-DAG: F{{.*}}[[F0NO]] -> F{{.*}}[[N5NO]] [tooltip="F0 -> #5" label="0.00%" color="#F7F7F7" labelfontcolor="#F7F7F7" penwidth=1.00]
#ELEC-DAG: F{{.*}}[[F0NO]] -> F{{.*}}[[N6NO]] [tooltip="F0 -> #6" label="-33.33%" color="#F5C4E0" labelfontcolor="#F5C4E0" penwidth=1.00]
#ELEC-DAG: F{{.*}}[[F0NO]] -> F{{.*}}[[N7NO]] [tooltip="F0 -> #7" label="-57.14%" color="#E17FB4" labelfontcolor="#E17FB4" penwidth=1.00]
#ELEC-DAG: F{{.*}}[[F0NO]] -> F{{.*}}[[N8NO]] [tooltip="F0 -> #8" label="-75.00%" color="#CB3088" labelfontcolor="#CB3088" penwidth=1.00]
#ELEC-DAG: F{{.*}}[[F0NO]] -> F{{.*}}[[N9NO]] [tooltip="F0 -> #9" label="-88.89%" color="#AD0E69" labelfontcolor="#AD0E69" penwidth=1.00]
#ELEC-DAG: F{{.*}}[[F0NO]] -> F{{.*}}[[NANO]] [tooltip="F0 -> #10" label="" color="#00FF00" labelfontcolor="#00FF00" penwidth=1.00]
#ELEC-DAG: F{{.*}}[[F0NO]] -> F{{.*}}[[NBNO]] [tooltip="F0 -> #11" label="" color="#FF0000" labelfontcolor="#FF0000" penwidth=1.00]
#ELEC-NEXT:}
From 37605662a99bd0815e2f2e452eb6ab1ce53ecffd Mon Sep 17 00:00:00 2001
From: "A. Wilcox" <AWilcox@Wilcox-Tech.com>
Date: Mon, 30 May 2022 02:51:34 -0500
Subject: [PATCH] [Hexagon][Tests] Fix tests on Linux/musl
When running on a host system using musl, the target triple is defined
as hexagon-unknown-linux-musl by default. The Linux ABI differs from
the non-Linux one with varargs, so this causes the tests to fail.
Closes BZ49592, PR48936.
Signed-off-by: A. Wilcox <AWilcox@Wilcox-Tech.com>
---
test/CodeGen/Hexagon/csr-stubs-spill-threshold.ll | 2 +-
test/CodeGen/Hexagon/long-calls.ll | 2 +-
test/CodeGen/Hexagon/mlong-calls.ll | 2 +-
test/CodeGen/Hexagon/pic-regusage.ll | 2 +-
test/CodeGen/Hexagon/runtime-stkchk.ll | 2 +-
test/CodeGen/Hexagon/swp-memrefs-epilog.ll | 2 +-
test/CodeGen/Hexagon/vararg-formal.ll | 2 +-
7 files changed, 7 insertions(+), 7 deletions(-)
diff --git a/test/CodeGen/Hexagon/csr-stubs-spill-threshold.ll b/test/CodeGen/Hexagon/csr-stubs-spill-threshold.ll
index afbef217911a..d317d7eac800 100644
--- a/test/CodeGen/Hexagon/csr-stubs-spill-threshold.ll
+++ b/test/CodeGen/Hexagon/csr-stubs-spill-threshold.ll
@@ -1,4 +1,4 @@
-; RUN: llc -mtriple=hexagon -O2 -spill-func-threshold=2 < %s | FileCheck %s
+; RUN: llc -march=hexagon -mtriple=hexagon-unknown-linux-gnu -O2 -spill-func-threshold=2 < %s | FileCheck %s
declare i32 @f0(i32, i32, i32, i32, i32, i32)
diff --git a/test/CodeGen/Hexagon/long-calls.ll b/test/CodeGen/Hexagon/long-calls.ll
index 628362783c9c..886405a2d91a 100644
--- a/test/CodeGen/Hexagon/long-calls.ll
+++ b/test/CodeGen/Hexagon/long-calls.ll
@@ -1,4 +1,4 @@
-; RUN: llc -mtriple=hexagon -enable-save-restore-long -hexagon-initial-cfg-cleanup=0 < %s | FileCheck %s
+; RUN: llc -march=hexagon -mtriple=hexagon-unknown-linux-gnu -enable-save-restore-long -hexagon-initial-cfg-cleanup=0 < %s | FileCheck %s
; Check that the -long-calls feature is supported by the backend.
diff --git a/test/CodeGen/Hexagon/mlong-calls.ll b/test/CodeGen/Hexagon/mlong-calls.ll
index d76b87f987fe..383486dfe63d 100644
--- a/test/CodeGen/Hexagon/mlong-calls.ll
+++ b/test/CodeGen/Hexagon/mlong-calls.ll
@@ -1,4 +1,4 @@
-; RUN: llc -hexagon-long-calls -mtriple=hexagon -enable-save-restore-long=true < %s | FileCheck %s
+; RUN: llc -hexagon-long-calls -march=hexagon -mtriple=hexagon-unknown-linux-gnu -enable-save-restore-long=true < %s | FileCheck %s
; CHECK: call ##f1
; CHECK: jump ##__restore
diff --git a/test/CodeGen/Hexagon/pic-regusage.ll b/test/CodeGen/Hexagon/pic-regusage.ll
index 9d3b6cec39e3..077063e36550 100644
--- a/test/CodeGen/Hexagon/pic-regusage.ll
+++ b/test/CodeGen/Hexagon/pic-regusage.ll
@@ -1,4 +1,4 @@
-; RUN: llc -mtriple=hexagon -relocation-model=pic < %s | FileCheck %s
+; RUN: llc -march=hexagon -mtriple=hexagon-unknown-linux-gnu -relocation-model=pic < %s | FileCheck %s
; Force the use of R14 (by clobbering everything else in the inline asm).
; Make sure that R14 is not set before the __save call (which will clobber
diff --git a/test/CodeGen/Hexagon/runtime-stkchk.ll b/test/CodeGen/Hexagon/runtime-stkchk.ll
index 66e93d02ef51..2f3f2ad10f6a 100644
--- a/test/CodeGen/Hexagon/runtime-stkchk.ll
+++ b/test/CodeGen/Hexagon/runtime-stkchk.ll
@@ -1,4 +1,4 @@
-; RUN: llc -mtriple=hexagon -mcpu=hexagonv55 -enable-stackovf-sanitizer < %s | FileCheck %s
+; RUN: llc -march=hexagon -mcpu=hexagonv55 -mtriple=hexagon-unknown-linux-gnu -enable-stackovf-sanitizer < %s | FileCheck %s
; CHECK-LABEL: foo_1
; CHECK: __runtime_stack_check
diff --git a/test/CodeGen/Hexagon/swp-memrefs-epilog.ll b/test/CodeGen/Hexagon/swp-memrefs-epilog.ll
index 20e39dd08fd7..b34dfbc31e9d 100644
--- a/test/CodeGen/Hexagon/swp-memrefs-epilog.ll
+++ b/test/CodeGen/Hexagon/swp-memrefs-epilog.ll
@@ -1,4 +1,4 @@
-; RUN: llc -march=hexagon -O2 -fp-contract=fast < %s -pipeliner-experimental-cg=true | FileCheck %s
+; RUN: llc -march=hexagon -mtriple=hexagon-unknown-linux-gnu -O2 -fp-contract=fast < %s -pipeliner-experimental-cg=true | FileCheck %s
; Test that the memoperands for instructions in the epilog are updated
; correctly. Previously, the pipeliner updated the offset for the memoperands
diff --git a/test/CodeGen/Hexagon/vararg-formal.ll b/test/CodeGen/Hexagon/vararg-formal.ll
index 6bba65fcab16..fb3132929bcf 100644
--- a/test/CodeGen/Hexagon/vararg-formal.ll
+++ b/test/CodeGen/Hexagon/vararg-formal.ll
@@ -1,4 +1,4 @@
-; RUN: llc -march=hexagon < %s | FileCheck %s
+; RUN: llc -march=hexagon -mtriple=hexagon-unknown-linux-gnu < %s | FileCheck %s
; Make sure that the first formal argument is not loaded from memory.
; CHECK-NOT: memw
--
2.36.0
From 5c571082fdaf61f6df19d9b7137dc26d71334058 Mon Sep 17 00:00:00 2001
From: Natanael Copa <ncopa@alpinelinux.org>
Date: Thu, 18 Feb 2016 10:33:04 +0100
Subject: [PATCH 2/3] Fix build with musl libc
On musl libc the fopen64 and fopen are the same thing, but for
compatibility they have a `#define fopen64 fopen`. Same applies for
fseek64, fstat64, fstatvfs64, ftello64, lstat64, stat64 and tmpfile64.
---
include/llvm/Analysis/TargetLibraryInfo.h | 9 +++++++++
1 file changed, 9 insertions(+)
diff --git a/include/llvm/Analysis/TargetLibraryInfo.h b/include/llvm/Analysis/TargetLibraryInfo.h
index 7becdf0..7f14427 100644
--- a/include/llvm/Analysis/TargetLibraryInfo.h
+++ b/include/llvm/Analysis/TargetLibraryInfo.h
@@ -17,6 +17,26 @@
#include "llvm/IR/Module.h"
#include "llvm/Pass.h"
+#undef fopen64
+#undef fseeko64
+#undef fstat64
+#undef fstatvfs64
+#undef ftello64
+#undef lstat64
+#undef stat64
+#undef tmpfile64
+#undef F_GETLK64
+#undef F_SETLK64
+#undef F_SETLKW64
+#undef flock64
+#undef open64
+#undef openat64
+#undef creat64
+#undef lockf64
+#undef posix_fadvise64
+#undef posix_fallocate64
+#undef off64_t
+
namespace llvm {
/// VecDesc - Describes a possible vectorization of a function.
/// Function 'VectorFnName' is equivalent to 'ScalarFnName' vectorized
--
2.7.3
Use integer offset math instead of pointer math to determine load
command bounds.
Upstream-URL: https://github.com/llvm/llvm-project/issues/56746
--- llvm-14.0.6.src/lib/Object/MachOObjectFile.cpp.old 2022-06-22 16:46:24.000000000 +0000
+++ llvm-14.0.6.src/lib/Object/MachOObjectFile.cpp 2022-11-28 04:21:02.730211841 +0000
@@ -190,7 +190,8 @@
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())
+ uint64_t Offset = Ptr - Obj.getData().begin();
+ if (CmdOrErr->cmdsize + Offset > Obj.getData().size())
return malformedError("load command " + Twine(LoadCommandIndex) +
" extends past end of file");
if (CmdOrErr->cmdsize < 8)
From 750d323a6060ad92c3d247f85d6555041f55b4a5 Mon Sep 17 00:00:00 2001
From: "A. Wilcox" <AWilcox@Wilcox-Tech.com>
Date: Thu, 4 Oct 2018 15:26:59 -0500
Subject: [PATCH] Add support for powerpc64-*-linux-musl targets
This patch ensures that 64-bit PowerPC musl targets use ELFv2 ABI on both
endians. It additionally adds a test that big endian PPC64 uses ELFv2 on
musl.
---
lib/Target/PowerPC/PPCTargetMachine.cpp | 4 ++++
test/CodeGen/PowerPC/ppc64-elf-abi.ll | 1 +
2 files changed, 5 insertions(+)
diff --git a/test/CodeGen/PowerPC/ppc64-elf-abi.ll b/test/CodeGen/PowerPC/ppc64-elf-abi.ll
index 1e17930304b..aa594b37b47 100644
--- a/test/CodeGen/PowerPC/ppc64-elf-abi.ll
+++ b/test/CodeGen/PowerPC/ppc64-elf-abi.ll
@@ -1,6 +1,7 @@
; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu < %s | FileCheck %s -check-prefix=CHECK-ELFv1
; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu -target-abi elfv1 < %s | FileCheck %s -check-prefix=CHECK-ELFv1
; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu -target-abi elfv2 < %s | FileCheck %s -check-prefix=CHECK-ELFv2
+; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-musl < %s | FileCheck %s -check-prefix=CHECK-ELFv2
; RUN: llc -verify-machineinstrs -mtriple=powerpc64le-unknown-linux-gnu < %s | FileCheck %s -check-prefix=CHECK-ELFv2
; RUN: llc -verify-machineinstrs -mtriple=powerpc64le-unknown-linux-gnu -target-abi elfv1 < %s | FileCheck %s -check-prefix=CHECK-ELFv1
; RUN: llc -verify-machineinstrs -mtriple=powerpc64le-unknown-linux-gnu -target-abi elfv2 < %s | FileCheck %s -check-prefix=CHECK-ELFv2
--
2.18.0
Upstream: https://github.com/llvm/llvm-project/issues/95594
Ref: #1204
--- llvm/include/llvm/ExecutionEngine/Orc/Shared/SimplePackedSerialization.h.old 2024-06-15 12:21:32.000000000 -0500
+++ llvm/include/llvm/ExecutionEngine/Orc/Shared/SimplePackedSerialization.h 2024-06-25 21:42:07.495284340 -0500
@@ -390,6 +390,8 @@
return Size;
}
+#pragma GCC push_options
+#pragma GCC optimize("no-tree-ch")
static bool serialize(SPSOutputBuffer &OB, const SequenceT &S) {
if (!SPSArgList<uint64_t>::serialize(OB, static_cast<uint64_t>(S.size())))
return false;
@@ -398,6 +400,7 @@
return false;
return true;
}
+#pragma GCC pop_options
static bool deserialize(SPSInputBuffer &IB, SequenceT &S) {
using TBSD = TrivialSPSSequenceDeserialization<SPSElementTagT, SequenceT>;
--- llvm-7.0.1.src/test/BugPoint/compile-custom.ll.py.old 2014-03-13 00:10:37.000000000 +0000
+++ llvm-7.0.1.src/test/BugPoint/compile-custom.ll.py 2019-03-10 03:48:48.600000000 +0000
@@ -1,4 +1,4 @@
-#!/usr/bin/env python
+#!/usr/bin/env python3
from __future__ import print_function
--- llvm-14.0.4.src/lib/Analysis/TargetLibraryInfo.cpp.old 2022-05-24 22:02:58.000000000 +0000
+++ llvm-14.0.4.src/lib/Analysis/TargetLibraryInfo.cpp 2022-07-06 01:38:22.016862561 +0000
@@ -616,6 +616,13 @@
TLI.setUnavailable(LibFunc_statvfs64);
TLI.setUnavailable(LibFunc_tmpfile64);
+ // These functions are unavailable on musl.
+ if (T.isMusl()) {
+ TLI.setUnavailable(LibFunc_roundeven);
+ TLI.setUnavailable(LibFunc_roundevenf);
+ TLI.setUnavailable(LibFunc_roundevenl);
+ }
+
// Relaxed math functions are included in math-finite.h on Linux (GLIBC).
// Note that math-finite.h is no longer supported by top-of-tree GLIBC,
// so we keep these functions around just so that they're recognized by
--- llvm-14.0.4.src/test/Transforms/InstCombine/double-float-shrink-2.ll.old 2022-05-24 22:02:58.000000000 +0000
+++ llvm-14.0.4.src/test/Transforms/InstCombine/double-float-shrink-2.ll 2022-07-06 02:03:20.657791057 +0000
@@ -1,5 +1,5 @@
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
-; RUN: opt < %s -passes=instcombine -S -mtriple "i386-pc-linux" | FileCheck %s
+; RUN: opt < %s -passes=instcombine -S -mtriple "i386-pc-linux-gnu" | FileCheck %s
; RUN: opt < %s -passes=instcombine -S -mtriple "i386-pc-win32" | FileCheck %s
; RUN: opt < %s -passes=instcombine -S -mtriple "x86_64-pc-win32" | FileCheck %s
; RUN: opt < %s -passes=instcombine -S -mtriple "i386-pc-mingw32" | FileCheck %s
--- llvm-14.0.4.src/test/ExecutionEngine/Interpreter/intrinsics.ll.old 2022-05-24 22:02:58.000000000 +0000
+++ llvm-14.0.4.src/test/ExecutionEngine/Interpreter/intrinsics.ll 2022-07-23 06:50:59.336665672 +0000
@@ -13,8 +13,8 @@
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.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 +31,8 @@
%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)
+ ;%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
# Contributor: Travis Tilley <ttilley@gmail.com>
# Contributor: Mitch Tishmack <mitch.tishmack@gmail.com>
# Contributor: Jakub Jirutka <jakub@jirutka.cz>
# Maintainer: A. Wilcox <awilfox@adelielinux.org>
_pkgname=llvm
pkgver=18.1.8
_majorver=${pkgver%%.*}
pkgname=$_pkgname$_majorver
pkgrel=0
pkgdesc="Low Level Virtual Machine compiler system, version $_majorver"
url="https://llvm.org/"
arch="all"
options="!checkroot !dbg"
license="NCSA AND (Apache-2.0 WITH LLVM-exception)"
depends=""
depends_dev="$pkgname=$pkgver-r$pkgrel libexecinfo-dev libxml2-dev"
checkdepends="cmd:which"
makedepends="binutils-dev chelf chrpath cmake file libexecinfo-dev libffi-dev
libxml2-dev python3 zlib-dev"
subpackages="$pkgname-static $pkgname-libs $pkgname-dev
$pkgname-test-utils:_test_utils"
source="https://github.com/llvm/llvm-project/releases/download/llvmorg-$pkgver/llvm-project-$pkgver.src.tar.xz
llvm-fix-build-with-musl-libc.patch
disable-FileSystemTest.CreateDir-perms-assert.patch
dyld-elf-ppc32.patch
hexagon.patch
i586-json-test.patch
m68k-endianness.patch
macho32.patch
musl-ppc64-elfv2.patch
ppc-gcc-bug.patch
python3-test.patch
roundeven.patch
"
builddir="$srcdir/$_pkgname-project-$pkgver.src/llvm"
# ARM has few failures in test suite that we don't care about currently and
# also it takes forever to run them on the builder.
case "$CARCH" in
arm*) options="$options !check";;
esac
# Whether is this package the default (latest) LLVM version.
_default_llvm="no"
if [ "$_default_llvm" = yes ]; then
provides="llvm=$pkgver-r$pkgrel"
replaces="llvm"
fi
# 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
# even LLVM-specific variables, that are related to these paths, actually
# don't work (in llvm 3.7).
#
# When building a software that depends on LLVM, utility llvm-config should be
# used to discover where is LLVM installed. It provides options to print
# path of bindir, includedir, and libdir separately, but in its source, all
# these paths are actually hard-coded against INSTALL_PREFIX. We can patch it
# and move paths manually, but I'm really not sure what it may break...
#
# Also note that we should *not* add version suffix to files in llvm bindir!
# It breaks build system of some software that depends on LLVM, because they
# don't expect these files to have a sufix.
#
# So, we install all the LLVM files into /usr/lib/llvm$_majorver.
# BTW, Fedora and Debian do the same thing.
#
_prefix="usr/lib/llvm$_majorver"
prepare() {
default_prepare
# https://bugs.llvm.org//show_bug.cgi?id=31870
rm -v test/tools/llvm-symbolizer/print_context.c
case $CARCH in
pmmx|x86|ppc|armhf|armv7)
# Appears to not work when building 32-bit code on 64-bit host.
rm -v test/tools/llvm-size/radix.test;;
esac
case $CARCH in
ppc64|ppc|mips64|mips)
# Appears to be a endianness issue.
for _broken in eh_frame linker-llvm-union-fwd-decl; do
rm -v test/tools/dsymutil/X86/$_broken.test;
done
esac
case $CTARGET_ARCH in
pmmx)
# Broken by fast precision method.
rm -v test/tools/llvm-cov/mcdc-export-json.test;
rm -v test/tools/llvm-xray/X86/graph-diff-simple.txt;
;;
ppc)
# RISC-V issues are uninvestigated as of yet. #1233
rm -v test/CodeGen/RISCV/rvv/combine-store-extract-crash.ll
rm -v test/CodeGen/RISCV/xtheadmempair.ll
# ExecutionEngine for PPC32 requires R_PPC_REL24 to be
# implemented in RuntimeDyld.
for _bad_orc in global-ctor-with-cast.ll \
global-variable-alignment.ll \
trivial-call-to-function.ll \
trivial-call-to-internal-function.ll \
trivial-reference-to-global-variable.ll \
trivial-reference-to-internal-variable-nonzeroinit.ll \
trivial-reference-to-internal-variable-zeroinit.ll \
trivial-return-zero.ll \
weak-comdat.ll; do
rm -v test/ExecutionEngine/Orc/$_bad_orc;
done
for _bad_ee in frem.ll mov64zext32.ll \
test-interp-vec-arithm_float.ll \
test-interp-vec-arithm_int.ll \
test-interp-vec-logical.ll \
test-interp-vec-setcond-fp.ll \
test-interp-vec-setcond-int.ll; do
rm -v test/ExecutionEngine/$_bad_ee;
done
esac
#1053
rm -vfr \
test/tools/UpdateTestChecks \
test/ExecutionEngine/MCJIT/load-object-a.ll \
;
#1250
rm -v \
test/tools/dsymutil/ARM/DWARFLinkerParallel/accel-imported-declarations.test \
test/tools/dsymutil/X86/DWARFLinkerParallel/odr-member-functions.cpp \
test/tools/dsymutil/X86/DWARFLinkerParallel/odr-parents.test \
test/tools/dsymutil/X86/DWARFLinkerParallel/odr-predictable-output2.test \
test/tools/dsymutil/X86/DWARFLinkerParallel/odr-string.test \
test/tools/dsymutil/X86/DWARFLinkerParallel/odr-uniquing.cpp
}
build() {
# Auto-detect it by guessing either.
ffi_include_dir="$(pkg-config --cflags-only-I libffi | sed 's|^-I||g')"
arch_config=""
case $CTARGET_ARCH in
aarch64)
# libexecinfo does not work on AArch64 because the GCC port
# does not implement RETURN_ADDR_RTX with frame > 0.
arch_config="-DLLVM_ENABLE_BACKTRACES=OFF";;
pmmx)
# The standard precision breaks more than it fixes; there are
# 12 failures in standard mode and only (different) 3 in fast.
export CXXFLAGS="$CXXFLAGS -fexcess-precision=fast";;
esac
case $CTARGET_ARCH in
pmmx|x86|ppc|armhf|armv7)
# 32-bit 2GB memory ceiling
# 'ld' chokes on 2GB .debug_info, 'scanelf' on binary size
# see also: #1251, #1253, abuild#20
export CXXFLAGS="$CXXFLAGS -ggdb1";;
esac
cmake -G "Unix Makefiles" -Wno-dev \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX=/$_prefix \
-DCMAKE_VERBOSE_MAKEFILE=NO \
-DFFI_INCLUDE_DIR="$ffi_include_dir" \
-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=ON \
-DLLVM_DEFAULT_TARGET_TRIPLE="$CBUILD" \
-DLLVM_ENABLE_ASSERTIONS=OFF \
-DLLVM_ENABLE_FFI=ON \
-DLLVM_ENABLE_LIBCXX=OFF \
-DLLVM_ENABLE_PIC=ON \
-DLLVM_ENABLE_RTTI=ON \
-DLLVM_ENABLE_SPHINX=OFF \
-DLLVM_ENABLE_TERMINFO=ON \
-DLLVM_ENABLE_ZLIB=ON \
-DLLVM_HOST_TRIPLE="$CHOST" \
-DLLVM_INCLUDE_BENCHMARKS=OFF \
-DLLVM_INCLUDE_EXAMPLES=OFF \
-DLLVM_INSTALL_GTEST=ON \
-DLLVM_INSTALL_UTILS=ON \
-DLLVM_LINK_LLVM_DYLIB=ON \
-DLLVM_TARGETS_TO_BUILD='AArch64;AMDGPU;ARM;BPF;Hexagon;Lanai;Mips;MSP430;PowerPC;RISCV;Sparc;SystemZ;WebAssembly;X86;XCore' \
-DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD='M68k' \
$arch_config \
-Bbuild .
make -C build llvm-tblgen
make -C build
python3 utils/lit/setup.py build
# Thread 3 requires a lot of stack space to LTO when targeting ARM.
# Note that this occurs even when crossing (on a ppc64 host).
chelf -s 1048576 build/bin/llvm-lto2
# Needed for parallel-linker support (pthread stack size).
chelf -s 1048576 build/bin/dsymutil
chelf -s 1048576 build/bin/llvm-dwarfutil
}
check() {
make -C build check-llvm
}
package() {
make DESTDIR="$pkgdir" -C build install
cd "$pkgdir"/$_prefix
# Remove RPATHs.
file lib/*.so bin/* \
| awk -F: '$2~/ELF/{print $1}' \
| xargs -r chrpath -d
# Symlink files from /usr/lib/llvm*/bin to /usr/bin.
mkdir -p "$pkgdir"/usr/bin
for full_name in bin/*; do
bin_name=${full_name##*/}
# If this package provides=llvm (i.e. it's the default/latest
# llvm package), omit version infix/suffix.
if [ "$_default_llvm" = yes ]; then
link_name=$bin_name
# ..otherwise, add version infix/suffix to the executable name.
else case "$bin_name" in
llvm-*) link_name="llvm$_majorver-${bin_name#llvm-}";;
*) link_name="$bin_name$_majorver";;
esac
fi
case "$name" in
FileCheck | obj2yaml | yaml2obj) continue;;
esac
ln -s ../lib/llvm$_majorver/bin/$bin_name "$pkgdir"/usr/bin/$link_name
done
# Move /usr/lib/$pkgname/include/ into /usr/include/$pkgname/
# and symlink it back.
mkdir -p "$pkgdir"/usr/include/$pkgname
mv include/* "$pkgdir"/usr/include/$pkgname/
rmdir include
ln -s ../../include/$pkgname include
ln -s "$pkgdir"/usr/lib/cmake/llvm ../$pkgname/lib/cmake/llvm
# Thread 3 requires a lot of stack space to LTO when targeting ARM.
# Note that this occurs even when crossing (on a ppc64 host).
chelf -s 1048576 bin/llvm-lto2
# Needed for parallel-linker support (pthread stack size).
chelf -s 1048576 bin/dsymutil
chelf -s 1048576 bin/llvm-dwarfutil
}
static() {
pkgdesc="LLVM $_majorver static libraries"
_common_subpkg
mkdir -p "$subpkgdir"/$_prefix/lib
mv "$pkgdir"/$_prefix/lib/*.a "$subpkgdir"/$_prefix/lib/
strip -d "$subpkgdir"/$_prefix/lib/*.a
}
libs() {
pkgdesc="LLVM $_majorver runtime library"
main_soname="libLLVM-$_majorver.so"
ver_soname="libLLVM-$pkgver.so"
_common_subpkg
# 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/$main_soname "$subpkgdir"/usr/lib/
_solinks=$(ls "$pkgdir"/$_prefix/lib/libLLVM.so.$_majorver*)
for link in $_solinks; do
_real_link=$(basename $link)
mv "$pkgdir"/$_prefix/lib/$_real_link "$subpkgdir"/usr/lib/
done
ln -s $main_soname "$subpkgdir"/usr/lib/$ver_soname
# And also symlink it back to the LLVM prefix.
mkdir -p "$subpkgdir"/$_prefix/lib
ln -s ../../$main_soname "$subpkgdir"/$_prefix/lib/$main_soname
ln -s ../../$main_soname "$subpkgdir"/$_prefix/lib/$ver_soname
ln -s ../../$main_soname "$subpkgdir"/$_prefix/lib/libLLVM.so
for link in $_solinks; do
_real_link=$(basename $link)
ln -s ../../$main_soname "$subpkgdir"/$_prefix/lib/$_real_link
done
}
dev() {
_common_subpkg
default_dev
mkdir -p "$subpkgdir"/$_prefix/bin
mv "$pkgdir"/$_prefix/lib "$subpkgdir"/$_prefix/
mv "$pkgdir"/$_prefix/include "$subpkgdir"/$_prefix/
mv "$pkgdir"/$_prefix/bin/llvm-config "$subpkgdir"/$_prefix/bin/
}
_test_utils() {
pkgdesc="LLVM $_majorver utilities for executing LLVM and Clang style test suites"
depends="python3"
_common_subpkg
replaces=""
litver="$(python3 "$builddir"/utils/lit/setup.py --version 2>/dev/null \
| sed 's/\.dev.*$//')"
test -n "$litver" || return 1
provides="$provides lit=$litver-r$pkgrel"
cd "$builddir"/build
install -D -m 755 bin/FileCheck "$subpkgdir"/$_prefix/bin/FileCheck
install -D -m 755 bin/count "$subpkgdir"/$_prefix/bin/count
install -D -m 755 bin/not "$subpkgdir"/$_prefix/bin/not
python3 ../utils/lit/setup.py install --prefix=/usr --root="$subpkgdir"
ln -s ../../../bin/lit "$subpkgdir"/$_prefix/bin/lit
}
_common_subpkg() {
if [ "$_default_llvm" = yes ]; then
replaces="llvm${subpkgname#$pkgname}"
provides="$replaces=$pkgver-r$pkgrel"
fi
}
sha512sums="25eeee9984c8b4d0fbc240df90f33cbb000d3b0414baff5c8982beafcc5e59e7ef18f6f85d95b3a5f60cb3d4cd4f877c80487b5768bc21bc833f107698ad93db llvm-project-18.1.8.src.tar.xz
f84cd65d7042e89826ba6e8d48c4c302bf4980da369d7f19a55f217e51c00ca8ed178d453df3a3cee76598a7cecb94aed0775a6d24fe73266f82749913fc3e71 llvm-fix-build-with-musl-libc.patch
d56945bb0476561028616222846257f990d66e68b4458894f8791252411038b269831f9400ed9df3b99f571a82443caaac347a8b38a5516c77c3583469118309 disable-FileSystemTest.CreateDir-perms-assert.patch
9e919d7988b18c7184d9fccd14911d70bbe2acf82d38111bfd41f1ba2976fea07e74527a43c552dad158c982a2cbaaf03f6a1e98c7a1fc02b4e75382cfe6d0b2 dyld-elf-ppc32.patch
807587a0c897d47a01a846c5c4f7cbf1f2d16437a163b66ee2381a7147e9d04b0141b2c76d022db61903d0d2841ddb267ba98c66c9e41501ca41837659743df8 hexagon.patch
22dedbbdc99ab4df6c64921186803552fc61cfc00a5cd052295a5450809e7205ac21dd07df158b7e99b960084b2ec3d8832480a8cd073fe1c2d613cd21c90b60 i586-json-test.patch
b186ce027dca389cfd23dc91b03e023e688c7610745cf62d0b277b6178972bcf55abf0df08453f2a6b85dc61dba929cb565cb30633a2fe0f193a443f54025bf7 m68k-endianness.patch
64a28241b9ea87cfc4313440bf53b1c85dff9a1c84846f5b7619b67842acd68da878a1196baccb1e28f44a1484c09d5bffd4cf14341ed2b24642006e6d87b90a macho32.patch
bec1fe4761dae33a8012a54b7bbdd179cac82febcd46ace1844772c06f207661c903f05fcb7a5ebbbece3e33a88b20a5d9b31b40e8a8cd5c626aec04cb6735be musl-ppc64-elfv2.patch
bda83678acb97be4d4236179792b3555b8000242fa6bd9e2e78dcd4f6182395df7fa9b8742fde946f19b668615ab37db8670340d43683787d36c540937bca523 ppc-gcc-bug.patch
89ef5fbab039b017a5652656adf17b680525f1c5dd0b1afc8034fe0b34a2ca196d87640f54cc826356cfcd88c6e5f10754b7e38f04ca49ede4f3864080b787bd python3-test.patch
3dc797036dd976db76c774c4b87609d8548cfcd6575dd1e5322a2170fca4419b6934e12874f1c6650d73b858527d22d70e7abe5270dff79c190feeeb1d965d0a roundeven.patch"
Do not assert permissions of file created in /tmp directory.
This assertion fails, probably due to some specific setup of /tmp
on build servers.
FAIL: LLVM-Unit :: Support/SupportTests/FileSystemTest.CreateDir (1293 of 17222)
******************** TEST 'LLVM-Unit :: Support/SupportTests/FileSystemTest.CreateDir' FAILED ********************
Note: Google Test filter = FileSystemTest.CreateDir
[==========] Running 1 test from 1 test case.
[----------] Global test environment set-up.
[----------] 1 test from FileSystemTest
[ RUN ] FileSystemTest.CreateDir
/home/buildozer/aports/testing/llvm3.9/src/llvm-3.9.1.src/unittests/Support/Path.cpp:591: Failure
Value of: fs::perms::owner_read | fs::perms::owner_exe
Actual: 320
Expected: Status.permissions() & fs::perms::all_all
Which is: 448
--- a/unittests/Support/Path.cpp
+++ b/unittests/Support/Path.cpp
@@ -1004,23 +1004,23 @@
ASSERT_NO_ERROR(fs::remove(Twine(TestDirectory) + "foo"));
#ifdef LLVM_ON_UNIX
- // Set a 0000 umask so that we can test our directory permissions.
- mode_t OldUmask = ::umask(0000);
-
- fs::file_status Status;
- ASSERT_NO_ERROR(
- fs::create_directory(Twine(TestDirectory) + "baz500", false,
- fs::perms::owner_read | fs::perms::owner_exe));
- ASSERT_NO_ERROR(fs::status(Twine(TestDirectory) + "baz500", Status));
- ASSERT_EQ(Status.permissions() & fs::perms::all_all,
- fs::perms::owner_read | fs::perms::owner_exe);
- ASSERT_NO_ERROR(fs::create_directory(Twine(TestDirectory) + "baz777", false,
- fs::perms::all_all));
- ASSERT_NO_ERROR(fs::status(Twine(TestDirectory) + "baz777", Status));
- ASSERT_EQ(Status.permissions() & fs::perms::all_all, fs::perms::all_all);
-
- // Restore umask to be safe.
- ::umask(OldUmask);
+// // Set a 0000 umask so that we can test our directory permissions.
+// mode_t OldUmask = ::umask(0000);
+//
+// fs::file_status Status;
+// ASSERT_NO_ERROR(
+// fs::create_directory(Twine(TestDirectory) + "baz500", false,
+// fs::perms::owner_read | fs::perms::owner_exe));
+// ASSERT_NO_ERROR(fs::status(Twine(TestDirectory) + "baz500", Status));
+// ASSERT_EQ(Status.permissions() & fs::perms::all_all,
+// fs::perms::owner_read | fs::perms::owner_exe);
+// ASSERT_NO_ERROR(fs::create_directory(Twine(TestDirectory) + "baz777", false,
+// fs::perms::all_all));
+// ASSERT_NO_ERROR(fs::status(Twine(TestDirectory) + "baz777", Status));
+// ASSERT_EQ(Status.permissions() & fs::perms::all_all, fs::perms::all_all);
+//
+// // Restore umask to be safe.
+// ::umask(OldUmask);
#endif
#ifdef _WIN32
Author: A. Wilcox <awilfox@adelielinux.org>
This isn't the proper fix, but debugging the LLVM formatter is a bit
above my paygrade at the moment.
The issue shows up in the DWARF X86 test on ppc and armv7:
error: Simplified template DW_AT_name could not be reconstituted:
original: f3<char, '\x00', '\x01', '\x06', '\a', '\r', '\x0e', '\x1f', ' ', '!', '\x7f', '\x80'>
reconstituted: f3<char, '\x00', '\x00', '\x00', '\a', '\r', '\x00', '\x00', ' ', '!', '\x00', '\x00'>
With this patch, this error does not occur. Debugging shows that the
llvm::format overload called in the error case is <long long>, so I
think it is having an issue converting a 64-bit value on platforms
where char is default-unsigned.
(pmmx does not show this issue, and has signed char.)
--- llvm-14.0.6.src/lib/DebugInfo/DWARF/DWARFDie.cpp.old 2022-06-22 16:46:24.000000000 +0000
+++ llvm-14.0.6.src/lib/DebugInfo/DWARF/DWARFDie.cpp 2022-11-28 10:32:05.573627744 +0000
@@ -506,7 +506,7 @@
OS << (char)Val;
OS << "'";
} else if (Val < 256)
- OS << to_string(llvm::format("'\\x%02x'", Val));
+ OS << to_string(llvm::format("'\\x%02x'", (unsigned char)Val));
else if (Val <= 0xFFFF)
OS << to_string(llvm::format("'\\u%04x'", Val));
else
Author: A. Wilcox <awilfox@adelielinux.org>
Upstream-Status: Pending
This implements the R_PPC_REL32 relocation type, which is needed for the
OrcJIT to work properly on 32-bit PowerPC.
Needs more tests before submitting upstream, but seems to DTRT.
--- llvm-14.0.6.src/lib/ExecutionEngine/RuntimeDyld/RuntimeDyldELF.cpp.old 2022-06-22 16:46:24.000000000 +0000
+++ llvm-14.0.6.src/lib/ExecutionEngine/RuntimeDyld/RuntimeDyldELF.cpp 2022-11-28 06:33:12.239921624 +0000
@@ -830,6 +830,13 @@
case ELF::R_PPC_ADDR16_HA:
writeInt16BE(LocalAddress, applyPPCha(Value + Addend));
break;
+ case ELF::R_PPC_REL32:
+ uint32_t FinalAddress = Section.getLoadAddressWithOffset(Offset);
+ int64_t delta = static_cast<int64_t>(Value - FinalAddress + Addend);
+ if (SignExtend64<32>(delta) != delta)
+ llvm_unreachable("Relocation R_PPC_REL32 overflow");
+ writeInt32BE(LocalAddress, delta);
+ break;
}
}
From 37605662a99bd0815e2f2e452eb6ab1ce53ecffd Mon Sep 17 00:00:00 2001
From: "A. Wilcox" <AWilcox@Wilcox-Tech.com>
Date: Mon, 30 May 2022 02:51:34 -0500
Subject: [PATCH] [Hexagon][Tests] Fix tests on Linux/musl
When running on a host system using musl, the target triple is defined
as hexagon-unknown-linux-musl by default. The Linux ABI differs from
the non-Linux one with varargs, so this causes the tests to fail.
Closes BZ49592, PR48936.
Signed-off-by: A. Wilcox <AWilcox@Wilcox-Tech.com>
---
test/CodeGen/Hexagon/csr-stubs-spill-threshold.ll | 2 +-
test/CodeGen/Hexagon/long-calls.ll | 2 +-
test/CodeGen/Hexagon/mlong-calls.ll | 2 +-
test/CodeGen/Hexagon/pic-regusage.ll | 2 +-
test/CodeGen/Hexagon/runtime-stkchk.ll | 2 +-
test/CodeGen/Hexagon/swp-memrefs-epilog.ll | 2 +-
test/CodeGen/Hexagon/vararg-formal.ll | 2 +-
7 files changed, 7 insertions(+), 7 deletions(-)
diff --git a/test/CodeGen/Hexagon/csr-stubs-spill-threshold.ll b/test/CodeGen/Hexagon/csr-stubs-spill-threshold.ll
index afbef217911a..d317d7eac800 100644
--- a/test/CodeGen/Hexagon/csr-stubs-spill-threshold.ll
+++ b/test/CodeGen/Hexagon/csr-stubs-spill-threshold.ll
@@ -1,4 +1,4 @@
-; RUN: llc -mtriple=hexagon -O2 -spill-func-threshold=2 < %s | FileCheck %s
+; RUN: llc -march=hexagon -mtriple=hexagon-unknown-linux-gnu -O2 -spill-func-threshold=2 < %s | FileCheck %s
declare i32 @f0(i32, i32, i32, i32, i32, i32)
diff --git a/test/CodeGen/Hexagon/long-calls.ll b/test/CodeGen/Hexagon/long-calls.ll
index 628362783c9c..886405a2d91a 100644
--- a/test/CodeGen/Hexagon/long-calls.ll
+++ b/test/CodeGen/Hexagon/long-calls.ll
@@ -1,4 +1,4 @@
-; RUN: llc -mtriple=hexagon -enable-save-restore-long -hexagon-initial-cfg-cleanup=0 < %s | FileCheck %s
+; RUN: llc -march=hexagon -mtriple=hexagon-unknown-linux-gnu -enable-save-restore-long -hexagon-initial-cfg-cleanup=0 < %s | FileCheck %s
; Check that the -long-calls feature is supported by the backend.
diff --git a/test/CodeGen/Hexagon/mlong-calls.ll b/test/CodeGen/Hexagon/mlong-calls.ll
index d76b87f987fe..383486dfe63d 100644
--- a/test/CodeGen/Hexagon/mlong-calls.ll
+++ b/test/CodeGen/Hexagon/mlong-calls.ll
@@ -1,4 +1,4 @@
-; RUN: llc -hexagon-long-calls -mtriple=hexagon -enable-save-restore-long=true < %s | FileCheck %s
+; RUN: llc -hexagon-long-calls -march=hexagon -mtriple=hexagon-unknown-linux-gnu -enable-save-restore-long=true < %s | FileCheck %s
; CHECK: call ##f1
; CHECK: jump ##__restore
diff --git a/test/CodeGen/Hexagon/pic-regusage.ll b/test/CodeGen/Hexagon/pic-regusage.ll
index 9d3b6cec39e3..077063e36550 100644
--- a/test/CodeGen/Hexagon/pic-regusage.ll
+++ b/test/CodeGen/Hexagon/pic-regusage.ll
@@ -1,4 +1,4 @@
-; RUN: llc -mtriple=hexagon -relocation-model=pic < %s | FileCheck %s
+; RUN: llc -march=hexagon -mtriple=hexagon-unknown-linux-gnu -relocation-model=pic < %s | FileCheck %s
; Force the use of R14 (by clobbering everything else in the inline asm).
; Make sure that R14 is not set before the __save call (which will clobber
diff --git a/test/CodeGen/Hexagon/runtime-stkchk.ll b/test/CodeGen/Hexagon/runtime-stkchk.ll
index 66e93d02ef51..2f3f2ad10f6a 100644
--- a/test/CodeGen/Hexagon/runtime-stkchk.ll
+++ b/test/CodeGen/Hexagon/runtime-stkchk.ll
@@ -1,4 +1,4 @@
-; RUN: llc -mtriple=hexagon -mcpu=hexagonv55 -enable-stackovf-sanitizer < %s | FileCheck %s
+; RUN: llc -march=hexagon -mcpu=hexagonv55 -mtriple=hexagon-unknown-linux-gnu -enable-stackovf-sanitizer < %s | FileCheck %s
; CHECK-LABEL: foo_1
; CHECK: __runtime_stack_check
diff --git a/test/CodeGen/Hexagon/swp-memrefs-epilog.ll b/test/CodeGen/Hexagon/swp-memrefs-epilog.ll
index 20e39dd08fd7..b34dfbc31e9d 100644
--- a/test/CodeGen/Hexagon/swp-memrefs-epilog.ll
+++ b/test/CodeGen/Hexagon/swp-memrefs-epilog.ll
@@ -1,4 +1,4 @@
-; RUN: llc -march=hexagon -O2 -fp-contract=fast < %s -pipeliner-experimental-cg=true | FileCheck %s
+; RUN: llc -march=hexagon -mtriple=hexagon-unknown-linux-gnu -O2 -fp-contract=fast < %s -pipeliner-experimental-cg=true | FileCheck %s
; Test that the memoperands for instructions in the epilog are updated
; correctly. Previously, the pipeliner updated the offset for the memoperands
diff --git a/test/CodeGen/Hexagon/vararg-formal.ll b/test/CodeGen/Hexagon/vararg-formal.ll
index 6bba65fcab16..fb3132929bcf 100644
--- a/test/CodeGen/Hexagon/vararg-formal.ll
+++ b/test/CodeGen/Hexagon/vararg-formal.ll
@@ -1,4 +1,4 @@
-; RUN: llc -march=hexagon < %s | FileCheck %s
+; RUN: llc -march=hexagon -mtriple=hexagon-unknown-linux-gnu < %s | FileCheck %s
; Make sure that the first formal argument is not loaded from memory.
; CHECK-NOT: memw
--
2.36.0
--- llvm/unittests/Support/JSONTest.cpp.old 2024-06-15 12:21:32.000000000 -0500
+++ llvm/unittests/Support/JSONTest.cpp 2024-07-08 21:09:43.106973458 -0500
@@ -313,6 +313,8 @@
1.5,
},
+ // Broken by -fexcess-precision=fast.
+#ifndef __i586
{
"Integer, not exact double. Stored as int64, convertible.",
int64_t{0x4000000000000001},
@@ -328,6 +330,7 @@
int64_t{-0x4000000000000001},
double{-0x4000000000000000},
},
+#endif
// PR46470,
// https://developercommunity.visualstudio.com/content/problem/1093399/incorrect-result-when-printing-6917529027641081856.html
From 5c571082fdaf61f6df19d9b7137dc26d71334058 Mon Sep 17 00:00:00 2001
From: Natanael Copa <ncopa@alpinelinux.org>
Date: Thu, 18 Feb 2016 10:33:04 +0100
Subject: [PATCH 2/3] Fix build with musl libc
On musl libc the fopen64 and fopen are the same thing, but for
compatibility they have a `#define fopen64 fopen`. Same applies for
fseek64, fstat64, fstatvfs64, ftello64, lstat64, stat64 and tmpfile64.
---
include/llvm/Analysis/TargetLibraryInfo.h | 9 +++++++++
1 file changed, 9 insertions(+)
diff --git a/include/llvm/Analysis/TargetLibraryInfo.h b/include/llvm/Analysis/TargetLibraryInfo.h
index 7becdf0..7f14427 100644
--- a/include/llvm/Analysis/TargetLibraryInfo.h
+++ b/include/llvm/Analysis/TargetLibraryInfo.h
@@ -18,6 +18,26 @@
#include "llvm/IR/Module.h"
#include "llvm/Pass.h"
+#undef fopen64
+#undef fseeko64
+#undef fstat64
+#undef fstatvfs64
+#undef ftello64
+#undef lstat64
+#undef stat64
+#undef tmpfile64
+#undef F_GETLK64
+#undef F_SETLK64
+#undef F_SETLKW64
+#undef flock64
+#undef open64
+#undef openat64
+#undef creat64
+#undef lockf64
+#undef posix_fadvise64
+#undef posix_fallocate64
+#undef off64_t
+
namespace llvm {
/// VecDesc - Describes a possible vectorization of a function.
/// Function 'VectorFnName' is equivalent to 'ScalarFnName' vectorized
--
2.7.3