aboutsummaryrefslogtreecommitdiffstats
path: root/include/llvm/CodeGen/LiveIntervalAnalysis.h
diff options
context:
space:
mode:
authorEvan Cheng <evan.cheng@apple.com>2008-02-13 03:01:43 +0000
committerEvan Cheng <evan.cheng@apple.com>2008-02-13 03:01:43 +0000
commit14fad81f260b9e49c65aa61b7bbdd36942810b94 (patch)
treea6d00881c3c6596e57f1b8a38fa7b8b860805161 /include/llvm/CodeGen/LiveIntervalAnalysis.h
parent78297d875b1243a515b766ba4cdc676afd85a891 (diff)
downloadexternal_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.h14
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;