[llvm] 198df5f - Weaken MFI Max Call Frame Size Assertion
Matthias Braun via llvm-commits
llvm-commits at lists.llvm.org
Wed Jul 5 14:03:16 PDT 2023
Author: Oskar Wirga
Date: 2023-07-05T14:02:51-07:00
New Revision: 198df5f6820489f9a15a682f189d3827a0be2323
URL: https://github.com/llvm/llvm-project/commit/198df5f6820489f9a15a682f189d3827a0be2323
DIFF: https://github.com/llvm/llvm-project/commit/198df5f6820489f9a15a682f189d3827a0be2323.diff
LOG: Weaken MFI Max Call Frame Size Assertion
A year ago when I was not invested at all into compilers, I found an assertion error when building an AArch64 debug build with LTO + CFI, among other combinations.
It was posted as a github issue here: https://github.com/llvm/llvm-project/issues/54088
I took it upon myself to revisit the issue now that I have spent some more time working on LLVM.
Reviewed By: MatzeB
Differential Revision: https://reviews.llvm.org/D151276
Added:
llvm/test/CodeGen/AArch64/compute-call-frame-size-unreachable-pass.ll
Modified:
llvm/lib/CodeGen/PrologEpilogInserter.cpp
Removed:
################################################################################
diff --git a/llvm/lib/CodeGen/PrologEpilogInserter.cpp b/llvm/lib/CodeGen/PrologEpilogInserter.cpp
index caf4f61d027dbb..34c0201bb0dbe0 100644
--- a/llvm/lib/CodeGen/PrologEpilogInserter.cpp
+++ b/llvm/lib/CodeGen/PrologEpilogInserter.cpp
@@ -376,8 +376,8 @@ void PEI::calculateCallFrameInfo(MachineFunction &MF) {
}
assert(!MFI.isMaxCallFrameSizeComputed() ||
- (MFI.getMaxCallFrameSize() == MaxCallFrameSize &&
- MFI.adjustsStack() == AdjustsStack));
+ (MFI.getMaxCallFrameSize() >= MaxCallFrameSize &&
+ !(AdjustsStack && !MFI.adjustsStack())));
MFI.setAdjustsStack(AdjustsStack);
MFI.setMaxCallFrameSize(MaxCallFrameSize);
diff --git a/llvm/test/CodeGen/AArch64/compute-call-frame-size-unreachable-pass.ll b/llvm/test/CodeGen/AArch64/compute-call-frame-size-unreachable-pass.ll
new file mode 100644
index 00000000000000..6e2bc6e8560080
--- /dev/null
+++ b/llvm/test/CodeGen/AArch64/compute-call-frame-size-unreachable-pass.ll
@@ -0,0 +1,26 @@
+; RUN: llc < %s -mtriple aarch64--
+
+; This tests that the MFI assert in unreachableblockelim pass
+; does not trigger
+
+%struct.ngtcp2_crypto_aead = type { i8*, i64 }
+%struct.ngtcp2_crypto_aead_ctx = type { i8* }
+
+; Function Attrs: noinline optnone
+define internal fastcc void @decrypt_pkt() unnamed_addr #0 !type !0 !type !1 {
+entry:
+ br i1 false, label %cont, label %trap, !nosanitize !2
+
+trap: ; preds = %entry
+ unreachable, !nosanitize !2
+
+cont: ; preds = %entry
+ %call = call i32 undef(i8* undef, %struct.ngtcp2_crypto_aead* undef, %struct.ngtcp2_crypto_aead_ctx* undef, i8* undef, i64 undef, i8* undef, i64 undef, i8* undef, i64 undef)
+ ret void
+}
+
+attributes #0 = { noinline optnone }
+
+!0 = !{i64 0, !"_ZTSFlPhPK18ngtcp2_crypto_aeadPKhmS4_mlP16ngtcp2_crypto_kmPFiS_S2_PK22ngtcp2_crypto_aead_ctxS4_mS4_mS4_mEE"}
+!1 = !{i64 0, !"_ZTSFlPvPKvS1_mS1_mlS_S_E.generalized"}
+!2 = !{}
More information about the llvm-commits
mailing list