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

Vedant Paranjape via llvm-commits llvm-commits at lists.llvm.org
Wed Jun 12 03:26:09 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;
----------------
vedantparanjape-amd wrote:

I don't think there is an easy way to implement this. I have pushed another patch but it fails even for the current testcase, but the workaround for it creates issues with other testcases too.

problem is that it looks at the recursive function's callee in the attached testcase and it fails at `isDereferenceableAndAlignedPointer` check for that call. So, I am not sure then if the attached testcase is correct in the first place ?

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


More information about the llvm-commits mailing list