[llvm] a54736a - CloneFunction: Do not delete blocks with address taken (#134209)

via llvm-commits llvm-commits at lists.llvm.org
Thu Apr 3 09:52:29 PDT 2025


Author: Matt Arsenault
Date: 2025-04-03T23:52:25+07:00
New Revision: a54736afd5b8f8ed25550a9f456afd36e49c04e0

URL: https://github.com/llvm/llvm-project/commit/a54736afd5b8f8ed25550a9f456afd36e49c04e0
DIFF: https://github.com/llvm/llvm-project/commit/a54736afd5b8f8ed25550a9f456afd36e49c04e0.diff

LOG: CloneFunction: Do not delete blocks with address taken (#134209)

If a block with a single predecessor also had its address taken,
it was getting deleted in this post-inline cleanup step. This would
result in the blockaddress in the resulting function getting deleted
and replaced with inttoptr 1.

This fixes one bug required to permit inlining of functions with blockaddress 
uses.

At the moment this is not testable (at least without an annoyingly complex
unit test),  and is a pre-bug fix for future patches. Functions with
blockaddress uses are rejected in isInlineViable, so we don't get this far
with the current InlineFunction uses (some of the existing cases seem to
reproduce this part of the rejection logic, like PartialInliner). This
will be tested in a pending llvm-reduce change.

Prerequisite for #38908

Added: 
    

Modified: 
    llvm/lib/Transforms/Utils/CloneFunction.cpp

Removed: 
    


################################################################################
diff  --git a/llvm/lib/Transforms/Utils/CloneFunction.cpp b/llvm/lib/Transforms/Utils/CloneFunction.cpp
index e58585705e82f..9387797019023 100644
--- a/llvm/lib/Transforms/Utils/CloneFunction.cpp
+++ b/llvm/lib/Transforms/Utils/CloneFunction.cpp
@@ -928,7 +928,7 @@ void llvm::CloneAndPruneIntoFromInst(Function *NewFunc, const Function *OldFunc,
     }
 
     BasicBlock *Dest = BI->getSuccessor(0);
-    if (!Dest->getSinglePredecessor()) {
+    if (!Dest->getSinglePredecessor() || Dest->hasAddressTaken()) {
       ++I;
       continue;
     }


        


More information about the llvm-commits mailing list