mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-10-20 03:23:01 +02:00
Fix PR255: [tailduplication] Single basic block loops are very rare
Note that this is a band-aid put over a band-aid. This just undisables tail duplication in on very specific case that it seems to work in. llvm-svn: 11989
This commit is contained in:
parent
3d509f013e
commit
bcc0df60ef
@ -125,6 +125,7 @@ bool TailDup::shouldEliminateUnconditionalBranch(TerminatorInst *TI) {
|
||||
bool TailDup::canEliminateUnconditionalBranch(TerminatorInst *TI) {
|
||||
// Basically, we refuse to make the transformation if any of the values
|
||||
// computed in the 'tail' are used in any other basic blocks.
|
||||
BasicBlock *BB = TI->getParent();
|
||||
BasicBlock *Tail = TI->getSuccessor(0);
|
||||
assert(isa<BranchInst>(TI) && cast<BranchInst>(TI)->isUnconditional());
|
||||
|
||||
@ -132,7 +133,7 @@ bool TailDup::canEliminateUnconditionalBranch(TerminatorInst *TI) {
|
||||
for (Value::use_iterator UI = I->use_begin(), E = I->use_end(); UI != E;
|
||||
++UI) {
|
||||
Instruction *User = cast<Instruction>(*UI);
|
||||
if (User->getParent() != Tail || isa<PHINode>(User))
|
||||
if (User->getParent() != Tail && User->getParent() != BB)
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
|
Loading…
Reference in New Issue
Block a user