[InlineFunction] Only check pointer arguments for a call
authorChen Zheng <czhengsz@cn.ibm.com>
Thu, 30 Jun 2022 09:26:27 +0000 (05:26 -0400)
committerChen Zheng <czhengsz@cn.ibm.com>
Thu, 30 Jun 2022 09:39:47 +0000 (05:39 -0400)
Reviewed By: nikic

Differential Revision: https://reviews.llvm.org/D128529

llvm/lib/Transforms/Utils/InlineFunction.cpp

index c69ca70..226b00a 100644 (file)
@@ -1043,12 +1043,10 @@ static void AddAliasScopeMetadata(CallBase &CB, ValueToValueMapTy &VMap,
         }
 
         for (Value *Arg : Call->args()) {
-          // We need to check the underlying objects of all arguments, not just
-          // the pointer arguments, because we might be passing pointers as
-          // integers, etc.
-          // However, if we know that the call only accesses pointer arguments,
-          // then we only need to check the pointer arguments.
-          if (IsArgMemOnlyCall && !Arg->getType()->isPointerTy())
+          // Only care about pointer arguments. If a noalias argument is
+          // accessed through a non-pointer argument, it must be captured
+          // first (e.g. via ptrtoint), and we protect against captures below.
+          if (!Arg->getType()->isPointerTy())
             continue;
 
           PtrArgs.push_back(Arg);