[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