From 57762abcbf59410fc77ac48a3027bdee08c9291f Mon Sep 17 00:00:00 2001
From: Zach van Rijn <me@zv.io>
Date: Fri, 6 Dec 2024 19:22:35 +0000
Subject: bootstrap/llvm18: replace symlink with files.

Note: default_llvm="no"

Effectively reverts 1c7549b7bb4dcf1142d6c19876841ccc93fcafd5
since 'abuild' uses readlink to derive repository information.

The user/llvm18 package is free to be updated independently.
---
 bootstrap/llvm18                                   |   1 -
 bootstrap/llvm18/APKBUILD                          | 339 +++++++++++++++++++++
 ...ble-FileSystemTest.CreateDir-perms-assert.patch |  61 ++++
 bootstrap/llvm18/dwarf-info.patch                  |  28 ++
 bootstrap/llvm18/dyld-elf-ppc32.patch              |  24 ++
 bootstrap/llvm18/hexagon.patch                     |  95 ++++++
 bootstrap/llvm18/i586-json-test.patch              |  19 ++
 .../llvm18/llvm-fix-build-with-musl-libc.patch     |  46 +++
 bootstrap/llvm18/m68k-endianness.patch             |  26 ++
 bootstrap/llvm18/macho32.patch                     |  17 ++
 bootstrap/llvm18/musl-ppc64-elfv2.patch            |  28 ++
 bootstrap/llvm18/ppc-gcc-bug.patch                 |  22 ++
 bootstrap/llvm18/python3-test.patch                |   8 +
 bootstrap/llvm18/roundeven.patch                   |  49 +++
 14 files changed, 762 insertions(+), 1 deletion(-)
 delete mode 120000 bootstrap/llvm18
 create mode 100644 bootstrap/llvm18/APKBUILD
 create mode 100644 bootstrap/llvm18/disable-FileSystemTest.CreateDir-perms-assert.patch
 create mode 100644 bootstrap/llvm18/dwarf-info.patch
 create mode 100644 bootstrap/llvm18/dyld-elf-ppc32.patch
 create mode 100644 bootstrap/llvm18/hexagon.patch
 create mode 100644 bootstrap/llvm18/i586-json-test.patch
 create mode 100644 bootstrap/llvm18/llvm-fix-build-with-musl-libc.patch
 create mode 100644 bootstrap/llvm18/m68k-endianness.patch
 create mode 100644 bootstrap/llvm18/macho32.patch
 create mode 100644 bootstrap/llvm18/musl-ppc64-elfv2.patch
 create mode 100644 bootstrap/llvm18/ppc-gcc-bug.patch
 create mode 100644 bootstrap/llvm18/python3-test.patch
 create mode 100644 bootstrap/llvm18/roundeven.patch

diff --git a/bootstrap/llvm18 b/bootstrap/llvm18
deleted file mode 120000
index c456d7817..000000000
--- a/bootstrap/llvm18
+++ /dev/null
@@ -1 +0,0 @@
-../user/llvm18
\ No newline at end of file
diff --git a/bootstrap/llvm18/APKBUILD b/bootstrap/llvm18/APKBUILD
new file mode 100644
index 000000000..3c0f57c68
--- /dev/null
+++ b/bootstrap/llvm18/APKBUILD
@@ -0,0 +1,339 @@
+# 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/X86/DWARFLinkerParallel/odr-member-functions.cpp \
+		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
+}
+
+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"
diff --git a/bootstrap/llvm18/disable-FileSystemTest.CreateDir-perms-assert.patch b/bootstrap/llvm18/disable-FileSystemTest.CreateDir-perms-assert.patch
new file mode 100644
index 000000000..64f13db73
--- /dev/null
+++ b/bootstrap/llvm18/disable-FileSystemTest.CreateDir-perms-assert.patch
@@ -0,0 +1,61 @@
+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
diff --git a/bootstrap/llvm18/dwarf-info.patch b/bootstrap/llvm18/dwarf-info.patch
new file mode 100644
index 000000000..9357c6519
--- /dev/null
+++ b/bootstrap/llvm18/dwarf-info.patch
@@ -0,0 +1,28 @@
+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
diff --git a/bootstrap/llvm18/dyld-elf-ppc32.patch b/bootstrap/llvm18/dyld-elf-ppc32.patch
new file mode 100644
index 000000000..7fb744169
--- /dev/null
+++ b/bootstrap/llvm18/dyld-elf-ppc32.patch
@@ -0,0 +1,24 @@
+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;
+   }
+ }
+ 
diff --git a/bootstrap/llvm18/hexagon.patch b/bootstrap/llvm18/hexagon.patch
new file mode 100644
index 000000000..552079b80
--- /dev/null
+++ b/bootstrap/llvm18/hexagon.patch
@@ -0,0 +1,95 @@
+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
+
diff --git a/bootstrap/llvm18/i586-json-test.patch b/bootstrap/llvm18/i586-json-test.patch
new file mode 100644
index 000000000..e72763976
--- /dev/null
+++ b/bootstrap/llvm18/i586-json-test.patch
@@ -0,0 +1,19 @@
+--- 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
diff --git a/bootstrap/llvm18/llvm-fix-build-with-musl-libc.patch b/bootstrap/llvm18/llvm-fix-build-with-musl-libc.patch
new file mode 100644
index 000000000..6ee91ea44
--- /dev/null
+++ b/bootstrap/llvm18/llvm-fix-build-with-musl-libc.patch
@@ -0,0 +1,46 @@
+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
+
diff --git a/bootstrap/llvm18/m68k-endianness.patch b/bootstrap/llvm18/m68k-endianness.patch
new file mode 100644
index 000000000..49e96a995
--- /dev/null
+++ b/bootstrap/llvm18/m68k-endianness.patch
@@ -0,0 +1,26 @@
+Upstream: https://github.com/llvm/llvm-project/issues/94726
+
+diff --git a/lib/Target/M68k/MCTargetDesc/M68kBaseInfo.h b/lib/Target/M68k/MCTargetDesc/M68kBaseInfo.h
+index 1376b06bef6f..62ea03cc9760 100644
+--- a/lib/Target/M68k/MCTargetDesc/M68kBaseInfo.h
++++ b/lib/Target/M68k/MCTargetDesc/M68kBaseInfo.h
+@@ -85,9 +85,16 @@ template <typename value_t> value_t swapWord(value_t Val) {
+   Val = support::endian::byte_swap(Val, llvm::endianness::big);
+   value_t NewVal = 0;
+   for (unsigned i = 0U; i != NumWords; ++i) {
+-    uint16_t Part = (Val >> (i * 16)) & 0xFFFF;
+-    Part = support::endian::byte_swap(Part, llvm::endianness::big);
+-    NewVal |= (Part << (i * 16));
++    if (llvm::endianness::native == llvm::endianness::big) {
++      uint16_t Lo = (Val >> (i * 16)) & 0xFFFF;
++      NewVal |= (Lo << (++i * 16));
++      uint16_t Hi = (Val >> (++i * 16)) & 0xFFFF;
++      NewVal |= (Hi << ((i - 1) * 16));
++    } else {
++      uint16_t Part = (Val >> (i * 16)) & 0xFFFF;
++      Part = support::endian::byte_swap(Part, llvm::endianness::big);
++      NewVal |= (Part << (i * 16));
++    }
+   }
+   return NewVal;
+ }
diff --git a/bootstrap/llvm18/macho32.patch b/bootstrap/llvm18/macho32.patch
new file mode 100644
index 000000000..e18098372
--- /dev/null
+++ b/bootstrap/llvm18/macho32.patch
@@ -0,0 +1,17 @@
+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
+@@ -192,7 +192,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)
diff --git a/bootstrap/llvm18/musl-ppc64-elfv2.patch b/bootstrap/llvm18/musl-ppc64-elfv2.patch
new file mode 100644
index 000000000..49f6e5702
--- /dev/null
+++ b/bootstrap/llvm18/musl-ppc64-elfv2.patch
@@ -0,0 +1,28 @@
+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
+
diff --git a/bootstrap/llvm18/ppc-gcc-bug.patch b/bootstrap/llvm18/ppc-gcc-bug.patch
new file mode 100644
index 000000000..3c1371dc4
--- /dev/null
+++ b/bootstrap/llvm18/ppc-gcc-bug.patch
@@ -0,0 +1,22 @@
+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>;
diff --git a/bootstrap/llvm18/python3-test.patch b/bootstrap/llvm18/python3-test.patch
new file mode 100644
index 000000000..76f13385d
--- /dev/null
+++ b/bootstrap/llvm18/python3-test.patch
@@ -0,0 +1,8 @@
+--- 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
+ 
diff --git a/bootstrap/llvm18/roundeven.patch b/bootstrap/llvm18/roundeven.patch
new file mode 100644
index 000000000..3747969c1
--- /dev/null
+++ b/bootstrap/llvm18/roundeven.patch
@@ -0,0 +1,49 @@
+--- 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
+@@ -634,6 +634,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
+ ; REQUIRES: x86-registered-target,sparc-registered-target
+-; RUN: opt < %s -passes=instcombine -S -mtriple "i386-pc-linux"     | FileCheck %s --check-prefixes=CHECK,DOUBLE-4BYTE-ALIGN
++; RUN: opt < %s -passes=instcombine -S -mtriple "i386-pc-linux-gnu" | FileCheck %s --check-prefixes=CHECK,DOUBLE-4BYTE-ALIGN
+ ; RUN: opt < %s -passes=instcombine -S -mtriple "i386-pc-win32"     | FileCheck %s --check-prefixes=CHECK,DOUBLE-8BYTE-ALIGN
+ ; RUN: opt < %s -passes=instcombine -S -mtriple "x86_64-pc-win32"   | FileCheck %s --check-prefixes=CHECK,DOUBLE-8BYTE-ALIGN
+--- 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
-- 
cgit v1.2.3-70-g09d2