mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-13 20:32:21 +00:00
populate instcombine's initial worklist more carefully, causing
it to visit instructions from the start of the function to the end of the function in the first path. This greatly speeds up some pathological cases (e.g. PR5150). git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@83790 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
849a639e17
commit
9a12a786b0
@ -12681,6 +12681,9 @@ static void AddReachableCodeToWorklist(BasicBlock *BB,
|
||||
const TargetData *TD) {
|
||||
SmallVector<BasicBlock*, 256> Worklist;
|
||||
Worklist.push_back(BB);
|
||||
|
||||
std::vector<Instruction*> InstrsForInstCombineWorklist;
|
||||
InstrsForInstCombineWorklist.reserve(128);
|
||||
|
||||
while (!Worklist.empty()) {
|
||||
BB = Worklist.back();
|
||||
@ -12727,7 +12730,7 @@ static void AddReachableCodeToWorklist(BasicBlock *BB,
|
||||
DBI_Prev = 0;
|
||||
}
|
||||
|
||||
IC.Worklist.Add(Inst);
|
||||
InstrsForInstCombineWorklist.push_back(Inst);
|
||||
}
|
||||
|
||||
// Recursively visit successors. If this is a branch or switch on a
|
||||
@ -12759,6 +12762,16 @@ static void AddReachableCodeToWorklist(BasicBlock *BB,
|
||||
for (unsigned i = 0, e = TI->getNumSuccessors(); i != e; ++i)
|
||||
Worklist.push_back(TI->getSuccessor(i));
|
||||
}
|
||||
|
||||
// Once we've found all of the instructions to add to instcombine's worklist,
|
||||
// add them in reverse order. This way instcombine will visit from the top
|
||||
// of the function down. This jives well with the way that it adds all uses
|
||||
// of instructions to the worklist after doing a transformation, thus avoiding
|
||||
// some N^2 behavior in pathological cases.
|
||||
for (std::vector<Instruction*>::reverse_iterator
|
||||
I = InstrsForInstCombineWorklist.rbegin(),
|
||||
E = InstrsForInstCombineWorklist.rend(); I != E; ++I)
|
||||
IC.Worklist.Add(*I);
|
||||
}
|
||||
|
||||
bool InstCombiner::DoOneIteration(Function &F, unsigned Iteration) {
|
||||
|
Loading…
Reference in New Issue
Block a user