GlobalISel: Pass through AssumptionCache
authorMatt Arsenault <Matthew.Arsenault@amd.com>
Mon, 19 Sep 2022 19:25:29 +0000 (15:25 -0400)
committerMatt Arsenault <Matthew.Arsenault@amd.com>
Mon, 19 Sep 2022 23:10:51 +0000 (19:10 -0400)
llvm/include/llvm/CodeGen/GlobalISel/IRTranslator.h
llvm/lib/CodeGen/GlobalISel/IRTranslator.cpp

index a1c07b0..67e8840 100644 (file)
@@ -34,6 +34,7 @@
 namespace llvm {
 
 class AllocaInst;
+class AssumptionCache;
 class BasicBlock;
 class CallInst;
 class CallLowering;
@@ -571,6 +572,7 @@ private:
   std::unique_ptr<OptimizationRemarkEmitter> ORE;
 
   AAResults *AA;
+  AssumptionCache *AC;
   const TargetLibraryInfo *LibInfo;
   FunctionLoweringInfo FuncInfo;
 
index 714f563..c687172 100644 (file)
@@ -16,6 +16,7 @@
 #include "llvm/ADT/SmallSet.h"
 #include "llvm/ADT/SmallVector.h"
 #include "llvm/Analysis/AliasAnalysis.h"
+#include "llvm/Analysis/AssumptionCache.h"
 #include "llvm/Analysis/BranchProbabilityInfo.h"
 #include "llvm/Analysis/Loads.h"
 #include "llvm/Analysis/OptimizationRemarkEmitter.h"
@@ -169,6 +170,7 @@ void IRTranslator::getAnalysisUsage(AnalysisUsage &AU) const {
   AU.addRequired<StackProtector>();
   AU.addRequired<TargetPassConfig>();
   AU.addRequired<GISelCSEAnalysisWrapperPass>();
+  AU.addRequired<AssumptionCacheTracker>();
   if (OptLevel != CodeGenOpt::None) {
     AU.addRequired<BranchProbabilityInfoWrapperPass>();
     AU.addRequired<AAResultsWrapperPass>();
@@ -1313,7 +1315,7 @@ bool IRTranslator::translateLoad(const User &U, MachineIRBuilder &MIRBuilder) {
 
   if (!(Flags & MachineMemOperand::MODereferenceable)) {
     if (isDereferenceableAndAlignedPointer(Ptr, LI.getType(), LI.getAlign(),
-                                           *DL, &LI, nullptr, nullptr, LibInfo))
+                                           *DL, &LI, AC, nullptr, LibInfo))
       Flags |= MachineMemOperand::MODereferenceable;
   }
 
@@ -3397,6 +3399,8 @@ bool IRTranslator::runOnMachineFunction(MachineFunction &CurMF) {
     FuncInfo.BPI = nullptr;
   }
 
+  AC = &getAnalysis<AssumptionCacheTracker>().getAssumptionCache(
+      MF->getFunction());
   LibInfo = &getAnalysis<TargetLibraryInfoWrapperPass>().getTLI(F);
   FuncInfo.CanLowerReturn = CLI->checkReturnTypeForCallConv(*MF);