diff --git a/hpvm/tools/hpvm-dse/hpvm-dse.cpp b/hpvm/tools/hpvm-dse/hpvm-dse.cpp
index 0e3d37afa22b3c2194f1757bdd8edb3d8f5234de..9b2a40367015be4d916075a47f83cbef1ba9414e 100644
--- a/hpvm/tools/hpvm-dse/hpvm-dse.cpp
+++ b/hpvm/tools/hpvm-dse/hpvm-dse.cpp
@@ -903,24 +903,17 @@ void OptimizeLeaf(ParamMaps &PM, DFLeafNode *NewLeaf, ValueToValueMapTy &VMap,
   // Next, do Dim loops unrolling
   doUnrollDim(PM, NewLeaf, os);
 
+  // Invalidate FunctionAnalysisManager after unrolling
+  FAM.invalidate(*F,PreservedAnalyses::none());
+
   TripCountMap[F] = getFuncLoopTripCounts(F, 1);
   removeNZLoop(F);
   // Normalize after unrolling
-  FunctionAnalysisManager FAM3;
-  LoopAnalysisManager LAM3;
-  ModuleAnalysisManager MAM3;
-  CGSCCAnalysisManager CAM3;
-  PassBuilder PB3;
-  PB3.registerFunctionAnalyses(FAM3);
-  PB3.registerLoopAnalyses(LAM3);
-  PB3.registerModuleAnalyses(MAM3);
-  PB3.registerCGSCCAnalyses(CAM3);
-  PB3.crossRegisterProxies(LAM3, FAM3, CAM3, MAM3);
   FunctionPassManager FPM3;
   // FPM3.addPass(SimplifyCFGPass());
   // FPM3.addPass(EarlyCSEPass(false));
   FPM3.addPass(InstCombinePass());
-  FPM3.run(*F, FAM3);
+  FPM3.run(*F, FAM);
   end = std::chrono::steady_clock::now();
   duration = std::chrono::duration_cast<std::chrono::milliseconds>(end - start);
   os << "\t\tDuration: " << duration.count() << " ms" << std::endl;
@@ -981,7 +974,7 @@ void OptimizeLeaf(ParamMaps &PM, DFLeafNode *NewLeaf, ValueToValueMapTy &VMap,
   start = std::chrono::steady_clock::now();
   FunctionPassManager FPM4;
   FPM4.addPass(SimplifyCFGPass());
-  FPM4.run(*F, FAM3);
+  FPM4.run(*F, FAM);
   end = std::chrono::steady_clock::now();
   duration = std::chrono::duration_cast<std::chrono::milliseconds>(end - start);
   os << "\t\tDuration: " << duration.count() << " ms" << std::endl;