[llvm] [ArgPromotion] Handle pointer arguments of recursive calls (PR #78735)

Eli Friedman via llvm-commits llvm-commits at lists.llvm.org
Wed Jun 12 12:34:43 PDT 2024


================
@@ -422,13 +422,16 @@ doPromotion(Function *F, FunctionAnalysisManager &FAM,
 
 /// Return true if we can prove that all callees pass in a valid pointer for the
 /// specified function argument.
-static bool allCallersPassValidPointerForArgument(Argument *Arg,
-                                                  Align NeededAlign,
-                                                  uint64_t NeededDerefBytes) {
+static bool allCallersPassValidPointerForArgument(
+    Argument *Arg, SmallPtrSet<CallBase *, 4> &RecursiveCalls,
+    Align NeededAlign, uint64_t NeededDerefBytes) {
   Function *Callee = Arg->getParent();
   const DataLayout &DL = Callee->getParent()->getDataLayout();
   APInt Bytes(64, NeededDerefBytes);
 
+  if (RecursiveCalls.size())
+    return true;
----------------
efriedma-quic wrote:

The code currently only looks for dereferenceable attributes on the caller (i.e. bar()), not the function itself.

https://github.com/llvm/llvm-project/pull/78735


More information about the llvm-commits mailing list