diff options
author | Evan Cheng <evan.cheng@apple.com> | 2008-02-13 03:01:43 +0000 |
---|---|---|
committer | Evan Cheng <evan.cheng@apple.com> | 2008-02-13 03:01:43 +0000 |
commit | 14fad81f260b9e49c65aa61b7bbdd36942810b94 (patch) | |
tree | a6d00881c3c6596e57f1b8a38fa7b8b860805161 /include/llvm/CodeGen/LiveIntervalAnalysis.h | |
parent | 78297d875b1243a515b766ba4cdc676afd85a891 (diff) | |
download | external_llvm-14fad81f260b9e49c65aa61b7bbdd36942810b94.zip external_llvm-14fad81f260b9e49c65aa61b7bbdd36942810b94.tar.gz external_llvm-14fad81f260b9e49c65aa61b7bbdd36942810b94.tar.bz2 |
Initial support for copy elimination by commuting its definition MI.
PR1877.
A3 = op A2 B0<kill>
...
B1 = A3 <- this copy
...
= op A3 <- more uses
==>
B2 = op B0 A2<kill>
...
B1 = B2 <- now an identify copy
...
= op B2 <- more uses
This speeds up FreeBench/neural by 29%, Olden/bh by 12%, oopack_v1p8 by 53%.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@47046 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'include/llvm/CodeGen/LiveIntervalAnalysis.h')
-rw-r--r-- | include/llvm/CodeGen/LiveIntervalAnalysis.h | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/include/llvm/CodeGen/LiveIntervalAnalysis.h b/include/llvm/CodeGen/LiveIntervalAnalysis.h index 34a05ff..6bc0252 100644 --- a/include/llvm/CodeGen/LiveIntervalAnalysis.h +++ b/include/llvm/CodeGen/LiveIntervalAnalysis.h @@ -213,6 +213,20 @@ namespace llvm { } } + /// ReplaceMachineInstrInMaps - Replacing a machine instr with a new one in + /// maps used by register allocator. + void ReplaceMachineInstrInMaps(MachineInstr *MI, MachineInstr *NewMI) { + Mi2IndexMap::iterator mi2i = mi2iMap_.find(MI); + if (mi2i != mi2iMap_.end()) { + i2miMap_[mi2i->second/InstrSlots::NUM] = NewMI; + Mi2IndexMap::const_iterator it = mi2iMap_.find(MI); + assert(it != mi2iMap_.end() && "Invalid instruction!"); + unsigned Index = it->second; + mi2iMap_.erase(MI); + mi2iMap_[NewMI] = Index; + } + } + BumpPtrAllocator& getVNInfoAllocator() { return VNInfoAllocator; } virtual void getAnalysisUsage(AnalysisUsage &AU) const; |