Compare commits

...

2 Commits

Author SHA1 Message Date
Nikita Popov de5056bfff Fix crash with -fzero-call-used-regs 2024-02-06 03:01:19 +00:00
Nikita Popov aff6092c23 Update to LLVM 17.0.6
Resolves: RHEL-11163
2023-11-29 14:41:15 +01:00
5 changed files with 105 additions and 10 deletions

6
.gitignore vendored
View File

@ -20,3 +20,9 @@ SOURCES/llvm-15.0.7.src.tar.xz
/cmake-17.0.2.src.tar.xz.sig
/third-party-17.0.2.src.tar.xz
/third-party-17.0.2.src.tar.xz.sig
/llvm-17.0.6.src.tar.xz
/llvm-17.0.6.src.tar.xz.sig
/cmake-17.0.6.src.tar.xz
/cmake-17.0.6.src.tar.xz.sig
/third-party-17.0.6.src.tar.xz
/third-party-17.0.6.src.tar.xz.sig

6
.llvm.metadata Normal file
View File

@ -0,0 +1,6 @@
860a3605f08a0a56a8de4e073e26a259871623a6 llvm-17.0.6.src.tar.xz
2ad479ab00a6d5e61ecb953997cfeef6650a687a llvm-17.0.6.src.tar.xz.sig
4b397344260c934e687be7efa0f8456a9dd46f44 cmake-17.0.6.src.tar.xz
fa31d348b6780478403484e22139d25f403503d4 cmake-17.0.6.src.tar.xz.sig
a35dc22cd3d983a556f6e4a63c8dac6a84e01caf third-party-17.0.6.src.tar.xz
12128cdab7414aeedd573c61cbc2fa82e75491db third-party-17.0.6.src.tar.xz.sig

View File

@ -0,0 +1,74 @@
From 9d1f05a7b8537deb5f626cd1b7b26ef2678f4c8e Mon Sep 17 00:00:00 2001
From: Arthur Eubanks <aeubanks@google.com>
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

View File

@ -33,7 +33,7 @@
%global maj_ver 17
%global min_ver 0
%global patch_ver 2
%global patch_ver 6
#global rc_ver 4
%if %{with snapshot_build}
@ -138,6 +138,9 @@ Source5: https://github.com/llvm/llvm-project/releases/download/llvmorg-%{maj_ve
Source6: release-keys.asc
%endif
# Backport of https://reviews.llvm.org/D156485 for RHEL-23865.
Patch0: 0001-PEI-Don-t-zero-out-noreg-operands.patch
# RHEL-specific patch to avoid unwanted recommonmark dep
Patch101: 0101-Deactivate-markdown-doc.patch
@ -470,8 +473,8 @@ ln -s ../../../%{install_includedir}/llvm-c %{buildroot}/%{pkg_includedir}/llvm-
%multilib_fix_c_header --file %{install_includedir}/llvm/Config/llvm-config.h
# 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
mkdir -p %{buildroot}/etc/ld.so.conf.d
cat >> %{buildroot}/etc/ld.so.conf.d/%{name}-%{_arch}.conf << EOF
%{install_libdir}
EOF
@ -576,7 +579,7 @@ fi
%{_libdir}/libLLVM-%{maj_ver}.%{min_ver}*.so
%{_libdir}/libLTO.so*
%else
%config(noreplace) %{_sysconfdir}/ld.so.conf.d/%{name}-%{_arch}.conf
%config(noreplace) /etc/ld.so.conf.d/%{name}-%{_arch}.conf
%if %{with gold}
%{_libdir}/%{name}/lib/LLVMgold.so
%endif
@ -652,6 +655,12 @@ fi
%endif
%changelog
* Fri Feb 02 2024 Nikita Popov <npopov@redhat.com> - 17.0.6-2
- Fix crash with -fzero-call-used-regs (RHEL-23865)
* Wed Nov 29 2023 Nikita Popov <npopov@redhat.com> - 17.0.6-1
- Update to LLVM 17.0.6
* Mon Oct 23 2023 Nikita Popov <npopov@redhat.com> - 17.0.2-2
- Add Conflicts to llvm-googletest

12
sources
View File

@ -1,6 +1,6 @@
SHA512 (llvm-17.0.2.src.tar.xz) = 5835b73e023e58e5aa82da2631171e274b0beca10d53b66d40ee44c6c87a4647a9fc6fb6ea93ff4b513805a9d7d157c08e8c22af8e034cc2373982d630e7dc72
SHA512 (llvm-17.0.2.src.tar.xz.sig) = f3df4c292017f66a49a27f3e823f62eeb8c3e6842095200fdad3d757320f96411927fd4db0c296b33e68e2e7f2117b5dcb2f98e723a0c7896b8e64f87f6ca3d5
SHA512 (cmake-17.0.2.src.tar.xz) = 5740262336dd0b99db0f96122cd8bd3e52f1fa2677f7cb70ea35c4ad61b62c150db633a61674fe6a27ad8009abf52ab53148f9dbdde7c24aa5217ca337099b6f
SHA512 (cmake-17.0.2.src.tar.xz.sig) = 9f190af68e099328860a5ba19c90e87b779d1c185f9b9940ff5575848c8bcb689c1a32f5844f011d33a708d98591db2cf066b2188350a5886ae4410d82f497e1
SHA512 (third-party-17.0.2.src.tar.xz) = bbdece9190d0b81d10ba680292fab9e86c9af49e563b3fbef310da911a2b629c372b9888aa553a82625b5e82e2d83dfa598e6d1bda64f36fa6f646332a569f60
SHA512 (third-party-17.0.2.src.tar.xz.sig) = bafad421da451077d2a1eda20105003c286d145f025b36a4b0d359052f98c236a189bf08c36a1e667960ddf31982c858f59713c7d6af491b825ca5d0959318e7
SHA512 (llvm-17.0.6.src.tar.xz) = bf9b04d0d45c67168b195c550cd8326e3a01176f92776705846aad3956a494bcb7a053b0b0bde19abd68dc0068e5c97ef99dee7eadfdb727bc0d758b2684f3bd
SHA512 (llvm-17.0.6.src.tar.xz.sig) = 904066c34ec0adf5b9e789af640329cadc7919b111aca77fa3ce26450696bace20e299e2592251f96ee33fb83da603423cc0ca63a67ad627916fcab0bed59689
SHA512 (cmake-17.0.6.src.tar.xz) = b2c5e404ca36542d44e1a7f2801bbcecbcf5f1e8c63b793bb2308228483406bdfe002720aadb913c0228cd2bbe5998465eaadc4a49fad6a5eb6ff907fa5fd45a
SHA512 (cmake-17.0.6.src.tar.xz.sig) = fad2d91fc3e499dbd1b8c4acbc48ef748c106a04f7529232ea95abf3d006c4494e495643f77e653b1c96f7a0b79fe0706c5cdedd4f7dc4cbbab0ee5cf749c8ce
SHA512 (third-party-17.0.6.src.tar.xz) = 242dada4800c5e558f5f243e6aa0905d90ca3f82cc81baf14c60de543a7e737d4c2f3471122f2c641dc4f0724e4ebf5cf137761a231b34aab2a12f1cfc902c53
SHA512 (third-party-17.0.6.src.tar.xz.sig) = 6b72379b70a359a77f4d7d0922b0e80ff2a44d65178389b25edbc4a72029a91d50b3eb39a1185fac50dbba0a1972572eaadc7d82bb8e87d26f4e42c2bf676b75