[PM] Lift the actual analyses used into the inferface rather than

accepting a Pass and querying it for analyses.

This is necessary to allow the utilities to work both with the old and
new pass managers, and I also think this makes the interface much more
clear and helps the reader know what analyses the utility can actually
handle. I plan to repeat this process iteratively to clean up all the
pass utilities.

llvm-svn: 226386
This commit is contained in:
Chandler Carruth 2015-01-18 01:45:07 +00:00
parent 691addc25f
commit 5eee895ccf
2 changed files with 10 additions and 11 deletions

View File

@ -23,6 +23,7 @@
namespace llvm {
class AliasAnalysis;
class MemoryDependenceAnalysis;
class DominatorTree;
class Instruction;
class MDNode;
@ -39,7 +40,8 @@ void DeleteDeadBlock(BasicBlock *BB);
/// any single-entry PHI nodes in it, fold them away. This handles the case
/// when all entries to the PHI nodes in a block are guaranteed equal, such as
/// when the block has exactly one predecessor.
void FoldSingleEntryPHINodes(BasicBlock *BB, Pass *P = nullptr);
void FoldSingleEntryPHINodes(BasicBlock *BB, AliasAnalysis *AA = nullptr,
MemoryDependenceAnalysis *MemDep = nullptr);
/// DeleteDeadPHIs - Examine each PHI in the given block and delete it if it
/// is dead. Also recursively delete any operands that become dead as

View File

@ -65,16 +65,10 @@ void llvm::DeleteDeadBlock(BasicBlock *BB) {
/// any single-entry PHI nodes in it, fold them away. This handles the case
/// when all entries to the PHI nodes in a block are guaranteed equal, such as
/// when the block has exactly one predecessor.
void llvm::FoldSingleEntryPHINodes(BasicBlock *BB, Pass *P) {
void llvm::FoldSingleEntryPHINodes(BasicBlock *BB, AliasAnalysis *AA,
MemoryDependenceAnalysis *MemDep) {
if (!isa<PHINode>(BB->begin())) return;
AliasAnalysis *AA = nullptr;
MemoryDependenceAnalysis *MemDep = nullptr;
if (P) {
AA = P->getAnalysisIfAvailable<AliasAnalysis>();
MemDep = P->getAnalysisIfAvailable<MemoryDependenceAnalysis>();
}
while (PHINode *PN = dyn_cast<PHINode>(BB->begin())) {
if (PN->getIncomingValue(0) != PN)
PN->replaceAllUsesWith(PN->getIncomingValue(0));
@ -148,8 +142,11 @@ bool llvm::MergeBlockIntoPredecessor(BasicBlock *BB, Pass *P) {
}
// Begin by getting rid of unneeded PHIs.
if (isa<PHINode>(BB->front()))
FoldSingleEntryPHINodes(BB, P);
if (isa<PHINode>(BB->front())) {
auto *AA = P ? P->getAnalysisIfAvailable<AliasAnalysis>() : nullptr;
auto *MemDep = P ? P->getAnalysisIfAvailable<MemoryDependenceAnalysis>() : nullptr;
FoldSingleEntryPHINodes(BB, AA, MemDep);
}
// Delete the unconditional branch from the predecessor...
PredBB->getInstList().pop_back();