diff --git a/.gitignore b/.gitignore index 3cc2136..f45c346 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,6 @@ -SOURCES/cmake-16.0.6.src.tar.xz -SOURCES/cmake-16.0.6.src.tar.xz.sig -SOURCES/llvm-16.0.6.src.tar.xz -SOURCES/llvm-16.0.6.src.tar.xz.sig -SOURCES/third-party-16.0.6.src.tar.xz -SOURCES/third-party-16.0.6.src.tar.xz.sig +SOURCES/cmake-17.0.6.src.tar.xz +SOURCES/cmake-17.0.6.src.tar.xz.sig +SOURCES/llvm-17.0.6.src.tar.xz +SOURCES/llvm-17.0.6.src.tar.xz.sig +SOURCES/third-party-17.0.6.src.tar.xz +SOURCES/third-party-17.0.6.src.tar.xz.sig diff --git a/.llvm.metadata b/.llvm.metadata index db34f0d..581cbc0 100644 --- a/.llvm.metadata +++ b/.llvm.metadata @@ -1,6 +1,6 @@ -0de534cfef38697e115c3ae80634765f05e78e5b SOURCES/cmake-16.0.6.src.tar.xz -2db5c88fe9277bb0fa85f49b58e946e49ff235c2 SOURCES/cmake-16.0.6.src.tar.xz.sig -072d2fb4b10f95d06189de00eb7f7e9b35c54e9a SOURCES/llvm-16.0.6.src.tar.xz -bfc74b3868c69ce674a583c91e938b6d4cf0fded SOURCES/llvm-16.0.6.src.tar.xz.sig -5b1a58de6ed9d154a38edb6386a5749576e0b96a SOURCES/third-party-16.0.6.src.tar.xz -51ad6a8ccc5ccd40faff6f1c98a2f33a9b600f88 SOURCES/third-party-16.0.6.src.tar.xz.sig +4b397344260c934e687be7efa0f8456a9dd46f44 SOURCES/cmake-17.0.6.src.tar.xz +fa31d348b6780478403484e22139d25f403503d4 SOURCES/cmake-17.0.6.src.tar.xz.sig +860a3605f08a0a56a8de4e073e26a259871623a6 SOURCES/llvm-17.0.6.src.tar.xz +2ad479ab00a6d5e61ecb953997cfeef6650a687a SOURCES/llvm-17.0.6.src.tar.xz.sig +a35dc22cd3d983a556f6e4a63c8dac6a84e01caf SOURCES/third-party-17.0.6.src.tar.xz +12128cdab7414aeedd573c61cbc2fa82e75491db SOURCES/third-party-17.0.6.src.tar.xz.sig diff --git a/SOURCES/0001-Deactivate-markdown-doc.patch b/SOURCES/0001-Deactivate-markdown-doc.patch deleted file mode 100644 index 92e048d..0000000 --- a/SOURCES/0001-Deactivate-markdown-doc.patch +++ /dev/null @@ -1,25 +0,0 @@ -diff -Naur a/llvm/docs/conf.py b/llvm/docs/conf.py ---- a/llvm/docs/conf.py 2020-09-15 09:12:24.318287611 +0000 -+++ b/llvm/docs/conf.py 2020-09-15 15:01:00.025893199 +0000 -@@ -36,20 +36,7 @@ - '.rst': 'restructuredtext', - } - --try: -- import recommonmark --except ImportError: -- # manpages do not use any .md sources -- if not tags.has('builder-man'): -- raise --else: -- import sphinx -- if sphinx.version_info >= (3, 0): -- # This requires 0.5 or later. -- extensions.append('recommonmark') -- else: -- source_parsers = {'.md': 'recommonmark.parser.CommonMarkParser'} -- source_suffix['.md'] = 'markdown' -+import sphinx - - # The encoding of source files. - #source_encoding = 'utf-8-sig' diff --git a/SOURCES/0001-PEI-Don-t-zero-out-noreg-operands.patch b/SOURCES/0001-PEI-Don-t-zero-out-noreg-operands.patch new file mode 100644 index 0000000..0f16465 --- /dev/null +++ b/SOURCES/0001-PEI-Don-t-zero-out-noreg-operands.patch @@ -0,0 +1,74 @@ +From 9d1f05a7b8537deb5f626cd1b7b26ef2678f4c8e Mon Sep 17 00:00:00 2001 +From: Arthur Eubanks +Date: Thu, 27 Jul 2023 13:27:58 -0700 +Subject: [PATCH] [PEI] Don't zero out noreg operands + +A tail call may have $noreg operands. + +Fixes a crash. + +Reviewed By: xgupta + +Differential Revision: https://reviews.llvm.org/D156485 + +(cherry picked from commit f800c1f3b207e7bcdc8b4c7192928d9a078242a0) +--- + llvm/lib/CodeGen/PrologEpilogInserter.cpp | 9 +++++++-- + llvm/test/CodeGen/X86/zero-call-used-regs.ll | 14 ++++++++++++++ + 2 files changed, 21 insertions(+), 2 deletions(-) + +diff --git a/llvm/lib/CodeGen/PrologEpilogInserter.cpp b/llvm/lib/CodeGen/PrologEpilogInserter.cpp +index e323aaaeefaf..49047719fdaa 100644 +--- a/llvm/lib/CodeGen/PrologEpilogInserter.cpp ++++ b/llvm/lib/CodeGen/PrologEpilogInserter.cpp +@@ -1285,6 +1285,8 @@ void PEI::insertZeroCallUsedRegs(MachineFunction &MF) { + continue; + + MCRegister Reg = MO.getReg(); ++ if (!Reg) ++ continue; + + // This picks up sibling registers (e.q. %al -> %ah). + for (MCRegUnit Unit : TRI.regunits(Reg)) +@@ -1308,8 +1310,11 @@ void PEI::insertZeroCallUsedRegs(MachineFunction &MF) { + if (!MO.isReg()) + continue; + +- for (const MCPhysReg &Reg : +- TRI.sub_and_superregs_inclusive(MO.getReg())) ++ MCRegister Reg = MO.getReg(); ++ if (!Reg) ++ continue; ++ ++ for (const MCPhysReg Reg : TRI.sub_and_superregs_inclusive(Reg)) + RegsToZero.reset(Reg); + } + } +diff --git a/llvm/test/CodeGen/X86/zero-call-used-regs.ll b/llvm/test/CodeGen/X86/zero-call-used-regs.ll +index 63d51c916bb9..97ad5ce9c8cb 100644 +--- a/llvm/test/CodeGen/X86/zero-call-used-regs.ll ++++ b/llvm/test/CodeGen/X86/zero-call-used-regs.ll +@@ -241,6 +241,20 @@ entry: + ret i32 %x + } + ++define dso_local void @tailcall(ptr %p) local_unnamed_addr #0 "zero-call-used-regs"="used-gpr" { ++; I386-LABEL: tailcall: ++; I386: # %bb.0: ++; I386-NEXT: movl {{[0-9]+}}(%esp), %eax ++; I386-NEXT: jmpl *(%eax) # TAILCALL ++; ++; X86-64-LABEL: tailcall: ++; X86-64: # %bb.0: ++; X86-64-NEXT: jmpq *(%rdi) # TAILCALL ++ %c = load ptr, ptr %p ++ tail call void %c() ++ ret void ++} ++ + ; Don't emit zeroing registers in "main" function. + define dso_local i32 @main() local_unnamed_addr #1 { + ; I386-LABEL: main: +-- +2.43.0 + diff --git a/SOURCES/0001-SystemZ-Improve-error-messages-for-unsupported-reloc.patch b/SOURCES/0001-SystemZ-Improve-error-messages-for-unsupported-reloc.patch deleted file mode 100644 index 34128b6..0000000 --- a/SOURCES/0001-SystemZ-Improve-error-messages-for-unsupported-reloc.patch +++ /dev/null @@ -1,184 +0,0 @@ -From efbaf8bc61f4c0e29a3eaafb11ac0ddda8bd3dff Mon Sep 17 00:00:00 2001 -From: Ulrich Weigand -Date: Fri, 30 Jun 2023 16:02:56 +0200 -Subject: [PATCH] [SystemZ] Improve error messages for unsupported relocations - -In the SystemZMCObjectWriter, we currently just abort in case -some unsupported relocation in requested. However, as this -situation can be triggered by invalid (inline) assembler input, -we should really get a regular error message instead. ---- - .../MCTargetDesc/SystemZMCObjectWriter.cpp | 59 +++++++++++-------- - 1 file changed, 35 insertions(+), 24 deletions(-) - -diff --git a/llvm/lib/Target/SystemZ/MCTargetDesc/SystemZMCObjectWriter.cpp b/llvm/lib/Target/SystemZ/MCTargetDesc/SystemZMCObjectWriter.cpp -index c23463ab9bde..0b11468afc52 100644 ---- a/llvm/lib/Target/SystemZ/MCTargetDesc/SystemZMCObjectWriter.cpp -+++ b/llvm/lib/Target/SystemZ/MCTargetDesc/SystemZMCObjectWriter.cpp -@@ -9,6 +9,7 @@ - #include "MCTargetDesc/SystemZMCFixups.h" - #include "MCTargetDesc/SystemZMCTargetDesc.h" - #include "llvm/BinaryFormat/ELF.h" -+#include "llvm/MC/MCContext.h" - #include "llvm/MC/MCELFObjectWriter.h" - #include "llvm/MC/MCExpr.h" - #include "llvm/MC/MCFixup.h" -@@ -40,7 +41,7 @@ SystemZObjectWriter::SystemZObjectWriter(uint8_t OSABI) - /*HasRelocationAddend_=*/ true) {} - - // Return the relocation type for an absolute value of MCFixupKind Kind. --static unsigned getAbsoluteReloc(unsigned Kind) { -+static unsigned getAbsoluteReloc(MCContext &Ctx, SMLoc Loc, unsigned Kind) { - switch (Kind) { - case FK_Data_1: return ELF::R_390_8; - case FK_Data_2: return ELF::R_390_16; -@@ -49,11 +50,12 @@ static unsigned getAbsoluteReloc(unsigned Kind) { - case SystemZ::FK_390_12: return ELF::R_390_12; - case SystemZ::FK_390_20: return ELF::R_390_20; - } -- llvm_unreachable("Unsupported absolute address"); -+ Ctx.reportError(Loc, "Unsupported absolute address"); -+ return 0; - } - - // Return the relocation type for a PC-relative value of MCFixupKind Kind. --static unsigned getPCRelReloc(unsigned Kind) { -+static unsigned getPCRelReloc(MCContext &Ctx, SMLoc Loc, unsigned Kind) { - switch (Kind) { - case FK_Data_2: return ELF::R_390_PC16; - case FK_Data_4: return ELF::R_390_PC32; -@@ -63,62 +65,69 @@ static unsigned getPCRelReloc(unsigned Kind) { - case SystemZ::FK_390_PC24DBL: return ELF::R_390_PC24DBL; - case SystemZ::FK_390_PC32DBL: return ELF::R_390_PC32DBL; - } -- llvm_unreachable("Unsupported PC-relative address"); -+ Ctx.reportError(Loc, "Unsupported PC-relative address"); -+ return 0; - } - - // Return the R_390_TLS_LE* relocation type for MCFixupKind Kind. --static unsigned getTLSLEReloc(unsigned Kind) { -+static unsigned getTLSLEReloc(MCContext &Ctx, SMLoc Loc, unsigned Kind) { - switch (Kind) { - case FK_Data_4: return ELF::R_390_TLS_LE32; - case FK_Data_8: return ELF::R_390_TLS_LE64; - } -- llvm_unreachable("Unsupported absolute address"); -+ Ctx.reportError(Loc, "Unsupported thread-local address (local-exec)"); -+ return 0; - } - - // Return the R_390_TLS_LDO* relocation type for MCFixupKind Kind. --static unsigned getTLSLDOReloc(unsigned Kind) { -+static unsigned getTLSLDOReloc(MCContext &Ctx, SMLoc Loc, unsigned Kind) { - switch (Kind) { - case FK_Data_4: return ELF::R_390_TLS_LDO32; - case FK_Data_8: return ELF::R_390_TLS_LDO64; - } -- llvm_unreachable("Unsupported absolute address"); -+ Ctx.reportError(Loc, "Unsupported thread-local address (local-dynamic)"); -+ return 0; - } - - // Return the R_390_TLS_LDM* relocation type for MCFixupKind Kind. --static unsigned getTLSLDMReloc(unsigned Kind) { -+static unsigned getTLSLDMReloc(MCContext &Ctx, SMLoc Loc, unsigned Kind) { - switch (Kind) { - case FK_Data_4: return ELF::R_390_TLS_LDM32; - case FK_Data_8: return ELF::R_390_TLS_LDM64; - case SystemZ::FK_390_TLS_CALL: return ELF::R_390_TLS_LDCALL; - } -- llvm_unreachable("Unsupported absolute address"); -+ Ctx.reportError(Loc, "Unsupported thread-local address (local-dynamic)"); -+ return 0; - } - - // Return the R_390_TLS_GD* relocation type for MCFixupKind Kind. --static unsigned getTLSGDReloc(unsigned Kind) { -+static unsigned getTLSGDReloc(MCContext &Ctx, SMLoc Loc, unsigned Kind) { - switch (Kind) { - case FK_Data_4: return ELF::R_390_TLS_GD32; - case FK_Data_8: return ELF::R_390_TLS_GD64; - case SystemZ::FK_390_TLS_CALL: return ELF::R_390_TLS_GDCALL; - } -- llvm_unreachable("Unsupported absolute address"); -+ Ctx.reportError(Loc, "Unsupported thread-local address (general-dynamic)"); -+ return 0; - } - - // Return the PLT relocation counterpart of MCFixupKind Kind. --static unsigned getPLTReloc(unsigned Kind) { -+static unsigned getPLTReloc(MCContext &Ctx, SMLoc Loc, unsigned Kind) { - switch (Kind) { - case SystemZ::FK_390_PC12DBL: return ELF::R_390_PLT12DBL; - case SystemZ::FK_390_PC16DBL: return ELF::R_390_PLT16DBL; - case SystemZ::FK_390_PC24DBL: return ELF::R_390_PLT24DBL; - case SystemZ::FK_390_PC32DBL: return ELF::R_390_PLT32DBL; - } -- llvm_unreachable("Unsupported absolute address"); -+ Ctx.reportError(Loc, "Unsupported PC-relative PLT address"); -+ return 0; - } - - unsigned SystemZObjectWriter::getRelocType(MCContext &Ctx, - const MCValue &Target, - const MCFixup &Fixup, - bool IsPCRel) const { -+ SMLoc Loc = Fixup.getLoc(); - unsigned Kind = Fixup.getKind(); - if (Kind >= FirstLiteralRelocationKind) - return Kind - FirstLiteralRelocationKind; -@@ -126,38 +135,40 @@ unsigned SystemZObjectWriter::getRelocType(MCContext &Ctx, - switch (Modifier) { - case MCSymbolRefExpr::VK_None: - if (IsPCRel) -- return getPCRelReloc(Kind); -- return getAbsoluteReloc(Kind); -+ return getPCRelReloc(Ctx, Loc, Kind); -+ return getAbsoluteReloc(Ctx, Loc, Kind); - - case MCSymbolRefExpr::VK_NTPOFF: - assert(!IsPCRel && "NTPOFF shouldn't be PC-relative"); -- return getTLSLEReloc(Kind); -+ return getTLSLEReloc(Ctx, Loc, Kind); - - case MCSymbolRefExpr::VK_INDNTPOFF: - if (IsPCRel && Kind == SystemZ::FK_390_PC32DBL) - return ELF::R_390_TLS_IEENT; -- llvm_unreachable("Only PC-relative INDNTPOFF accesses are supported for now"); -+ Ctx.reportError(Loc, "Only PC-relative INDNTPOFF accesses are supported for now"); -+ return 0; - - case MCSymbolRefExpr::VK_DTPOFF: - assert(!IsPCRel && "DTPOFF shouldn't be PC-relative"); -- return getTLSLDOReloc(Kind); -+ return getTLSLDOReloc(Ctx, Loc, Kind); - - case MCSymbolRefExpr::VK_TLSLDM: - assert(!IsPCRel && "TLSLDM shouldn't be PC-relative"); -- return getTLSLDMReloc(Kind); -+ return getTLSLDMReloc(Ctx, Loc, Kind); - - case MCSymbolRefExpr::VK_TLSGD: - assert(!IsPCRel && "TLSGD shouldn't be PC-relative"); -- return getTLSGDReloc(Kind); -+ return getTLSGDReloc(Ctx, Loc, Kind); - - case MCSymbolRefExpr::VK_GOT: - if (IsPCRel && Kind == SystemZ::FK_390_PC32DBL) - return ELF::R_390_GOTENT; -- llvm_unreachable("Only PC-relative GOT accesses are supported for now"); -+ Ctx.reportError(Loc, "Only PC-relative GOT accesses are supported for now"); -+ return 0; - - case MCSymbolRefExpr::VK_PLT: -- assert(IsPCRel && "@PLT shouldt be PC-relative"); -- return getPLTReloc(Kind); -+ assert(IsPCRel && "@PLT shouldn't be PC-relative"); -+ return getPLTReloc(Ctx, Loc, Kind); - - default: - llvm_unreachable("Modifier not supported"); --- -2.41.0 - diff --git a/SOURCES/0001-llvm-Add-install-targets-for-gtest.patch b/SOURCES/0001-llvm-Add-install-targets-for-gtest.patch deleted file mode 100644 index e84c444..0000000 --- a/SOURCES/0001-llvm-Add-install-targets-for-gtest.patch +++ /dev/null @@ -1,32 +0,0 @@ -From 8cc3870f09d728d9017c72eba9520117a4283fee Mon Sep 17 00:00:00 2001 -From: Tom Stellard -Date: Thu, 17 Nov 2022 09:01:10 +0000 -Subject: Add install targets for gtest - -Stand-alone builds need an installed version of gtest in order to run -the unittests. - -Differential Revision: https://reviews.llvm.org/D137890 ---- - llvm/CMakeLists.txt | 5 +++++ - 1 file changed, 5 insertions(+) - -diff --git a/llvm/CMakeLists.txt b/llvm/CMakeLists.txt -index 60e1f29620af..d91338532815 100644 ---- a/llvm/CMakeLists.txt -+++ b/llvm/CMakeLists.txt -@@ -693,6 +693,11 @@ option(LLVM_BUILD_TESTS - "Build LLVM unit tests. If OFF, just generate build targets." OFF) - option(LLVM_INCLUDE_TESTS "Generate build targets for the LLVM unit tests." ON) - -+option(LLVM_INSTALL_GTEST -+ "Install the llvm gtest library. This should be on if you want to do -+ stand-alone builds of the other projects and run their unit tests." OFF) -+ -+ - option(LLVM_BUILD_BENCHMARKS "Add LLVM benchmark targets to the list of default - targets. If OFF, benchmarks still could be built using Benchmarks target." OFF) - option(LLVM_INCLUDE_BENCHMARKS "Generate benchmark targets. If OFF, benchmarks can't be built." ON) --- -2.34.3 - diff --git a/SOURCES/0101-Deactivate-markdown-doc.patch b/SOURCES/0101-Deactivate-markdown-doc.patch new file mode 100644 index 0000000..603cb39 --- /dev/null +++ b/SOURCES/0101-Deactivate-markdown-doc.patch @@ -0,0 +1,26 @@ +diff -Naur a/llvm/docs/conf.py b/llvm/docs/conf.py +--- a/llvm/docs/conf.py 2020-09-15 09:12:24.318287611 +0000 ++++ b/llvm/docs/conf.py 2020-09-15 15:01:00.025893199 +0000 +@@ -36,21 +36,7 @@ + ".rst": "restructuredtext", + } + +-try: +- import recommonmark +-except ImportError: +- # manpages do not use any .md sources +- if not tags.has("builder-man"): +- raise +-else: +- import sphinx +- +- if sphinx.version_info >= (3, 0): +- # This requires 0.5 or later. +- extensions.append("recommonmark") +- else: +- source_parsers = {".md": "recommonmark.parser.CommonMarkParser"} +- source_suffix[".md"] = "markdown" ++import sphinx + + # The encoding of source files. + # source_encoding = 'utf-8-sig' diff --git a/SOURCES/0201-third-party-Add-install-targets-for-gtest.patch b/SOURCES/0201-third-party-Add-install-targets-for-gtest.patch deleted file mode 100644 index 5c86130..0000000 --- a/SOURCES/0201-third-party-Add-install-targets-for-gtest.patch +++ /dev/null @@ -1,47 +0,0 @@ -From 8cc3870f09d728d9017c72eba9520117a4283fee Mon Sep 17 00:00:00 2001 -From: Tom Stellard -Date: Thu, 17 Nov 2022 09:01:10 +0000 -Subject: Add install targets for gtest - -Stand-alone builds need an installed version of gtest in order to run -the unittests. - -Differential Revision: https://reviews.llvm.org/D137890 ---- - third-party/unittest/CMakeLists.txt | 15 ++++++++++++++- - 1 file changed, 14 insertions(+), 1 deletion(-) - -diff --git a/third-party/unittest/CMakeLists.txt b/third-party/unittest/CMakeLists.txt -index 0e54e0e57c35..1d2a52730d7d 100644 ---- a/third-party/unittest/CMakeLists.txt -+++ b/third-party/unittest/CMakeLists.txt -@@ -65,12 +65,25 @@ if (NOT LLVM_ENABLE_THREADS) - endif () - - target_include_directories(llvm_gtest -- PUBLIC googletest/include googlemock/include -+ PUBLIC $ -+ $ -+ $ -+ $ - PRIVATE googletest googlemock - ) - - add_subdirectory(UnitTestMain) - -+if (LLVM_INSTALL_GTEST) -+export(TARGETS llvm_gtest llvm_gtest_main LLVMTestingSupport FILE LLVMGTestConfig.cmake) -+install(TARGETS llvm_gtest llvm_gtest_main LLVMTestingSupport EXPORT LLVMGTestConfig -+ ARCHIVE DESTINATION "lib${LLVM_LIBDIR_SUFFIX}" COMPONENT llvm_gtest) -+ install(EXPORT LLVMGTestConfig DESTINATION ${LLVM_INSTALL_PACKAGE_DIR} COMPONENT llvm_gtest) -+ add_llvm_install_targets(install-llvm_gtest COMPONENT llvm_gtest DEPENDS llvm_gtest LLVMGTestConfig.cmake) -+ install(DIRECTORY googletest/include/gtest/ DESTINATION include/llvm-gtest/gtest/ COMPONENT llvm_gtest) -+ install(DIRECTORY googlemock/include/gmock/ DESTINATION include/llvm-gmock/gmock/ COMPONENT llvm_gtest) -+endif() -+ - # When LLVM_LINK_LLVM_DYLIB is enabled, libLLVM.so is added to the interface - # link libraries for gtest and gtest_main. This means that any target, like - # unittests for example, that links against gtest will be forced to link --- -2.34.3 - diff --git a/SOURCES/D156379.diff b/SOURCES/D156379.diff deleted file mode 100644 index 6d7aef1..0000000 --- a/SOURCES/D156379.diff +++ /dev/null @@ -1,46 +0,0 @@ -diff --git a/llvm/lib/Target/SystemZ/SystemZTargetTransformInfo.cpp b/llvm/lib/Target/SystemZ/SystemZTargetTransformInfo.cpp ---- a/llvm/lib/Target/SystemZ/SystemZTargetTransformInfo.cpp -+++ b/llvm/lib/Target/SystemZ/SystemZTargetTransformInfo.cpp -@@ -1152,6 +1152,11 @@ - } - } - -+ // Type legalization (via getNumberOfParts) can't handle structs -+ if (TLI->getValueType(DL, Src, true) == MVT::Other) -+ return BaseT::getMemoryOpCost(Opcode, Src, Alignment, AddressSpace, -+ CostKind); -+ - unsigned NumOps = - (Src->isVectorTy() ? getNumVectorRegs(Src) : getNumberOfParts(Src)); - -diff --git a/llvm/test/Analysis/CostModel/SystemZ/struct-cost-crash.ll b/llvm/test/Analysis/CostModel/SystemZ/struct-cost-crash.ll -new file mode 100644 ---- /dev/null -+++ b/llvm/test/Analysis/CostModel/SystemZ/struct-cost-crash.ll -@@ -0,0 +1,25 @@ -+; NOTE: Assertions have been autogenerated by utils/update_analyze_test_checks.py UTC_ARGS: --version 2 -+; RUN: opt -passes="print" 2>&1 -disable-output < %s | FileCheck %s -+; -+; Check that SystemZTTIImpl::getMemoryOpCost doesn't try to legalize structs, -+; which was failing llvm_unreachable in MVT::getVT. -+ -+target datalayout = "E-m:e-i1:8:16-i8:8:16-i64:64-f128:64-v128:64-a:8:16-n32:64" -+target triple = "s390x-unknown-linux-gnu" -+ -+declare { i64, i32 } @bar() -+ -+define i8 @foo() { -+; CHECK-LABEL: 'foo' -+; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: br label %1 -+; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %2 = call { i64, i32 } @bar() -+; CHECK-NEXT: Cost Model: Found an estimated cost of 4 for instruction: store { i64, i32 } %2, ptr inttoptr (i64 16 to ptr), align 16 -+; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: br label %1 -+; -+ br label %1 -+ -+1: ; preds = %1, %0 -+ %2 = call { i64, i32 } @bar() -+ store { i64, i32 } %2, ptr inttoptr (i64 16 to ptr), align 16 -+ br label %1 -+} - diff --git a/SPECS/llvm.spec b/SPECS/llvm.spec index 1457b80..02f2c17 100644 --- a/SPECS/llvm.spec +++ b/SPECS/llvm.spec @@ -1,3 +1,10 @@ +%bcond_with snapshot_build + +%if %{with snapshot_build} +# Unlock LLVM Snapshot LUA functions +%{llvm_sb} +%endif + # We are building with clang for faster/lower memory LTO builds. # See https://docs.fedoraproject.org/en-US/packaging-guidelines/#_compiler_macros %global toolchain clang @@ -16,21 +23,37 @@ %bcond_with bundle_compat_lib %bcond_without check -%if %{with bundle_compat_lib} -%global compat_maj_ver 15 -%global compat_ver %{compat_maj_ver}.0.7 +%ifarch %ix86 +# Disable LTO on x86 in order to reduce memory consumption +%bcond_with lto_build +%elif %{with snapshot_build} +# Disable LTO to speed up builds +%bcond_with lto_build +%else +%bcond_without lto_build %endif -%global llvm_libdir %{_libdir}/%{name} -%global build_llvm_libdir %{buildroot}%{llvm_libdir} -#global rc_ver 3 -%global maj_ver 16 +%if %{with bundle_compat_lib} +%global compat_maj_ver 16 +%global compat_ver %{compat_maj_ver}.0.6 +%endif + +%global maj_ver 17 %global min_ver 0 %global patch_ver 6 +#global rc_ver 4 + +%if %{with snapshot_build} +%undefine rc_ver +%global maj_ver %{llvm_snapshot_version_major} +%global min_ver %{llvm_snapshot_version_minor} +%global patch_ver %{llvm_snapshot_version_patch} +%endif + %global llvm_srcdir llvm-%{maj_ver}.%{min_ver}.%{patch_ver}%{?rc_ver:rc%{rc_ver}}.src %global cmake_srcdir cmake-%{maj_ver}.%{min_ver}.%{patch_ver}%{?rc_ver:rc%{rc_ver}}.src -%global third_party_srcdir third-party-%{maj_ver}.%{min_ver}.%{patch_ver}%{?rc_ -ver:rc%{rc_ver}}.src +%global third_party_srcdir third-party-%{maj_ver}.%{min_ver}.%{patch_ver}%{?rc_ver:rc%{rc_ver}}.src +%global _lto_cflags -flto=thin %if %{with compat_build} %global pkg_name llvm%{maj_ver} @@ -40,15 +63,15 @@ ver:rc%{rc_ver}}.src %global install_includedir %{install_prefix}/include %global install_libdir %{install_prefix}/lib -%global pkg_bindir %{install_bindir} %global pkg_includedir %{_includedir}/%{name} -%global pkg_libdir %{install_libdir} +%global pkg_datadir %{install_prefix}/share %else %global pkg_name llvm %global install_prefix /usr +%global install_bindir %{_bindir} %global install_libdir %{_libdir} -%global pkg_bindir %{_bindir} -%global pkg_libdir %{install_libdir} +%global install_includedir %{_includedir} +%global pkg_datadir %{_datadir} %global exec_suffix %{nil} %endif @@ -80,12 +103,18 @@ ver:rc%{rc_ver}}.src %undefine _py3_shebang_P Name: %{pkg_name} -Version: %{maj_ver}.%{min_ver}.%{patch_ver}%{?rc_ver:~rc%{rc_ver}} -Release: 4%{?dist} +Version: %{maj_ver}.%{min_ver}.%{patch_ver}%{?rc_ver:~rc%{rc_ver}}%{?llvm_snapshot_version_suffix:~%{llvm_snapshot_version_suffix}} +Release: 5%{?dist} Summary: The Low Level Virtual Machine License: Apache-2.0 WITH LLVM-exception OR NCSA URL: http://llvm.org +%if %{with snapshot_build} +Source0: %{llvm_snapshot_source_prefix}llvm-%{llvm_snapshot_yyyymmdd}.src.tar.xz +Source2: %{llvm_snapshot_source_prefix}cmake-%{llvm_snapshot_yyyymmdd}.src.tar.xz +Source4: %{llvm_snapshot_source_prefix}third-party-%{llvm_snapshot_yyyymmdd}.src.tar.xz +%{llvm_snapshot_extra_source_tags} +%else Source0: https://github.com/llvm/llvm-project/releases/download/llvmorg-%{maj_ver}.%{min_ver}.%{patch_ver}%{?rc_ver:-rc%{rc_ver}}/%{llvm_srcdir}.tar.xz Source1: https://github.com/llvm/llvm-project/releases/download/llvmorg-%{maj_ver}.%{min_ver}.%{patch_ver}%{?rc_ver:-rc%{rc_ver}}/%{llvm_srcdir}.tar.xz.sig Source2: https://github.com/llvm/llvm-project/releases/download/llvmorg-%{maj_ver}.%{min_ver}.%{patch_ver}%{?rc_ver:-rc%{rc_ver}}/%{cmake_srcdir}.tar.xz @@ -98,20 +127,13 @@ Source6: release-keys.asc Source7: https://github.com/llvm/llvm-project/releases/download/llvmorg-%{compat_ver}/llvm-%{compat_ver}.src.tar.xz Source8: https://github.com/llvm/llvm-project/releases/download/llvmorg-%{compat_ver}/llvm-%{compat_ver}.src.tar.xz.sig %endif +%endif -# Backported from LLVM 17 -Patch1: 0001-SystemZ-Improve-error-messages-for-unsupported-reloc.patch -# See https://reviews.llvm.org/D137890 for the next two patches -Patch2: 0001-llvm-Add-install-targets-for-gtest.patch -# Backport of https://reviews.llvm.org/D156379 from LLVM 18. -Patch3: D156379.diff +# Backport of https://reviews.llvm.org/D156485 for rhbz#2262260/RHEL-23638 +Patch0: 0001-PEI-Don-t-zero-out-noreg-operands.patch -# Patching third-party dir with a 200 offset in patch number -Patch201: 0201-third-party-Add-install-targets-for-gtest.patch - -# RHEL-specific patches -Patch101: 0001-Deactivate-markdown-doc.patch -#Patch102: 1.patch +# RHEL-specific patch to avoid unwanted recommonmark dep +Patch101: 0101-Deactivate-markdown-doc.patch BuildRequires: gcc BuildRequires: gcc-c++ @@ -163,14 +185,15 @@ Requires: %{name}-libs%{?_isa} = %{version}-%{release} # app that requires the libLLVMLineEditor, so we need to make sure # libedit-devel is available. Requires: libedit-devel -# The installed cmake files reference binaries from llvm-test and llvm-static. -# We tried in the past to split the cmake exports for these binaries out into -# separate files, so that llvm-devel would not need to Require these packages, +# The installed cmake files reference binaries from llvm-test, llvm-static, and +# llvm-gtest. We tried in the past to split the cmake exports for these binaries +# out into separate files, so that llvm-devel would not need to Require these packages, # but this caused bugs (rhbz#1773678) and forced us to carry two non-upstream # patches. Requires: %{name}-static%{?_isa} = %{version}-%{release} %if %{without compat_build} Requires: %{name}-test%{?_isa} = %{version}-%{release} +Requires: %{name}-googletest%{?_isa} = %{version}-%{release} %endif @@ -206,6 +229,13 @@ Provides: llvm-static(major) = %{maj_ver} %description static Static libraries for the LLVM compiler infrastructure. +%package cmake-utils +Summary: CMake utilities shared across LLVM subprojects + +%description cmake-utils +CMake utilities shared across LLVM subprojects. +This is for internal use by LLVM packages only. + %if %{without compat_build} %package test @@ -239,12 +269,14 @@ This is the main package for llvm-toolset. %endif %prep +%if %{without snapshot_build} %{gpgverify} --keyring='%{SOURCE6}' --signature='%{SOURCE1}' --data='%{SOURCE0}' %{gpgverify} --keyring='%{SOURCE6}' --signature='%{SOURCE3}' --data='%{SOURCE2}' %{gpgverify} --keyring='%{SOURCE6}' --signature='%{SOURCE5}' --data='%{SOURCE4}' %if %{with bundle_compat_lib} %{gpgverify} --keyring='%{SOURCE6}' --signature='%{SOURCE8}' --data='%{SOURCE7}' %endif +%endif %setup -T -q -b 2 -n %{cmake_srcdir} # TODO: It would be more elegant to set -DLLVM_COMMON_CMAKE_UTILS=%{_builddir}/%{cmake_srcdir}, @@ -285,6 +317,7 @@ mv %{third_party_srcdir} third-party export ASMFLAGS="%{build_cflags}" # force off shared libs as cmake macros turns it on. +# TODO: Disable LLVM_UNREACHABLE_OPTIMIZE. %cmake -G Ninja \ -DBUILD_SHARED_LIBS:BOOL=OFF \ -DLLVM_PARALLEL_LINK_JOBS=1 \ @@ -347,18 +380,20 @@ export ASMFLAGS="%{build_cflags}" %if %{without compat_build} -DLLVM_VERSION_SUFFIX='' \ %endif - -DLLVM_UNREACHABLE_OPTIMIZE:BOOL=OFF \ + -DLLVM_UNREACHABLE_OPTIMIZE:BOOL=ON \ -DLLVM_BUILD_LLVM_DYLIB:BOOL=ON \ -DLLVM_LINK_LLVM_DYLIB:BOOL=ON \ -DLLVM_BUILD_EXTERNAL_COMPILER_RT:BOOL=ON \ -DLLVM_INSTALL_TOOLCHAIN_ONLY:BOOL=OFF \ - \ -DLLVM_DEFAULT_TARGET_TRIPLE=%{llvm_triple} \ -DSPHINX_WARNINGS_AS_ERRORS=OFF \ -DCMAKE_INSTALL_PREFIX=%{install_prefix} \ -DLLVM_INSTALL_SPHINX_HTML_DIR=%{_pkgdocdir}/html \ -DSPHINX_EXECUTABLE=%{_bindir}/sphinx-build-3 \ -DLLVM_INCLUDE_BENCHMARKS=OFF \ +%if %{with lto_build} + -DLLVM_UNITTEST_LINK_FLAGS="-Wl,-plugin-opt=O0" \ +%endif -DCMAKE_SHARED_LINKER_FLAGS="$LDFLAGS -Wl,-z,cet-report=error" # Build libLLVM.so first. This ensures that when libLLVM.so is linking, there @@ -419,11 +454,7 @@ rm -rf test/tools/UpdateTestChecks %multilib_fix_c_header --file %{_includedir}/llvm/Config/llvm-config.h # Install libraries needed for unittests -%if 0%{?__isa_bits} == 64 -%global build_libdir %{_vpath_builddir}/lib64 -%else -%global build_libdir %{_vpath_builddir}/lib -%endif +%global build_libdir %{_vpath_builddir}/%{_lib} install %{build_libdir}/libLLVMTestingSupport.a %{buildroot}%{_libdir} install %{build_libdir}/libLLVMTestingAnnotations.a %{buildroot}%{_libdir} @@ -453,7 +484,7 @@ ln -s ../../../%{install_includedir}/llvm-c %{buildroot}/%{pkg_includedir}/llvm- # Create ld.so.conf.d entry mkdir -p %{buildroot}%{_sysconfdir}/ld.so.conf.d cat >> %{buildroot}%{_sysconfdir}/ld.so.conf.d/%{name}-%{_arch}.conf << EOF -%{pkg_libdir} +%{install_libdir} EOF # Add version suffix to man pages and move them to mandir. @@ -475,19 +506,19 @@ rm -Rf %{build_install_prefix}/share/opt-viewer %if %{without compat_build} -mv %{buildroot}/%{pkg_bindir}/llvm-config %{buildroot}/%{pkg_bindir}/llvm-config%{exec_suffix}-%{__isa_bits} +mv %{buildroot}/%{install_bindir}/llvm-config %{buildroot}/%{install_bindir}/llvm-config%{exec_suffix}-%{__isa_bits} # We still maintain a versionned symlink for consistency across llvm versions. # This is specific to the non-compat build and matches the exec prefix for # compat builds. An isa-agnostic versionned symlink is also maintained in the (un)install # steps. -(cd %{buildroot}/%{pkg_bindir} ; ln -s llvm-config%{exec_suffix}-%{__isa_bits} llvm-config-%{maj_ver}-%{__isa_bits} ) +(cd %{buildroot}/%{install_bindir} ; ln -s llvm-config%{exec_suffix}-%{__isa_bits} llvm-config-%{maj_ver}-%{__isa_bits} ) # ghost presence touch %{buildroot}%{_bindir}/llvm-config-%{maj_ver} %else rm %{buildroot}%{_bindir}/llvm-config%{exec_suffix} -(cd %{buildroot}/%{pkg_bindir} ; ln -s llvm-config llvm-config%{exec_suffix}-%{__isa_bits} ) +(cd %{buildroot}/%{install_bindir} ; ln -s llvm-config llvm-config%{exec_suffix}-%{__isa_bits} ) %endif @@ -495,7 +526,8 @@ rm %{buildroot}%{_bindir}/llvm-config%{exec_suffix} touch %{buildroot}%{_bindir}/llvm-config%{exec_suffix} %if %{without compat_build} -cp -Rv ../cmake/Modules/* %{buildroot}%{_libdir}/cmake/llvm +mkdir -p %{buildroot}%{pkg_datadir}/llvm/cmake +cp -Rv ../cmake/* %{buildroot}%{pkg_datadir}/llvm/cmake %endif @@ -514,7 +546,7 @@ rm test/tools/dsymutil/X86/swift-interface.test %if %{with check} # FIXME: use %%cmake_build instead of %%__ninja -LD_LIBRARY_PATH=%{buildroot}/%{pkg_libdir} %{__ninja} check-all -C %{_vpath_builddir} +LD_LIBRARY_PATH=%{buildroot}/%{install_libdir} %{__ninja} check-all -C %{_vpath_builddir} %endif %endif @@ -522,16 +554,16 @@ LD_LIBRARY_PATH=%{buildroot}/%{pkg_libdir} %{__ninja} check-all -C %{_vpath_bui %ldconfig_scriptlets libs %post devel -%{_sbindir}/update-alternatives --install %{_bindir}/llvm-config%{exec_suffix} llvm-config%{exec_suffix} %{pkg_bindir}/llvm-config%{exec_suffix}-%{__isa_bits} %{__isa_bits} +%{_sbindir}/update-alternatives --install %{_bindir}/llvm-config%{exec_suffix} llvm-config%{exec_suffix} %{install_bindir}/llvm-config%{exec_suffix}-%{__isa_bits} %{__isa_bits} %if %{without compat_build} -%{_sbindir}/update-alternatives --install %{_bindir}/llvm-config-%{maj_ver} llvm-config-%{maj_ver} %{pkg_bindir}/llvm-config%{exec_suffix}-%{__isa_bits} %{__isa_bits} +%{_sbindir}/update-alternatives --install %{_bindir}/llvm-config-%{maj_ver} llvm-config-%{maj_ver} %{install_bindir}/llvm-config%{exec_suffix}-%{__isa_bits} %{__isa_bits} %endif %postun devel if [ $1 -eq 0 ]; then - %{_sbindir}/update-alternatives --remove llvm-config%{exec_suffix} %{pkg_bindir}/llvm-config%{exec_suffix}-%{__isa_bits} + %{_sbindir}/update-alternatives --remove llvm-config%{exec_suffix} %{install_bindir}/llvm-config%{exec_suffix}-%{__isa_bits} %if %{without compat_build} - %{_sbindir}/update-alternatives --remove llvm-config-%{maj_ver} %{pkg_bindir}/llvm-config%{exec_suffix}-%{__isa_bits} + %{_sbindir}/update-alternatives --remove llvm-config-%{maj_ver} %{install_bindir}/llvm-config%{exec_suffix}-%{__isa_bits} %endif fi @@ -542,11 +574,11 @@ fi %{_bindir}/* %exclude %{_bindir}/llvm-config%{exec_suffix} -%exclude %{pkg_bindir}/llvm-config%{exec_suffix}-%{__isa_bits} +%exclude %{install_bindir}/llvm-config%{exec_suffix}-%{__isa_bits} %if %{without compat_build} %exclude %{_bindir}/llvm-config-%{maj_ver} -%exclude %{pkg_bindir}/llvm-config-%{maj_ver}-%{__isa_bits} +%exclude %{install_bindir}/llvm-config-%{maj_ver}-%{__isa_bits} %exclude %{_bindir}/not %exclude %{_bindir}/count %exclude %{_bindir}/yaml-bench @@ -555,12 +587,12 @@ fi %exclude %{_bindir}/llvm-opt-fuzzer %{_datadir}/opt-viewer %else -%{pkg_bindir} +%{install_bindir} %endif %files libs %license LICENSE.TXT -%{pkg_libdir}/libLLVM-%{maj_ver}.so +%{install_libdir}/libLLVM-%{maj_ver}%{?llvm_snapshot_version_suffix:%{llvm_snapshot_version_suffix}}.so %if %{without compat_build} %if %{with gold} %{_libdir}/LLVMgold.so @@ -573,11 +605,11 @@ fi %if %{with gold} %{_libdir}/%{name}/lib/LLVMgold.so %endif -%{pkg_libdir}/libLLVM-%{maj_ver}.%{min_ver}*.so -%{pkg_libdir}/libLTO.so* -%exclude %{pkg_libdir}/libLTO.so +%{install_libdir}/libLLVM-%{maj_ver}.%{min_ver}*.so +%{install_libdir}/libLTO.so* +%exclude %{install_libdir}/libLTO.so %endif -%{pkg_libdir}/libRemarks.so* +%{install_libdir}/libRemarks.so* %if %{with bundle_compat_lib} %{_libdir}/libLLVM-%{compat_maj_ver}.so %endif @@ -586,24 +618,20 @@ fi %license LICENSE.TXT %ghost %{_bindir}/llvm-config%{exec_suffix} -%{pkg_bindir}/llvm-config%{exec_suffix}-%{__isa_bits} +%{install_bindir}/llvm-config%{exec_suffix}-%{__isa_bits} %{_mandir}/man1/llvm-config* -%if %{without compat_build} -%{_includedir}/llvm -%{_includedir}/llvm-c -%{_libdir}/libLLVM.so -%{_libdir}/cmake/llvm -%{pkg_bindir}/llvm-config-%{maj_ver}-%{__isa_bits} -%ghost %{_bindir}/llvm-config-%{maj_ver} -%else %{install_includedir}/llvm %{install_includedir}/llvm-c +%{install_libdir}/libLLVM.so +%{install_libdir}/cmake/llvm +%if %{without compat_build} +%{install_bindir}/llvm-config-%{maj_ver}-%{__isa_bits} +%ghost %{_bindir}/llvm-config-%{maj_ver} +%else %{pkg_includedir}/llvm %{pkg_includedir}/llvm-c -%{pkg_libdir}/libLTO.so -%{pkg_libdir}/libLLVM.so -%{pkg_libdir}/cmake/llvm +%{install_libdir}/libLTO.so %endif %if %{with bundle_compat_lib} %{_libdir}/llvm%{compat_maj_ver}/ @@ -615,16 +643,18 @@ fi %files static %license LICENSE.TXT +%{install_libdir}/*.a %if %{without compat_build} -%{_libdir}/*.a -%exclude %{_libdir}/libLLVMTestingSupport.a -%exclude %{_libdir}/libLLVMTestingAnnotations.a -%exclude %{_libdir}/libllvm_gtest.a -%exclude %{_libdir}/libllvm_gtest_main.a -%else -%{_libdir}/%{name}/lib/*.a +%exclude %{install_libdir}/libLLVMTestingSupport.a +%exclude %{install_libdir}/libLLVMTestingAnnotations.a +%exclude %{install_libdir}/libllvm_gtest.a +%exclude %{install_libdir}/libllvm_gtest_main.a %endif +%files cmake-utils +%license LICENSE.TXT +%{pkg_datadir}/llvm/cmake + %if %{without compat_build} %files test @@ -638,19 +668,44 @@ fi %files googletest %license LICENSE.TXT -%{_libdir}/libLLVMTestingSupport.a -%{_libdir}/libLLVMTestingAnnotations.a -%{_libdir}/libllvm_gtest.a -%{_libdir}/libllvm_gtest_main.a -%{_includedir}/llvm-gtest -%{_includedir}/llvm-gmock +%{install_libdir}/libLLVMTestingSupport.a +%{install_libdir}/libLLVMTestingAnnotations.a +%{install_libdir}/libllvm_gtest.a +%{install_libdir}/libllvm_gtest_main.a +%{install_includedir}/llvm-gtest +%{install_includedir}/llvm-gmock + +%endif + %files toolset %license LICENSE.TXT -%endif - %changelog +* Fri Feb 02 2024 Timm Bäder - 17.0.6-5 +- Backport a patch for RHEL-23638 + +* Mon Jan 08 2024 Timm Bäder - 17.0.6-4 +- Remove compat libs for real. + +* Thu Dec 14 2023 Timm Bäder - 17.0.6-3 +- Add back compat libs until all necessary packages have been rebuilt. + +* Fri Dec 08 2023 Timm Bäder - 17.0.6-2 +- Remove compat libs + +* Tue Dec 05 2023 Timm Bäder - 17.0.6-1 +- Update to 17.0.6 + +* Fri Oct 06 2023 Timm Bäder - 17.0.1-3 +- Add llvm-toolset files section back + +* Mon Oct 02 2023 Timm Bäder - 17.0.1-2 +- Rebuild with newer redhat-rpm-config + +* Tue Sep 26 2023 Timm Bäder - 17.0.1-1 +- Update to 17.0.1 + * Fri Aug 04 2023 Tulio Magno Quites Machado Filho - 16.0.6-4 - Re-add LDFLAGS to shared libraries