[Attributor] Use Alias Analysis in noalias callsite argument deduction
Summary: This patch adds a check of alias analysis in `noalias` callsite argument deduction.
Reviewers: jdoerfert, sstefan1
Reviewed By: jdoerfert
Subscribers: hiraditya, llvm-commits
Tags: #llvm
Differential Revision: https://reviews.llvm.org/D67604
llvm-svn: 372075
diff --git a/llvm/lib/Transforms/IPO/Attributor.cpp b/llvm/lib/Transforms/IPO/Attributor.cpp
index 90b0772..a6f8472 100644
--- a/llvm/lib/Transforms/IPO/Attributor.cpp
+++ b/llvm/lib/Transforms/IPO/Attributor.cpp
@@ -1762,11 +1762,18 @@
if (!ArgOp->getType()->isPointerTy())
continue;
- // TODO: Use AliasAnalysis
- // AAResults& AAR = ..;
- // if(AAR.isNoAlias(&getAssociatedValue(), ArgOp))
- // return indicatePessimitisicFixpoint();
+ if (const Function *F = getAnchorScope()) {
+ if (AAResults *AAR = A.getInfoCache().getAAResultsForFunction(*F)) {
+ LLVM_DEBUG(dbgs()
+ << "[Attributor][NoAliasCSArg] Check alias between "
+ "callsite arguments "
+ << AAR->isNoAlias(&getAssociatedValue(), ArgOp) << " "
+ << getAssociatedValue() << " " << *ArgOp << "\n");
+ if (AAR->isNoAlias(&getAssociatedValue(), ArgOp))
+ continue;
+ }
+ }
return indicatePessimisticFixpoint();
}