Lines Matching refs:Solver
106 static bool tryToReplaceWithConstant(SCCPSolver &Solver, Value *V) { in tryToReplaceWithConstant() argument
109 std::vector<ValueLatticeElement> IVs = Solver.getStructLatticeValueFor(V); in tryToReplaceWithConstant()
117 ? Solver.getConstant(V) in tryToReplaceWithConstant()
122 const ValueLatticeElement &IV = Solver.getLatticeValueFor(V); in tryToReplaceWithConstant()
127 isConstant(IV) ? Solver.getConstant(IV) : UndefValue::get(V->getType()); in tryToReplaceWithConstant()
143 Solver.addToMustPreserveReturnsInFunctions(F); in tryToReplaceWithConstant()
157 static bool simplifyInstsInBlock(SCCPSolver &Solver, BasicBlock &BB, in simplifyInstsInBlock() argument
165 if (tryToReplaceWithConstant(Solver, &Inst)) { in simplifyInstsInBlock()
175 const ValueLatticeElement &IV = Solver.getLatticeValueFor(ExtOp); in simplifyInstsInBlock()
183 Solver.removeLatticeValueFor(&Inst); in simplifyInstsInBlock()
193 static bool removeNonFeasibleEdges(const SCCPSolver &Solver, BasicBlock *BB,
202 SCCPSolver Solver( in runSCCP() local
207 Solver.markBlockExecutable(&F.front()); in runSCCP()
211 Solver.markOverdefined(&AI); in runSCCP()
216 Solver.solve(); in runSCCP()
218 ResolvedUndefs = Solver.resolvedUndefsIn(F); in runSCCP()
230 if (!Solver.isBlockExecutable(&BB)) { in runSCCP()
238 MadeChanges |= simplifyInstsInBlock(Solver, BB, InsertedValues, in runSCCP()
249 MadeChanges |= removeNonFeasibleEdges(Solver, &BB, DTU, NewUnreachableBB); in runSCCP()
323 SCCPSolver &Solver) { in findReturnsToZap() argument
325 if (!Solver.isArgumentTrackedFunction(&F)) in findReturnsToZap()
328 if (Solver.mustPreserveReturn(&F)) { in findReturnsToZap()
339 [&Solver](User *U) { in findReturnsToZap()
341 !Solver.isBlockExecutable(cast<Instruction>(U)->getParent())) in findReturnsToZap()
350 return all_of(Solver.getStructLatticeValueFor(U), in findReturnsToZap()
355 return !isOverdefined(Solver.getLatticeValueFor(U)); in findReturnsToZap()
373 static bool removeNonFeasibleEdges(const SCCPSolver &Solver, BasicBlock *BB, in removeNonFeasibleEdges() argument
379 if (Solver.isEdgeFeasible(BB, Succ)) in removeNonFeasibleEdges()
471 SCCPSolver Solver(DL, GetTLI, M.getContext()); in runIPSCCP() local
479 Solver.addAnalysis(F, getAnalysis(F)); in runIPSCCP()
484 Solver.addTrackedFunction(&F); in runIPSCCP()
489 Solver.addArgumentTrackedFunction(&F); in runIPSCCP()
494 Solver.markBlockExecutable(&F.front()); in runIPSCCP()
498 Solver.markOverdefined(&AI); in runIPSCCP()
507 Solver.trackValueOfGlobalVariable(&G); in runIPSCCP()
512 Solver.solve(); in runIPSCCP()
517 if (Solver.resolvedUndefsIn(F)) in runIPSCCP()
521 Solver.solve(); in runIPSCCP()
535 if (Solver.isBlockExecutable(&F.front())) { in runIPSCCP()
538 if (!Arg.use_empty() && tryToReplaceWithConstant(Solver, &Arg)) { in runIPSCCP()
566 if (!Solver.isBlockExecutable(&BB)) { in runIPSCCP()
577 MadeChanges |= simplifyInstsInBlock(Solver, BB, InsertedValues, in runIPSCCP()
581 DomTreeUpdater DTU = Solver.getDTU(F); in runIPSCCP()
590 if (!Solver.isBlockExecutable(&F.front())) in runIPSCCP()
596 MadeChanges |= removeNonFeasibleEdges(Solver, &BB, DTU, NewUnreachableBB); in runIPSCCP()
604 if (Solver.getPredicateInfoFor(&Inst)) { in runIPSCCP()
629 for (const auto &I : Solver.getTrackedRetVals()) { in runIPSCCP()
671 findReturnsToZap(*F, ReturnsToZap, Solver); in runIPSCCP()
674 for (auto F : Solver.getMRVFunctionsTracked()) { in runIPSCCP()
678 if (Solver.isStructLatticeConstant(F, STy)) in runIPSCCP()
679 findReturnsToZap(*F, ReturnsToZap, Solver); in runIPSCCP()
708 for (auto &I : make_early_inc_range(Solver.getTrackedGlobals())) { in runIPSCCP()