diff options
| author | Nuno Lopes <nunoplopes@sapo.pt> | 2012-07-03 17:13:25 +0000 |
|---|---|---|
| committer | Nuno Lopes <nunoplopes@sapo.pt> | 2012-07-03 17:13:25 +0000 |
| commit | 9291ff4078e57f3b09d76bd2148814b259fb5638 (patch) | |
| tree | 03c0dafb247e97c870465b3cfa7798f815281a0e /llvm/lib/Analysis/MemoryBuiltins.cpp | |
| parent | 90c76dfb17e77bba0cddf774f4e9fa7090b1d10e (diff) | |
| download | bcm5719-llvm-9291ff4078e57f3b09d76bd2148814b259fb5638.tar.gz bcm5719-llvm-9291ff4078e57f3b09d76bd2148814b259fb5638.zip | |
fold PHI nodes in SizeOffsetEvaluator whenever possible.
Unfortunately this change requires the cache map to hold WeakVHs instead
llvm-svn: 159667
Diffstat (limited to 'llvm/lib/Analysis/MemoryBuiltins.cpp')
| -rw-r--r-- | llvm/lib/Analysis/MemoryBuiltins.cpp | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/llvm/lib/Analysis/MemoryBuiltins.cpp b/llvm/lib/Analysis/MemoryBuiltins.cpp index b60b728b915..39edaaf1c49 100644 --- a/llvm/lib/Analysis/MemoryBuiltins.cpp +++ b/llvm/lib/Analysis/MemoryBuiltins.cpp @@ -682,7 +682,19 @@ SizeOffsetEvalType ObjectSizeOffsetEvaluator::visitPHINode(PHINode &PHI) { SizePHI->addIncoming(EdgeData.first, PHI.getIncomingBlock(i)); OffsetPHI->addIncoming(EdgeData.second, PHI.getIncomingBlock(i)); } - return std::make_pair(SizePHI, OffsetPHI); + + Value *Size = SizePHI, *Offset = OffsetPHI, *Tmp; + if ((Tmp = SizePHI->hasConstantValue())) { + Size = Tmp; + SizePHI->replaceAllUsesWith(Size); + SizePHI->eraseFromParent(); + } + if ((Tmp = OffsetPHI->hasConstantValue())) { + Offset = Tmp; + OffsetPHI->replaceAllUsesWith(Offset); + OffsetPHI->eraseFromParent(); + } + return std::make_pair(Size, Offset); } SizeOffsetEvalType ObjectSizeOffsetEvaluator::visitSelectInst(SelectInst &I) { |

